@@ -121,22 +121,56 @@ suite('CSS - MarkedStringPrinter selectors', () => {
121
121
122
122
test ( 'descendant selector' , function ( ) {
123
123
let p = new Parser ( ) ;
124
- parseSelectorToMarkedString ( p , 'e1 e2 { }' , 'e1' , [ { language : 'html' , value : '<e1>\n …\n <e2>' } ] ) ;
125
- parseSelectorToMarkedString ( p , 'e1 .div { }' , 'e1' , [ { language : 'html' , value : '<e1>\n …\n <element class="div">' } ] ) ;
124
+ parseSelectorToMarkedString ( p , 'e1 e2 { }' , 'e1' , [ { language : 'html' , value : '<e1>\n …\n <e2>' } , { language : 'text' , value : 'Specificity: 0,0,2' } ] ) ;
125
+ parseSelectorToMarkedString ( p , 'e1 .div { }' , 'e1' , [ { language : 'html' , value : '<e1>\n …\n <element class="div">' } , { language : 'text' , value : 'Specificity: 0,1,1' } ] ) ;
126
126
} ) ;
127
127
test ( 'child selector' , function ( ) {
128
128
let p = new Parser ( ) ;
129
- parseSelectorToMarkedString ( p , 'e1 > e2 { }' , 'e2' , [ { language : 'html' , value : '<e1>\n <e2>' } ] ) ;
129
+ parseSelectorToMarkedString ( p , 'e1 > e2 { }' , 'e2' , [ { language : 'html' , value : '<e1>\n <e2>' } , { language : 'text' , value : 'Specificity: 0,0,2' } ] ) ;
130
130
} ) ;
131
131
test ( 'group selector' , function ( ) {
132
132
let p = new Parser ( ) ;
133
- parseSelectorToMarkedString ( p , 'e1, e2 { }' , 'e1' , [ { language : 'html' , value : '<e1>' } ] ) ;
134
- parseSelectorToMarkedString ( p , 'e1, e2 { }' , 'e2' , [ { language : 'html' , value : '<e2>' } ] ) ;
133
+ parseSelectorToMarkedString ( p , 'e1, e2 { }' , 'e1' , [ { language : 'html' , value : '<e1>' } , { language : 'text' , value : 'Specificity: 0,0,1' } ] ) ;
134
+ parseSelectorToMarkedString ( p , 'e1, e2 { }' , 'e2' , [ { language : 'html' , value : '<e2>' } , { language : 'text' , value : 'Specificity: 0,0,1' } ] ) ;
135
135
} ) ;
136
136
test ( 'sibling selector' , function ( ) {
137
137
let p = new Parser ( ) ;
138
- parseSelectorToMarkedString ( p , 'e1 + e2 { }' , 'e2' , [ { language : 'html' , value : '<e1>\n<e2>' } ] ) ;
139
- parseSelectorToMarkedString ( p , 'e1 ~ e2 { }' , 'e2' , [ { language : 'html' , value : '<e1>\n<e2>\n⋮\n<e2>' } ] ) ;
138
+ parseSelectorToMarkedString ( p , 'e1 + e2 { }' , 'e2' , [ { language : 'html' , value : '<e1>\n<e2>' } , { language : 'text' , value : 'Specificity: 0,0,2' } ] ) ;
139
+ parseSelectorToMarkedString ( p , 'e1 ~ e2 { }' , 'e2' , [ { language : 'html' , value : '<e1>\n<e2>\n⋮\n<e2>' } , { language : 'text' , value : 'Specificity: 0,0,2' } ] ) ;
140
+ } ) ;
141
+ } ) ;
142
+
143
+ suite ( 'CSS - MarkedStringPrinter selectors specificities' , ( ) => {
144
+ let p = new Parser ( ) ;
145
+ test ( 'attribute selector' , function ( ) {
146
+ parseSelectorToMarkedString ( p , 'h1 + *[rel=up]' , 'h1' , [ { language : 'html' , value : '<h1>\n<element rel="up">' } , { language : 'text' , value : 'Specificity: 0,1,1' } ] ) ;
147
+ } ) ;
148
+
149
+ test ( 'class selector' , function ( ) {
150
+ parseSelectorToMarkedString ( p , 'ul ol li.red' , 'ul' , [ { language : 'html' , value : '<ul>\n …\n <ol>\n …\n <li class="red">' } , { language : 'text' , value : 'Specificity: 0,1,3' } ] ) ;
151
+ parseSelectorToMarkedString ( p , 'li.red.level' , 'li' , [ { language : 'html' , value : '<li class="red level">' } , { language : 'text' , value : 'Specificity: 0,2,1' } ] ) ;
152
+ } ) ;
153
+
154
+ test ( 'pseudo class selector' , function ( ) {
155
+ parseSelectorToMarkedString ( p , 'p:focus' , 'p' , [ { language : 'html' , value : '<p :focus>' } , { language : 'text' , value : 'Specificity: 0,1,1' } ] ) ;
156
+ } ) ;
157
+
158
+ test ( 'element selector' , function ( ) {
159
+ parseSelectorToMarkedString ( p , 'li' , 'li' , [ { language : 'html' , value : '<li>' } , { language : 'text' , value : 'Specificity: 0,0,1' } ] ) ;
160
+ parseSelectorToMarkedString ( p , 'ul li' , 'ul' , [ { language : 'html' , value : '<ul>\n …\n <li>' } , { language : 'text' , value : 'Specificity: 0,0,2' } ] ) ;
161
+ parseSelectorToMarkedString ( p , 'ul ol+li' , 'ul' , [ { language : 'html' , value : '<ul>\n …\n <ol>\n <li>' } , { language : 'text' , value : 'Specificity: 0,0,3' } ] ) ;
140
162
} ) ;
141
163
164
+ test ( 'pseudo element selector' , function ( ) {
165
+ parseSelectorToMarkedString ( p , 'p::after' , 'p' , [ { language : 'html' , value : '<p ::after>' } , { language : 'text' , value : 'Specificity: 0,0,2' } ] ) ;
166
+ } ) ;
167
+
168
+ test ( 'identifier selector' , function ( ) {
169
+ parseSelectorToMarkedString ( p , '#x34y' , '#x34y' , [ { language : 'html' , value : '<element id="x34y">' } , { language : 'text' , value : 'Specificity: 1,0,0' } ] ) ;
170
+ } ) ;
171
+
172
+ test ( 'ignore universal and not selector' , function ( ) {
173
+ parseSelectorToMarkedString ( p , '*' , '*' , [ { language : 'html' , value : '<element>' } , { language : 'text' , value : 'Specificity: 0,0,0' } ] ) ;
174
+ parseSelectorToMarkedString ( p , '#s12:not(foo)' , '#s12' , [ { language : 'html' , value : '<element id="s12" :not>' } , { language : 'text' , value : 'Specificity: 1,0,1' } ] ) ;
175
+ } ) ;
142
176
} ) ;
0 commit comments