@@ -20,58 +20,62 @@ import * as path from 'path';
20
20
const { parseCSS, serializeSelector : serialize } =
21
21
require ( path . join ( __dirname , '..' , 'lib' , 'server' , 'common' , 'cssParser' ) ) ;
22
22
23
+ const parse = ( selector : string ) => {
24
+ return parseCSS ( selector , new Set ( [ 'text' , 'not' , 'has' , 'react' , 'scope' , 'right-of' , 'scope' , 'is' ] ) ) . selector ;
25
+ } ;
26
+
23
27
it ( 'should parse css' , async ( ) => {
24
- expect ( serialize ( parseCSS ( 'div' ) . selector ) ) . toBe ( 'div' ) ;
25
- expect ( serialize ( parseCSS ( 'div.class' ) . selector ) ) . toBe ( 'div.class' ) ;
26
- expect ( serialize ( parseCSS ( '.class' ) . selector ) ) . toBe ( '.class' ) ;
27
- expect ( serialize ( parseCSS ( '#id' ) . selector ) ) . toBe ( '#id' ) ;
28
- expect ( serialize ( parseCSS ( '.class#id' ) . selector ) ) . toBe ( '.class#id' ) ;
29
- expect ( serialize ( parseCSS ( 'div#id.class' ) . selector ) ) . toBe ( 'div#id.class' ) ;
30
- expect ( serialize ( parseCSS ( '*' ) . selector ) ) . toBe ( '*' ) ;
31
- expect ( serialize ( parseCSS ( '*div' ) . selector ) ) . toBe ( '*div' ) ;
32
- expect ( serialize ( parseCSS ( 'div[attr *= foo i]' ) . selector ) ) . toBe ( 'div[attr *= foo i]' ) ;
33
- expect ( serialize ( parseCSS ( 'div[attr~="Bar baz" ]' ) . selector ) ) . toBe ( 'div[attr~="Bar baz" ]' ) ;
34
- expect ( serialize ( parseCSS ( `div [ foo = 'bar' s]` ) . selector ) ) . toBe ( `div [ foo = "bar" s]` ) ;
28
+ expect ( serialize ( parse ( 'div' ) ) ) . toBe ( 'div' ) ;
29
+ expect ( serialize ( parse ( 'div.class' ) ) ) . toBe ( 'div.class' ) ;
30
+ expect ( serialize ( parse ( '.class' ) ) ) . toBe ( '.class' ) ;
31
+ expect ( serialize ( parse ( '#id' ) ) ) . toBe ( '#id' ) ;
32
+ expect ( serialize ( parse ( '.class#id' ) ) ) . toBe ( '.class#id' ) ;
33
+ expect ( serialize ( parse ( 'div#id.class' ) ) ) . toBe ( 'div#id.class' ) ;
34
+ expect ( serialize ( parse ( '*' ) ) ) . toBe ( '*' ) ;
35
+ expect ( serialize ( parse ( '*div' ) ) ) . toBe ( '*div' ) ;
36
+ expect ( serialize ( parse ( 'div[attr *= foo i]' ) ) ) . toBe ( 'div[attr *= foo i]' ) ;
37
+ expect ( serialize ( parse ( 'div[attr~="Bar baz" ]' ) ) ) . toBe ( 'div[attr~="Bar baz" ]' ) ;
38
+ expect ( serialize ( parse ( `div [ foo = 'bar' s]` ) ) ) . toBe ( `div [ foo = "bar" s]` ) ;
35
39
36
- expect ( serialize ( parseCSS ( ':hover' ) . selector ) ) . toBe ( ':hover' ) ;
37
- expect ( serialize ( parseCSS ( 'div:hover' ) . selector ) ) . toBe ( 'div:hover' ) ;
38
- expect ( serialize ( parseCSS ( '#id:active:hover' ) . selector ) ) . toBe ( '#id:active:hover' ) ;
39
- expect ( serialize ( parseCSS ( ':dir(ltr)' ) . selector ) ) . toBe ( ':dir(ltr)' ) ;
40
- expect ( serialize ( parseCSS ( '#foo-bar.cls:nth-child(3n + 10)' ) . selector ) ) . toBe ( '#foo-bar.cls:nth-child(3n + 10)' ) ;
41
- expect ( serialize ( parseCSS ( ':lang(en)' ) . selector ) ) . toBe ( ':lang(en)' ) ;
42
- expect ( serialize ( parseCSS ( '*:hover' ) . selector ) ) . toBe ( '*:hover' ) ;
40
+ expect ( serialize ( parse ( ':hover' ) ) ) . toBe ( ':hover' ) ;
41
+ expect ( serialize ( parse ( 'div:hover' ) ) ) . toBe ( 'div:hover' ) ;
42
+ expect ( serialize ( parse ( '#id:active:hover' ) ) ) . toBe ( '#id:active:hover' ) ;
43
+ expect ( serialize ( parse ( ':dir(ltr)' ) ) ) . toBe ( ':dir(ltr)' ) ;
44
+ expect ( serialize ( parse ( '#foo-bar.cls:nth-child(3n + 10)' ) ) ) . toBe ( '#foo-bar.cls:nth-child(3n + 10)' ) ;
45
+ expect ( serialize ( parse ( ':lang(en)' ) ) ) . toBe ( ':lang(en)' ) ;
46
+ expect ( serialize ( parse ( '*:hover' ) ) ) . toBe ( '*:hover' ) ;
43
47
44
- expect ( serialize ( parseCSS ( 'div span' ) . selector ) ) . toBe ( 'div span' ) ;
45
- expect ( serialize ( parseCSS ( 'div>span' ) . selector ) ) . toBe ( 'div > span' ) ;
46
- expect ( serialize ( parseCSS ( 'div +span' ) . selector ) ) . toBe ( 'div + span' ) ;
47
- expect ( serialize ( parseCSS ( 'div~ span' ) . selector ) ) . toBe ( 'div ~ span' ) ;
48
- expect ( serialize ( parseCSS ( 'div >.class #id+ span' ) . selector ) ) . toBe ( 'div > .class #id + span' ) ;
49
- expect ( serialize ( parseCSS ( 'div>span+.class' ) . selector ) ) . toBe ( 'div > span + .class' ) ;
48
+ expect ( serialize ( parse ( 'div span' ) ) ) . toBe ( 'div span' ) ;
49
+ expect ( serialize ( parse ( 'div>span' ) ) ) . toBe ( 'div > span' ) ;
50
+ expect ( serialize ( parse ( 'div +span' ) ) ) . toBe ( 'div + span' ) ;
51
+ expect ( serialize ( parse ( 'div~ span' ) ) ) . toBe ( 'div ~ span' ) ;
52
+ expect ( serialize ( parse ( 'div >.class #id+ span' ) ) ) . toBe ( 'div > .class #id + span' ) ;
53
+ expect ( serialize ( parse ( 'div>span+.class' ) ) ) . toBe ( 'div > span + .class' ) ;
50
54
51
- expect ( serialize ( parseCSS ( 'div:not(span)' ) . selector ) ) . toBe ( 'div:not(span)' ) ;
52
- expect ( serialize ( parseCSS ( ':not(span)#id' ) . selector ) ) . toBe ( '#id:not(span)' ) ;
53
- expect ( serialize ( parseCSS ( 'div:not(span):hover' ) . selector ) ) . toBe ( 'div:hover:not(span)' ) ;
54
- expect ( serialize ( parseCSS ( 'div:has(span):hover' ) . selector ) ) . toBe ( 'div:hover:has(span)' ) ;
55
- expect ( serialize ( parseCSS ( 'div:right-of(span):hover' ) . selector ) ) . toBe ( 'div:hover:right-of(span)' ) ;
56
- expect ( serialize ( parseCSS ( ':right-of(span):react(foobar)' ) . selector ) ) . toBe ( ':right-of(span):react(foobar)' ) ;
57
- expect ( serialize ( parseCSS ( 'div:is(span):hover' ) . selector ) ) . toBe ( 'div:hover:is(span)' ) ;
58
- expect ( serialize ( parseCSS ( 'div:scope:hover' ) . selector ) ) . toBe ( 'div:hover:scope()' ) ;
59
- expect ( serialize ( parseCSS ( 'div:sCOpe:HOVER' ) . selector ) ) . toBe ( 'div:HOVER:scope()' ) ;
60
- expect ( serialize ( parseCSS ( 'div:NOT(span):hoVER' ) . selector ) ) . toBe ( 'div:hoVER:not(span)' ) ;
55
+ expect ( serialize ( parse ( 'div:not(span)' ) ) ) . toBe ( 'div:not(span)' ) ;
56
+ expect ( serialize ( parse ( ':not(span)#id' ) ) ) . toBe ( '#id:not(span)' ) ;
57
+ expect ( serialize ( parse ( 'div:not(span):hover' ) ) ) . toBe ( 'div:hover:not(span)' ) ;
58
+ expect ( serialize ( parse ( 'div:has(span):hover' ) ) ) . toBe ( 'div:hover:has(span)' ) ;
59
+ expect ( serialize ( parse ( 'div:right-of(span):hover' ) ) ) . toBe ( 'div:hover:right-of(span)' ) ;
60
+ expect ( serialize ( parse ( ':right-of(span):react(foobar)' ) ) ) . toBe ( ':right-of(span):react(foobar)' ) ;
61
+ expect ( serialize ( parse ( 'div:is(span):hover' ) ) ) . toBe ( 'div:hover:is(span)' ) ;
62
+ expect ( serialize ( parse ( 'div:scope:hover' ) ) ) . toBe ( 'div:hover:scope()' ) ;
63
+ expect ( serialize ( parse ( 'div:sCOpe:HOVER' ) ) ) . toBe ( 'div:HOVER:scope()' ) ;
64
+ expect ( serialize ( parse ( 'div:NOT(span):hoVER' ) ) ) . toBe ( 'div:hoVER:not(span)' ) ;
61
65
62
- expect ( serialize ( parseCSS ( ':text("foo")' ) . selector ) ) . toBe ( ':text("foo")' ) ;
63
- expect ( serialize ( parseCSS ( ':text("*")' ) . selector ) ) . toBe ( ':text("*")' ) ;
64
- expect ( serialize ( parseCSS ( ':text(*)' ) . selector ) ) . toBe ( ':text(*)' ) ;
65
- expect ( serialize ( parseCSS ( ':text("foo", normalize-space)' ) . selector ) ) . toBe ( ':text("foo", normalize-space)' ) ;
66
- expect ( serialize ( parseCSS ( ':index(3, div span)' ) . selector ) ) . toBe ( ':index(3, div span)' ) ;
67
- expect ( serialize ( parseCSS ( ':is(foo, bar>baz.cls+:not(qux))' ) . selector ) ) . toBe ( ':is(foo, bar > baz.cls + :not(qux))' ) ;
66
+ expect ( serialize ( parse ( ':text("foo")' ) ) ) . toBe ( ':text("foo")' ) ;
67
+ expect ( serialize ( parse ( ':text("*")' ) ) ) . toBe ( ':text("*")' ) ;
68
+ expect ( serialize ( parse ( ':text(*)' ) ) ) . toBe ( ':text(*)' ) ;
69
+ expect ( serialize ( parse ( ':text("foo", normalize-space)' ) ) ) . toBe ( ':text("foo", normalize-space)' ) ;
70
+ expect ( serialize ( parse ( ':index(3, div span)' ) ) ) . toBe ( ':index(3, div span)' ) ;
71
+ expect ( serialize ( parse ( ':is(foo, bar>baz.cls+:not(qux))' ) ) ) . toBe ( ':is(foo, bar > baz.cls + :not(qux))' ) ;
68
72
} ) ;
69
73
70
74
it ( 'should throw on malformed css' , async ( ) => {
71
75
function expectError ( selector : string ) {
72
76
let error = { message : '' } ;
73
77
try {
74
- parseCSS ( selector ) ;
78
+ parse ( selector ) ;
75
79
} catch ( e ) {
76
80
error = e ;
77
81
}
0 commit comments