Skip to content

Commit 759d5b4

Browse files
committed
test: add more tests
1 parent 74dfcf7 commit 759d5b4

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

packages/compiler-sfc/__tests__/compileStyle.spec.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,18 @@ color: red
271271
"#app :where(:where(.foo[data-v-test])) { color: red;
272272
}"
273273
`)
274+
275+
expect(compileScoped(`#app :is(:where(.foo)) { color: red; }`))
276+
.toMatchInlineSnapshot(`
277+
"#app :is(:where(.foo[data-v-test])) { color: red;
278+
}"
279+
`)
280+
281+
expect(compileScoped(`#app :where(:is(.foo)) { color: red; }`))
282+
.toMatchInlineSnapshot(`
283+
"#app :where(:is(.foo[data-v-test])) { color: red;
284+
}"
285+
`)
274286
})
275287

276288
test('media query', () => {

packages/compiler-sfc/src/style/pluginScoped.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,13 +222,12 @@ function rewriteSelector(
222222

223223
if (
224224
(n.type !== 'pseudo' && n.type !== 'combinator') ||
225-
(n.type === 'pseudo' &&
226-
(n.value === ':is' || n.value === ':where') &&
225+
(isPseudoClassIsOrWhere(n) &&
227226
(!node ||
228227
n.nodes.some(
229228
s =>
230229
// has nested :is or :where
231-
s.nodes.some(x => x.type === n.type && x.value === n.value) ||
230+
s.nodes.some(x => isPseudoClassIsOrWhere(x)) ||
232231
// has non-pseudo selector
233232
!s.nodes.some(x => x.type === 'pseudo'),
234233
)))
@@ -250,8 +249,7 @@ function rewriteSelector(
250249
}
251250

252251
if (node) {
253-
const { type, value } = node as selectorParser.Node
254-
if (type === 'pseudo' && (value === ':is' || value === ':where')) {
252+
if (isPseudoClassIsOrWhere(node)) {
255253
;(node as selectorParser.Pseudo).nodes.forEach(value =>
256254
rewriteSelector(id, rule, value, selectorRoot, deep, slotted),
257255
)
@@ -288,6 +286,14 @@ function isSpaceCombinator(node: selectorParser.Node) {
288286
return node.type === 'combinator' && /^\s+$/.test(node.value)
289287
}
290288

289+
function isPseudoClassIsOrWhere(
290+
node: selectorParser.Node,
291+
): node is selectorParser.Pseudo {
292+
return (
293+
node.type === 'pseudo' && (node.value === ':is' || node.value === ':where')
294+
)
295+
}
296+
291297
function extractAndWrapNodes(parentNode: Rule | AtRule) {
292298
if (!parentNode.nodes) return
293299
const nodes = parentNode.nodes.filter(

0 commit comments

Comments
 (0)