@@ -112,6 +112,66 @@ test('non standard pseudo (@custom-selector) (1)', "a, :--foobar", (t, tree) =>
112112 t . deepEqual ( tree . nodes [ 1 ] . nodes [ 0 ] . type , 'pseudo' ) ;
113113} ) ;
114114
115+ test ( 'current pseudo class' , ':current(p, li, dt, dd)' , ( t , tree ) => {
116+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . type , 'pseudo' ) ;
117+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . value , ':current' ) ;
118+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . type , 'tag' ) ;
119+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . value , 'p' ) ;
120+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . type , 'tag' ) ;
121+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . value , 'li' ) ;
122+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 2 ] . nodes [ 0 ] . type , 'tag' ) ;
123+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 2 ] . nodes [ 0 ] . value , 'dt' ) ;
124+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 3 ] . nodes [ 0 ] . type , 'tag' ) ;
125+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 3 ] . nodes [ 0 ] . value , 'dd' ) ;
126+ } ) ;
127+
128+ test ( 'is pseudo class' , ':is(p, li, dt, dd)' , ( t , tree ) => {
129+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . type , 'pseudo' ) ;
130+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . value , ':is' ) ;
131+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . type , 'tag' ) ;
132+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . value , 'p' ) ;
133+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . type , 'tag' ) ;
134+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . value , 'li' ) ;
135+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 2 ] . nodes [ 0 ] . type , 'tag' ) ;
136+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 2 ] . nodes [ 0 ] . value , 'dt' ) ;
137+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 3 ] . nodes [ 0 ] . type , 'tag' ) ;
138+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . nodes [ 3 ] . nodes [ 0 ] . value , 'dd' ) ;
139+ } ) ;
140+
141+ test ( 'is pseudo class with namespace' , '*|*:is(:hover, :focus) ' , ( t , tree ) => {
142+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . type , 'universal' ) ;
143+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . namespace , '*' ) ;
144+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . value , '*' ) ;
145+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . type , 'pseudo' ) ;
146+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . value , ':is' ) ;
147+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . type , 'pseudo' ) ;
148+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . value , ':hover' ) ;
149+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 1 ] . nodes [ 0 ] . type , 'pseudo' ) ;
150+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 1 ] . nodes [ 0 ] . value , ':focus' ) ;
151+ } ) ;
152+
153+ test ( 'has pseudo class' , 'a:has(> img)' , ( t , tree ) => {
154+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . type , 'tag' ) ;
155+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . value , 'a' ) ;
156+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . type , 'pseudo' ) ;
157+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . value , ':has' ) ;
158+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . type , 'combinator' ) ;
159+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . value , '>' ) ;
160+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 1 ] . type , 'tag' ) ;
161+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 1 ] . value , 'img' ) ;
162+ } ) ;
163+
164+ test ( 'where pseudo class' , 'a:where(:not(:hover))' , ( t , tree ) => {
165+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . type , 'tag' ) ;
166+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . value , 'a' ) ;
167+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . type , 'pseudo' ) ;
168+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . value , ':where' ) ;
169+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . type , 'pseudo' ) ;
170+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . value , ':not' ) ;
171+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . type , 'pseudo' ) ;
172+ t . deepEqual ( tree . nodes [ 0 ] . nodes [ 1 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . nodes [ 0 ] . value , ':hover' ) ;
173+ } ) ;
174+
115175test ( 'nested pseudo classes' , "section:not( :has(h1, h2 ) )" , ( t , tree ) => {
116176 t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . type , 'tag' ) ;
117177 t . deepEqual ( tree . nodes [ 0 ] . nodes [ 0 ] . value , 'section' ) ;
0 commit comments