1[
2 {
3 "name": "Type selector, matching html element",
4 "selector": "html",
5 "expect": [
6 "html"
7 ],
8 "exclude": [
9 "element",
10 "fragment",
11 "detached"
12 ],
13 "level": 1
14 },
15 {
16 "name": "Type selector, matching body element",
17 "selector": "body",
18 "expect": [
19 "body"
20 ],
21 "exclude": [
22 "element",
23 "fragment",
24 "detached"
25 ],
26 "level": 1
27 },
28 {
29 "name": "Universal selector, matching all children of element with specified ID",
30 "selector": "#universal>*",
31 "expect": [
32 "universal-p1",
33 "universal-hr1",
34 "universal-pre1",
35 "universal-p2",
36 "universal-address1"
37 ],
38 "level": 2
39 },
40 {
41 "name": "Universal selector, matching all grandchildren of element with specified ID",
42 "selector": "#universal>*>*",
43 "expect": [
44 "universal-code1",
45 "universal-span1",
46 "universal-a1",
47 "universal-code2"
48 ],
49 "level": 2
50 },
51 {
52 "name": "Universal selector, matching all children of empty element with specified ID",
53 "selector": "#empty>*",
54 "expect": [],
55 "level": 2
56 },
57 {
58 "name": "Universal selector, matching all descendants of element with specified ID",
59 "selector": "#universal *",
60 "expect": [
61 "universal-p1",
62 "universal-code1",
63 "universal-hr1",
64 "universal-pre1",
65 "universal-span1",
66 "universal-p2",
67 "universal-a1",
68 "universal-address1",
69 "universal-code2",
70 "universal-a2"
71 ],
72 "level": 2
73 },
74 {
75 "name": "Attribute presence selector, matching align attribute with value",
76 "selector": ".attr-presence-div1[align]",
77 "expect": [
78 "attr-presence-div1"
79 ],
80 "level": 2
81 },
82 {
83 "name": "Attribute presence selector, matching align attribute with empty value",
84 "selector": ".attr-presence-div2[align]",
85 "expect": [
86 "attr-presence-div2"
87 ],
88 "level": 2
89 },
90 {
91 "name": "Attribute presence selector, matching title attribute, case insensitivity",
92 "selector": "#attr-presence [TiTlE]",
93 "expect": [
94 "attr-presence-a1",
95 "attr-presence-span1"
96 ],
97 "exclude": [
98 "xhtml"
99 ],
100 "level": 2
101 },
102 {
103 "name": "Attribute presence selector, matching custom data-* attribute",
104 "selector": "[data-attr-presence]",
105 "expect": [
106 "attr-presence-pre1",
107 "attr-presence-blockquote1"
108 ],
109 "level": 2
110 },
111 {
112 "name": "Attribute presence selector, not matching attribute with similar name",
113 "selector": ".attr-presence-div3[align], .attr-presence-div4[align]",
114 "expect": [],
115 "level": 2
116 },
117 {
118 "name": "Attribute presence selector, matching attribute with non-ASCII characters",
119 "selector": "ul[data-中文]",
120 "expect": [
121 "attr-presence-ul1"
122 ],
123 "level": 2
124 },
125 {
126 "name": "Attribute presence selector, not matching default option without selected attribute",
127 "selector": "#attr-presence-select1 option[selected]",
128 "expect": [],
129 "level": 2
130 },
131 {
132 "name": "Attribute presence selector, matching option with selected attribute",
133 "selector": "#attr-presence-select2 option[selected]",
134 "expect": [
135 "attr-presence-select2-option4"
136 ],
137 "level": 2
138 },
139 {
140 "name": "Attribute presence selector, matching multiple options with selected attributes",
141 "selector": "#attr-presence-select3 option[selected]",
142 "expect": [
143 "attr-presence-select3-option2",
144 "attr-presence-select3-option3"
145 ],
146 "level": 2
147 },
148 {
149 "name": "Attribute value selector, matching align attribute with value",
150 "selector": "#attr-value [align=\"center\"]",
151 "expect": [
152 "attr-value-div1"
153 ],
154 "level": 2
155 },
156 {
157 "name": "Attribute value selector, matching align attribute with empty value",
158 "selector": "#attr-value [align=\"\"]",
159 "expect": [
160 "attr-value-div2"
161 ],
162 "level": 2
163 },
164 {
165 "name": "Attribute value selector, not matching align attribute with partial value",
166 "selector": "#attr-value [align=\"c\"]",
167 "expect": [],
168 "level": 2
169 },
170 {
171 "name": "Attribute value selector, not matching align attribute with incorrect value",
172 "selector": "#attr-value [align=\"centera\"]",
173 "expect": [],
174 "level": 2
175 },
176 {
177 "name": "Attribute value selector, matching custom data-* attribute with unicode escaped value",
178 "selector": "[data-attr-value=\"\\e9\"]",
179 "expect": [
180 "attr-value-div3"
181 ],
182 "level": 2
183 },
184 {
185 "name": "Attribute value selector, matching custom data-* attribute with escaped character",
186 "selector": "[data-attr-value_foo=\"\\e9\"]",
187 "expect": [
188 "attr-value-div4"
189 ],
190 "level": 2
191 },
192 {
193 "name": "Attribute value selector with single-quoted value, matching multiple inputs with type attributes",
194 "selector": "#attr-value input[type='hidden'],#attr-value input[type='radio']",
195 "expect": [
196 "attr-value-input3",
197 "attr-value-input4",
198 "attr-value-input6",
199 "attr-value-input8",
200 "attr-value-input9"
201 ],
202 "level": 2
203 },
204 {
205 "name": "Attribute value selector with double-quoted value, matching multiple inputs with type attributes",
206 "selector": "#attr-value input[type=\"hidden\"],#attr-value input[type='radio']",
207 "expect": [
208 "attr-value-input3",
209 "attr-value-input4",
210 "attr-value-input6",
211 "attr-value-input8",
212 "attr-value-input9"
213 ],
214 "level": 2
215 },
216 {
217 "name": "Attribute value selector with unquoted value, matching multiple inputs with type attributes",
218 "selector": "#attr-value input[type=hidden],#attr-value input[type=radio]",
219 "expect": [
220 "attr-value-input3",
221 "attr-value-input4",
222 "attr-value-input6",
223 "attr-value-input8",
224 "attr-value-input9"
225 ],
226 "level": 2
227 },
228 {
229 "name": "Attribute value selector, matching attribute with value using non-ASCII characters",
230 "selector": "[data-attr-value=中文]",
231 "expect": [
232 "attr-value-div5"
233 ],
234 "level": 2
235 },
236 {
237 "name": "Attribute whitespace-separated list selector, matching class attribute with value",
238 "selector": "#attr-whitespace [class~=\"div1\"]",
239 "expect": [
240 "attr-whitespace-div1"
241 ],
242 "level": 2
243 },
244 {
245 "name": "Attribute whitespace-separated list selector, not matching class attribute with empty value",
246 "selector": "#attr-whitespace [class~=\"\"]",
247 "expect": [],
248 "level": 2
249 },
250 {
251 "name": "Attribute whitespace-separated list selector, not matching class attribute with partial value",
252 "selector": "[data-attr-whitespace~=\"div\"]",
253 "expect": [],
254 "level": 2
255 },
256 {
257 "name": "Attribute whitespace-separated list selector, matching custom data-* attribute with unicode escaped value",
258 "selector": "[data-attr-whitespace~=\"\\0000e9\"]",
259 "expect": [
260 "attr-whitespace-div4"
261 ],
262 "level": 2
263 },
264 {
265 "name": "Attribute whitespace-separated list selector, matching custom data-* attribute with escaped character",
266 "selector": "[data-attr-whitespace_foo~=\"\\e9\"]",
267 "expect": [
268 "attr-whitespace-div5"
269 ],
270 "level": 2
271 },
272 {
273 "name": "Attribute whitespace-separated list selector with single-quoted value, matching multiple links with rel attributes",
274 "selector": "#attr-whitespace a[rel~='bookmark'], #attr-whitespace a[rel~='nofollow']",
275 "expect": [
276 "attr-whitespace-a1",
277 "attr-whitespace-a2",
278 "attr-whitespace-a3",
279 "attr-whitespace-a5",
280 "attr-whitespace-a7"
281 ],
282 "level": 2
283 },
284 {
285 "name": "Attribute whitespace-separated list selector with double-quoted value, matching multiple links with rel attributes",
286 "selector": "#attr-whitespace a[rel~=\"bookmark\"],#attr-whitespace a[rel~='nofollow']",
287 "expect": [
288 "attr-whitespace-a1",
289 "attr-whitespace-a2",
290 "attr-whitespace-a3",
291 "attr-whitespace-a5",
292 "attr-whitespace-a7"
293 ],
294 "level": 2
295 },
296 {
297 "name": "Attribute whitespace-separated list selector with unquoted value, matching multiple links with rel attributes",
298 "selector": "#attr-whitespace a[rel~=bookmark], #attr-whitespace a[rel~=nofollow]",
299 "expect": [
300 "attr-whitespace-a1",
301 "attr-whitespace-a2",
302 "attr-whitespace-a3",
303 "attr-whitespace-a5",
304 "attr-whitespace-a7"
305 ],
306 "level": 2
307 },
308 {
309 "name": "Attribute whitespace-separated list selector with double-quoted value, not matching value with space",
310 "selector": "#attr-whitespace a[rel~=\"book mark\"]",
311 "expect": [],
312 "level": 2
313 },
314 {
315 "name": "Attribute whitespace-separated list selector, matching title attribute with value using non-ASCII characters",
316 "selector": "#attr-whitespace [title~=中文]",
317 "expect": [
318 "attr-whitespace-p1"
319 ],
320 "level": 2
321 },
322 {
323 "name": "Attribute hyphen-separated list selector, not matching unspecified lang attribute",
324 "selector": "#attr-hyphen-div1[lang|=\"en\"]",
325 "expect": [],
326 "level": 2
327 },
328 {
329 "name": "Attribute hyphen-separated list selector, matching lang attribute with exact value",
330 "selector": "#attr-hyphen-div2[lang|=\"fr\"]",
331 "expect": [
332 "attr-hyphen-div2"
333 ],
334 "level": 2
335 },
336 {
337 "name": "Attribute hyphen-separated list selector, matching lang attribute with partial value",
338 "selector": "#attr-hyphen-div3[lang|=\"en\"]",
339 "expect": [
340 "attr-hyphen-div3"
341 ],
342 "level": 2
343 },
344 {
345 "name": "Attribute hyphen-separated list selector, not matching incorrect value",
346 "selector": "#attr-hyphen-div4[lang|=\"es-AR\"]",
347 "expect": [],
348 "level": 2
349 },
350 {
351 "name": "Attribute begins with selector, matching href attributes beginning with specified substring",
352 "selector": "#attr-begins a[href^=\"http://www\"]",
353 "expect": [
354 "attr-begins-a1",
355 "attr-begins-a3"
356 ],
357 "level": 3
358 },
359 {
360 "name": "Attribute begins with selector, matching lang attributes beginning with specified substring, ",
361 "selector": "#attr-begins [lang^=\"en-\"]",
362 "expect": [
363 "attr-begins-div2",
364 "attr-begins-div4"
365 ],
366 "level": 3
367 },
368 {
369 "name": "Attribute begins with selector, not matching class attribute not beginning with specified substring",
370 "selector": "#attr-begins [class^=apple]",
371 "expect": [],
372 "level": 3
373 },
374 {
375 "name": "Attribute begins with selector with single-quoted value, matching class attribute beginning with specified substring",
376 "selector": "#attr-begins [class^=' apple']",
377 "expect": [
378 "attr-begins-p1"
379 ],
380 "level": 3
381 },
382 {
383 "name": "Attribute begins with selector with double-quoted value, matching class attribute beginning with specified substring",
384 "selector": "#attr-begins [class^=\" apple\"]",
385 "expect": [
386 "attr-begins-p1"
387 ],
388 "level": 3
389 },
390 {
391 "name": "Attribute begins with selector with unquoted value, not matching class attribute not beginning with specified substring",
392 "selector": "#attr-begins [class^= apple]",
393 "expect": [],
394 "level": 3
395 },
396 {
397 "name": "Attribute ends with selector, matching href attributes ending with specified substring",
398 "selector": "#attr-ends a[href$=\".org\"]",
399 "expect": [
400 "attr-ends-a1",
401 "attr-ends-a3"
402 ],
403 "level": 3
404 },
405 {
406 "name": "Attribute ends with selector, matching lang attributes ending with specified substring, ",
407 "selector": "#attr-ends [lang$=\"-CH\"]",
408 "expect": [
409 "attr-ends-div2",
410 "attr-ends-div4"
411 ],
412 "level": 3
413 },
414 {
415 "name": "Attribute ends with selector, not matching class attribute not ending with specified substring",
416 "selector": "#attr-ends [class$=apple]",
417 "expect": [],
418 "level": 3
419 },
420 {
421 "name": "Attribute ends with selector with single-quoted value, matching class attribute ending with specified substring",
422 "selector": "#attr-ends [class$='apple ']",
423 "expect": [
424 "attr-ends-p1"
425 ],
426 "level": 3
427 },
428 {
429 "name": "Attribute ends with selector with double-quoted value, matching class attribute ending with specified substring",
430 "selector": "#attr-ends [class$=\"apple \"]",
431 "expect": [
432 "attr-ends-p1"
433 ],
434 "level": 3
435 },
436 {
437 "name": "Attribute ends with selector with unquoted value, not matching class attribute not ending with specified substring",
438 "selector": "#attr-ends [class$=apple ]",
439 "expect": [],
440 "level": 3
441 },
442 {
443 "name": "Attribute contains selector, matching href attributes beginning with specified substring",
444 "selector": "#attr-contains a[href*=\"http://www\"]",
445 "expect": [
446 "attr-contains-a1",
447 "attr-contains-a3"
448 ],
449 "level": 3
450 },
451 {
452 "name": "Attribute contains selector, matching href attributes ending with specified substring",
453 "selector": "#attr-contains a[href*=\".org\"]",
454 "expect": [
455 "attr-contains-a1",
456 "attr-contains-a2"
457 ],
458 "level": 3
459 },
460 {
461 "name": "Attribute contains selector, matching href attributes containing specified substring",
462 "selector": "#attr-contains a[href*=\".example.\"]",
463 "expect": [
464 "attr-contains-a1",
465 "attr-contains-a3"
466 ],
467 "level": 3
468 },
469 {
470 "name": "Attribute contains selector, matching lang attributes beginning with specified substring, ",
471 "selector": "#attr-contains [lang*=\"en-\"]",
472 "expect": [
473 "attr-contains-div2",
474 "attr-contains-div6"
475 ],
476 "level": 3
477 },
478 {
479 "name": "Attribute contains selector, matching lang attributes ending with specified substring, ",
480 "selector": "#attr-contains [lang*=\"-CH\"]",
481 "expect": [
482 "attr-contains-div3",
483 "attr-contains-div5"
484 ],
485 "level": 3
486 },
487 {
488 "name": "Attribute contains selector with single-quoted value, matching class attribute beginning with specified substring",
489 "selector": "#attr-contains [class*=' apple']",
490 "expect": [
491 "attr-contains-p1"
492 ],
493 "level": 3
494 },
495 {
496 "name": "Attribute contains selector with single-quoted value, matching class attribute ending with specified substring",
497 "selector": "#attr-contains [class*='orange ']",
498 "expect": [
499 "attr-contains-p1"
500 ],
501 "level": 3
502 },
503 {
504 "name": "Attribute contains selector with single-quoted value, matching class attribute containing specified substring",
505 "selector": "#attr-contains [class*='ple banana ora']",
506 "expect": [
507 "attr-contains-p1"
508 ],
509 "level": 3
510 },
511 {
512 "name": "Attribute contains selector with double-quoted value, matching class attribute beginning with specified substring",
513 "selector": "#attr-contains [class*=\" apple\"]",
514 "expect": [
515 "attr-contains-p1"
516 ],
517 "level": 3
518 },
519 {
520 "name": "Attribute contains selector with double-quoted value, matching class attribute ending with specified substring",
521 "selector": "#attr-contains [class*=\"orange \"]",
522 "expect": [
523 "attr-contains-p1"
524 ],
525 "level": 3
526 },
527 {
528 "name": "Attribute contains selector with double-quoted value, matching class attribute containing specified substring",
529 "selector": "#attr-contains [class*=\"ple banana ora\"]",
530 "expect": [
531 "attr-contains-p1"
532 ],
533 "level": 3
534 },
535 {
536 "name": "Attribute contains selector with unquoted value, matching class attribute beginning with specified substring",
537 "selector": "#attr-contains [class*= apple]",
538 "expect": [
539 "attr-contains-p1"
540 ],
541 "level": 3
542 },
543 {
544 "name": "Attribute contains selector with unquoted value, matching class attribute ending with specified substring",
545 "selector": "#attr-contains [class*=orange ]",
546 "expect": [
547 "attr-contains-p1"
548 ],
549 "level": 3
550 },
551 {
552 "name": "Attribute contains selector with unquoted value, matching class attribute containing specified substring",
553 "selector": "#attr-contains [class*= banana ]",
554 "expect": [
555 "attr-contains-p1"
556 ],
557 "level": 3
558 },
559 {
560 "name": ":root pseudo-class selector, matching document root element",
561 "selector": ":root",
562 "expect": [
563 "html"
564 ],
565 "exclude": [
566 "element",
567 "fragment",
568 "detached"
569 ],
570 "level": 3
571 },
572 {
573 "name": ":nth-child selector, matching the third child element",
574 "selector": "#pseudo-nth-table1 :nth-child(3)",
575 "expect": [
576 "pseudo-nth-td3",
577 "pseudo-nth-td9",
578 "pseudo-nth-tr3",
579 "pseudo-nth-td15"
580 ],
581 "level": 3
582 },
583 {
584 "name": ":nth-child selector, matching every third child element",
585 "selector": "#pseudo-nth li:nth-child(3n)",
586 "expect": [
587 "pseudo-nth-li3",
588 "pseudo-nth-li6",
589 "pseudo-nth-li9",
590 "pseudo-nth-li12"
591 ],
592 "level": 3
593 },
594 {
595 "name": ":nth-child selector, matching every second child element, starting from the fourth",
596 "selector": "#pseudo-nth li:nth-child(2n+4)",
597 "expect": [
598 "pseudo-nth-li4",
599 "pseudo-nth-li6",
600 "pseudo-nth-li8",
601 "pseudo-nth-li10",
602 "pseudo-nth-li12"
603 ],
604 "level": 3
605 },
606 {
607 "name": ":nth-child selector, matching every fourth child element, starting from the third",
608 "selector": "#pseudo-nth-p1 :nth-child(4n-1)",
609 "expect": [
610 "pseudo-nth-em2",
611 "pseudo-nth-span3"
612 ],
613 "level": 3
614 },
615 {
616 "name": ":nth-last-child selector, matching the third last child element",
617 "selector": "#pseudo-nth-table1 :nth-last-child(3)",
618 "expect": [
619 "pseudo-nth-tr1",
620 "pseudo-nth-td4",
621 "pseudo-nth-td10",
622 "pseudo-nth-td16"
623 ],
624 "level": 3
625 },
626 {
627 "name": ":nth-last-child selector, matching every third child element from the end",
628 "selector": "#pseudo-nth li:nth-last-child(3n)",
629 "expect": [
630 "pseudo-nth-li1",
631 "pseudo-nth-li4",
632 "pseudo-nth-li7",
633 "pseudo-nth-li10"
634 ],
635 "level": 3
636 },
637 {
638 "name": ":nth-last-child selector, matching every second child element from the end, starting from the fourth last",
639 "selector": "#pseudo-nth li:nth-last-child(2n+4)",
640 "expect": [
641 "pseudo-nth-li1",
642 "pseudo-nth-li3",
643 "pseudo-nth-li5",
644 "pseudo-nth-li7",
645 "pseudo-nth-li9"
646 ],
647 "level": 3
648 },
649 {
650 "name": ":nth-last-child selector, matching every fourth element from the end, starting from the third last",
651 "selector": "#pseudo-nth-p1 :nth-last-child(4n-1)",
652 "expect": [
653 "pseudo-nth-span2",
654 "pseudo-nth-span4"
655 ],
656 "level": 3
657 },
658 {
659 "name": ":nth-of-type selector, matching the third em element",
660 "selector": "#pseudo-nth-p1 em:nth-of-type(3)",
661 "expect": [
662 "pseudo-nth-em3"
663 ],
664 "level": 3
665 },
666 {
667 "name": ":nth-of-type selector, matching every second element of their type",
668 "selector": "#pseudo-nth-p1 :nth-of-type(2n)",
669 "expect": [
670 "pseudo-nth-em2",
671 "pseudo-nth-span2",
672 "pseudo-nth-span4",
673 "pseudo-nth-strong2",
674 "pseudo-nth-em4"
675 ],
676 "level": 3
677 },
678 {
679 "name": ":nth-of-type selector, matching every second elemetn of their type, starting from the first",
680 "selector": "#pseudo-nth-p1 span:nth-of-type(2n-1)",
681 "expect": [
682 "pseudo-nth-span1",
683 "pseudo-nth-span3"
684 ],
685 "level": 3
686 },
687 {
688 "name": ":nth-last-of-type selector, matching the thrid last em element",
689 "selector": "#pseudo-nth-p1 em:nth-last-of-type(3)",
690 "expect": [
691 "pseudo-nth-em2"
692 ],
693 "level": 3
694 },
695 {
696 "name": ":nth-last-of-type selector, matching every second last element of their type",
697 "selector": "#pseudo-nth-p1 :nth-last-of-type(2n)",
698 "expect": [
699 "pseudo-nth-span1",
700 "pseudo-nth-em1",
701 "pseudo-nth-strong1",
702 "pseudo-nth-em3",
703 "pseudo-nth-span3"
704 ],
705 "level": 3
706 },
707 {
708 "name": ":nth-last-of-type selector, matching every second last element of their type, starting from the last",
709 "selector": "#pseudo-nth-p1 span:nth-last-of-type(2n-1)",
710 "expect": [
711 "pseudo-nth-span2",
712 "pseudo-nth-span4"
713 ],
714 "level": 3
715 },
716 {
717 "name": ":first-of-type selector, matching the first em element",
718 "selector": "#pseudo-nth-p1 em:first-of-type",
719 "expect": [
720 "pseudo-nth-em1"
721 ],
722 "level": 3
723 },
724 {
725 "name": ":first-of-type selector, matching the first of every type of element",
726 "selector": "#pseudo-nth-p1 :first-of-type",
727 "expect": [
728 "pseudo-nth-span1",
729 "pseudo-nth-em1",
730 "pseudo-nth-strong1"
731 ],
732 "level": 3
733 },
734 {
735 "name": ":first-of-type selector, matching the first td element in each table row",
736 "selector": "#pseudo-nth-table1 tr :first-of-type",
737 "expect": [
738 "pseudo-nth-td1",
739 "pseudo-nth-td7",
740 "pseudo-nth-td13"
741 ],
742 "level": 3
743 },
744 {
745 "name": ":last-of-type selector, matching the last em elemnet",
746 "selector": "#pseudo-nth-p1 em:last-of-type",
747 "expect": [
748 "pseudo-nth-em4"
749 ],
750 "level": 3
751 },
752 {
753 "name": ":last-of-type selector, matching the last of every type of element",
754 "selector": "#pseudo-nth-p1 :last-of-type",
755 "expect": [
756 "pseudo-nth-span4",
757 "pseudo-nth-strong2",
758 "pseudo-nth-em4"
759 ],
760 "level": 3
761 },
762 {
763 "name": ":last-of-type selector, matching the last td element in each table row",
764 "selector": "#pseudo-nth-table1 tr :last-of-type",
765 "expect": [
766 "pseudo-nth-td6",
767 "pseudo-nth-td12",
768 "pseudo-nth-td18"
769 ],
770 "level": 3
771 },
772 {
773 "name": ":first-child pseudo-class selector, matching first child div element",
774 "selector": "#pseudo-first-child div:first-child",
775 "expect": [
776 "pseudo-first-child-div1"
777 ],
778 "level": 2
779 },
780 {
781 "name": ":first-child pseudo-class selector, doesn't match non-first-child elements",
782 "selector": ".pseudo-first-child-div2:first-child, .pseudo-first-child-div3:first-child",
783 "expect": [],
784 "level": 2
785 },
786 {
787 "name": ":first-child pseudo-class selector, matching first-child of multiple elements",
788 "selector": "#pseudo-first-child span:first-child",
789 "expect": [
790 "pseudo-first-child-span1",
791 "pseudo-first-child-span3",
792 "pseudo-first-child-span5"
793 ],
794 "level": 2
795 },
796 {
797 "name": ":last-child pseudo-class selector, matching last child div element",
798 "selector": "#pseudo-last-child div:last-child",
799 "expect": [
800 "pseudo-last-child-div3"
801 ],
802 "level": 3
803 },
804 {
805 "name": ":last-child pseudo-class selector, doesn't match non-last-child elements",
806 "selector": ".pseudo-last-child-div1:last-child, .pseudo-last-child-div2:first-child",
807 "expect": [],
808 "level": 3
809 },
810 {
811 "name": ":last-child pseudo-class selector, matching first-child of multiple elements",
812 "selector": "#pseudo-last-child span:last-child",
813 "expect": [
814 "pseudo-last-child-span2",
815 "pseudo-last-child-span4",
816 "pseudo-last-child-span6"
817 ],
818 "level": 3
819 },
820 {
821 "name": ":pseudo-only-child pseudo-class selector, matching all only-child elements",
822 "selector": "#pseudo-only :only-child",
823 "expect": [
824 "pseudo-only-span1"
825 ],
826 "level": 3
827 },
828 {
829 "name": ":pseudo-only-child pseudo-class selector, matching only-child em elements",
830 "selector": "#pseudo-only em:only-child",
831 "expect": [],
832 "level": 3
833 },
834 {
835 "name": ":pseudo-only-of-type pseudo-class selector, matching all elements with no siblings of the same type",
836 "selector": "#pseudo-only :only-of-type",
837 "expect": [
838 "pseudo-only-span1",
839 "pseudo-only-em1"
840 ],
841 "level": 3
842 },
843 {
844 "name": ":pseudo-only-of-type pseudo-class selector, matching em elements with no siblings of the same type",
845 "selector": "#pseudo-only em:only-of-type",
846 "expect": [
847 "pseudo-only-em1"
848 ],
849 "level": 3
850 },
851 {
852 "name": ":empty pseudo-class selector, matching empty p elements",
853 "selector": "#pseudo-empty p:empty",
854 "expect": [
855 "pseudo-empty-p1",
856 "pseudo-empty-p2",
857 "pseudo-empty-p3"
858 ],
859 "level": 3
860 },
861 {
862 "name": ":empty pseudo-class selector, matching all empty elements",
863 "selector": "#pseudo-empty :empty",
864 "expect": [
865 "pseudo-empty-p1",
866 "pseudo-empty-p2",
867 "pseudo-empty-p3",
868 "pseudo-empty-span1"
869 ],
870 "level": 3
871 },
872 {
873 "name": ":link and :visited pseudo-class selectors, matching a and area elements with href attributes",
874 "selector": "#pseudo-link :link, #pseudo-link :visited",
875 "expect": [
876 "pseudo-link-a1",
877 "pseudo-link-a2",
878 "pseudo-link-area1"
879 ],
880 "level": 1
881 },
882 {
883 "name": ":link and :visited pseudo-class selectors, matching link elements with href attributes",
884 "selector": "#head :link, #head :visited",
885 "expect": [
886 "pseudo-link-link1",
887 "pseudo-link-link2"
888 ],
889 "exclude": [
890 "element",
891 "fragment",
892 "detached"
893 ],
894 "level": 1
895 },
896 {
897 "name": ":target pseudo-class selector, matching the element referenced by the URL fragment identifier",
898 "selector": ":target",
899 "xfail": true,
900 "expect": [
901 "target"
902 ],
903 "exclude": [
904 "fragment",
905 "detached"
906 ],
907 "level": 3
908 },
909 {
910 "name": ":lang pseudo-class selector, matching inherited language",
911 "selector": "#pseudo-lang-div1:lang(en)",
912 "expect": [
913 "pseudo-lang-div1"
914 ],
915 "exclude": [
916 "detached",
917 "fragment"
918 ],
919 "level": 2
920 },
921 {
922 "name": ":lang pseudo-class selector, matching specified language with exact value",
923 "selector": "#pseudo-lang-div2:lang(fr)",
924 "expect": [
925 "pseudo-lang-div2"
926 ],
927 "level": 2
928 },
929 {
930 "name": ":lang pseudo-class selector, matching specified language with partial value",
931 "selector": "#pseudo-lang-div3:lang(en)",
932 "expect": [
933 "pseudo-lang-div3"
934 ],
935 "level": 2
936 },
937 {
938 "name": ":lang pseudo-class selector, not matching incorrect language",
939 "selector": "#pseudo-lang-div4:lang(es-AR)",
940 "expect": [],
941 "level": 2
942 },
943 {
944 "name": ":enabled pseudo-class selector, matching all enabled form controls",
945 "selector": "#pseudo-ui :enabled",
946 "expect": [
947 "pseudo-ui-input1",
948 "pseudo-ui-input2",
949 "pseudo-ui-input3",
950 "pseudo-ui-input4",
951 "pseudo-ui-input5",
952 "pseudo-ui-input6",
953 "pseudo-ui-input7",
954 "pseudo-ui-input8",
955 "pseudo-ui-input9",
956 "pseudo-ui-textarea1",
957 "pseudo-ui-button1"
958 ],
959 "level": 3
960 },
961 {
962 "name": ":enabled pseudo-class selector, matching all disabled form controls",
963 "selector": "#pseudo-ui :disabled",
964 "expect": [
965 "pseudo-ui-input10",
966 "pseudo-ui-input11",
967 "pseudo-ui-input12",
968 "pseudo-ui-input13",
969 "pseudo-ui-input14",
970 "pseudo-ui-input15",
971 "pseudo-ui-input16",
972 "pseudo-ui-input17",
973 "pseudo-ui-input18",
974 "pseudo-ui-textarea2",
975 "pseudo-ui-button2"
976 ],
977 "level": 3
978 },
979 {
980 "name": ":checked pseudo-class selector, matching checked radio buttons and checkboxes",
981 "selector": "#pseudo-ui :checked",
982 "expect": [
983 "pseudo-ui-input4",
984 "pseudo-ui-input6",
985 "pseudo-ui-input13",
986 "pseudo-ui-input15"
987 ],
988 "level": 3
989 },
990 {
991 "name": ":not pseudo-class selector, matching ",
992 "selector": "#not>:not(div)",
993 "expect": [
994 "not-p1",
995 "not-p2",
996 "not-p3"
997 ],
998 "level": 3
999 },
1000 {
1001 "name": ":not pseudo-class selector, matching ",
1002 "selector": "#not * :not(:first-child)",
1003 "expect": [
1004 "not-em1",
1005 "not-em2",
1006 "not-em3"
1007 ],
1008 "level": 3
1009 },
1010 {
1011 "name": ":not pseudo-class selector, matching nothing",
1012 "selector": ":not(*)",
1013 "expect": [],
1014 "level": 3
1015 },
1016 {
1017 "name": ":not pseudo-class selector, matching nothing",
1018 "selector": ":not(*|*)",
1019 "expect": [],
1020 "level": 3
1021 },
1022 {
1023 "name": ":first-line pseudo-element (one-colon syntax) selector, not matching any elements",
1024 "selector": "#pseudo-element:first-line",
1025 "expect": [],
1026 "level": 2
1027 },
1028 {
1029 "name": "::first-line pseudo-element (two-colon syntax) selector, not matching any elements",
1030 "selector": "#pseudo-element::first-line",
1031 "expect": [],
1032 "level": 3
1033 },
1034 {
1035 "name": ":first-letter pseudo-element (one-colon syntax) selector, not matching any elements",
1036 "selector": "#pseudo-element:first-letter",
1037 "expect": [],
1038 "level": 2
1039 },
1040 {
1041 "name": "::first-letter pseudo-element (two-colon syntax) selector, not matching any elements",
1042 "selector": "#pseudo-element::first-letter",
1043 "expect": [],
1044 "level": 3
1045 },
1046 {
1047 "name": ":before pseudo-element (one-colon syntax) selector, not matching any elements",
1048 "selector": "#pseudo-element:before",
1049 "expect": [],
1050 "level": 2
1051 },
1052 {
1053 "name": "::before pseudo-element (two-colon syntax) selector, not matching any elements",
1054 "selector": "#pseudo-element::before",
1055 "expect": [],
1056 "level": 3
1057 },
1058 {
1059 "name": ":after pseudo-element (one-colon syntax) selector, not matching any elements",
1060 "selector": "#pseudo-element:after",
1061 "expect": [],
1062 "level": 2
1063 },
1064 {
1065 "name": "::after pseudo-element (two-colon syntax) selector, not matching any elements",
1066 "selector": "#pseudo-element::after",
1067 "expect": [],
1068 "level": 3
1069 },
1070 {
1071 "name": "Class selector, matching element with specified class",
1072 "selector": ".class-p",
1073 "expect": [
1074 "class-p1",
1075 "class-p2",
1076 "class-p3"
1077 ],
1078 "level": 1
1079 },
1080 {
1081 "name": "Class selector, chained, matching only elements with all specified classes",
1082 "selector": "#class .apple.orange.banana",
1083 "expect": [
1084 "class-div1",
1085 "class-div2",
1086 "class-p4",
1087 "class-div3",
1088 "class-p6",
1089 "class-div4"
1090 ],
1091 "level": 1
1092 },
1093 {
1094 "name": "Class Selector, chained, with type selector",
1095 "selector": "div.apple.banana.orange",
1096 "expect": [
1097 "class-div1",
1098 "class-div2",
1099 "class-div3",
1100 "class-div4"
1101 ],
1102 "level": 1
1103 },
1104 {
1105 "name": "Class selector, matching element with class value using non-ASCII characters",
1106 "selector": ".台北Táiběi",
1107 "expect": [
1108 "class-span1"
1109 ],
1110 "level": 1
1111 },
1112 {
1113 "name": "Class selector, matching multiple elements with class value using non-ASCII characters",
1114 "selector": ".台北",
1115 "expect": [
1116 "class-span1",
1117 "class-span2"
1118 ],
1119 "level": 1
1120 },
1121 {
1122 "name": "Class selector, chained, matching element with multiple class values using non-ASCII characters",
1123 "selector": ".台北Táiběi.台北",
1124 "expect": [
1125 "class-span1"
1126 ],
1127 "level": 1
1128 },
1129 {
1130 "name": "Class selector, matching element with class with escaped character",
1131 "selector": ".foo\\:bar",
1132 "expect": [
1133 "class-span3"
1134 ],
1135 "level": 1
1136 },
1137 {
1138 "name": "Class selector, matching element with class with escaped character",
1139 "selector": ".test\\.foo\\[5\\]bar",
1140 "expect": [
1141 "class-span4"
1142 ],
1143 "level": 1
1144 },
1145 {
1146 "name": "ID selector, matching element with specified id",
1147 "selector": "#id #id-div1",
1148 "expect": [
1149 "id-div1"
1150 ],
1151 "level": 1
1152 },
1153 {
1154 "name": "ID selector, chained, matching element with specified id",
1155 "selector": "#id-div1, #id-div1",
1156 "expect": [
1157 "id-div1"
1158 ],
1159 "level": 1
1160 },
1161 {
1162 "name": "ID selector, chained, matching element with specified id",
1163 "selector": "#id-div1, #id-div2",
1164 "expect": [
1165 "id-div1",
1166 "id-div2"
1167 ],
1168 "level": 1
1169 },
1170 {
1171 "name": "ID Selector, chained, with type selector",
1172 "selector": "div#id-div1, div#id-div2",
1173 "expect": [
1174 "id-div1",
1175 "id-div2"
1176 ],
1177 "level": 1
1178 },
1179 {
1180 "name": "ID selector, not matching non-existent descendant",
1181 "selector": "#id #none",
1182 "expect": [],
1183 "level": 1
1184 },
1185 {
1186 "name": "ID selector, not matching non-existent ancestor",
1187 "selector": "#none #id-div1",
1188 "expect": [],
1189 "level": 1
1190 },
1191 {
1192 "name": "ID selector, matching multiple elements with duplicate id",
1193 "selector": "#id-li-duplicate",
1194 "expect": [
1195 "id-li-duplicate",
1196 "id-li-duplicate",
1197 "id-li-duplicate",
1198 "id-li-duplicate"
1199 ],
1200 "level": 1
1201 },
1202 {
1203 "name": "ID selector, matching id value using non-ASCII characters",
1204 "selector": "#台北Táiběi",
1205 "expect": [
1206 "台北Táiběi"
1207 ],
1208 "level": 1
1209 },
1210 {
1211 "name": "ID selector, matching id value using non-ASCII characters",
1212 "selector": "#台北",
1213 "expect": [
1214 "台北"
1215 ],
1216 "level": 1
1217 },
1218 {
1219 "name": "ID selector, matching id values using non-ASCII characters",
1220 "selector": "#台北Táiběi, #台北",
1221 "expect": [
1222 "台北Táiběi",
1223 "台北"
1224 ],
1225 "level": 1
1226 },
1227 {
1228 "name": "ID selector, matching element with id with escaped character",
1229 "selector": "#\\#foo\\:bar",
1230 "expect": [
1231 "#foo:bar"
1232 ],
1233 "level": 1
1234 },
1235 {
1236 "name": "ID selector, matching element with id with escaped character",
1237 "selector": "#test\\.foo\\[5\\]bar",
1238 "expect": [
1239 "test.foo[5]bar"
1240 ],
1241 "level": 1
1242 },
1243 {
1244 "name": "Namespace selector, matching element with any namespace",
1245 "selector": "#any-namespace *|div",
1246 "expect": [
1247 "any-namespace-div1",
1248 "any-namespace-div2",
1249 "any-namespace-div3",
1250 "any-namespace-div4"
1251 ],
1252 "level": 3,
1253 "xfail": true
1254 },
1255 {
1256 "name": "Namespace selector, matching div elements in no namespace only",
1257 "selector": "#no-namespace |div",
1258 "expect": [
1259 "no-namespace-div3"
1260 ],
1261 "level": 3,
1262 "xfail": true
1263 },
1264 {
1265 "name": "Namespace selector, matching any elements in no namespace only",
1266 "selector": "#no-namespace |*",
1267 "expect": [
1268 "no-namespace-div3"
1269 ],
1270 "level": 3,
1271 "xfail": true
1272 },
1273 {
1274 "name": "Descendant combinator, matching element that is a descendant of an element with id",
1275 "selector": "#descendant div",
1276 "expect": [
1277 "descendant-div1",
1278 "descendant-div2",
1279 "descendant-div3",
1280 "descendant-div4"
1281 ],
1282 "level": 1
1283 },
1284 {
1285 "name": "Descendant combinator, matching element with id that is a descendant of an element",
1286 "selector": "body #descendant-div1",
1287 "expect": [
1288 "descendant-div1"
1289 ],
1290 "exclude": [
1291 "detached",
1292 "fragment"
1293 ],
1294 "level": 1
1295 },
1296 {
1297 "name": "Descendant combinator, matching element with id that is a descendant of an element",
1298 "selector": "div #descendant-div1",
1299 "expect": [
1300 "descendant-div1"
1301 ],
1302 "level": 1
1303 },
1304 {
1305 "name": "Descendant combinator, matching element with id that is a descendant of an element with id",
1306 "selector": "#descendant #descendant-div2",
1307 "expect": [
1308 "descendant-div2"
1309 ],
1310 "level": 1
1311 },
1312 {
1313 "name": "Descendant combinator, matching element with class that is a descendant of an element with id",
1314 "selector": "#descendant .descendant-div2",
1315 "expect": [
1316 "descendant-div2"
1317 ],
1318 "level": 1
1319 },
1320 {
1321 "name": "Descendant combinator, matching element with class that is a descendant of an element with class",
1322 "selector": ".descendant-div1 .descendant-div3",
1323 "expect": [
1324 "descendant-div3"
1325 ],
1326 "level": 1
1327 },
1328 {
1329 "name": "Descendant combinator, not matching element with id that is not a descendant of an element with id",
1330 "selector": "#descendant-div1 #descendant-div4",
1331 "expect": [],
1332 "level": 1
1333 },
1334 {
1335 "name": "Descendant combinator, whitespace characters",
1336 "selector": "#descendant\t\r\n#descendant-div2",
1337 "expect": [
1338 "descendant-div2"
1339 ],
1340 "level": 1
1341 },
1342 {
1343 "name": "Child combinator, matching element that is a child of an element with id",
1344 "selector": "#child>div",
1345 "expect": [
1346 "child-div1",
1347 "child-div4"
1348 ],
1349 "level": 2
1350 },
1351 {
1352 "name": "Child combinator, matching element with id that is a child of an element",
1353 "selector": "div>#child-div1",
1354 "expect": [
1355 "child-div1"
1356 ],
1357 "level": 2
1358 },
1359 {
1360 "name": "Child combinator, matching element with id that is a child of an element with id",
1361 "selector": "#child>#child-div1",
1362 "expect": [
1363 "child-div1"
1364 ],
1365 "level": 2
1366 },
1367 {
1368 "name": "Child combinator, matching element with id that is a child of an element with class",
1369 "selector": "#child-div1>.child-div2",
1370 "expect": [
1371 "child-div2"
1372 ],
1373 "level": 2
1374 },
1375 {
1376 "name": "Child combinator, matching element with class that is a child of an element with class",
1377 "selector": ".child-div1>.child-div2",
1378 "expect": [
1379 "child-div2"
1380 ],
1381 "level": 2
1382 },
1383 {
1384 "name": "Child combinator, not matching element with id that is not a child of an element with id",
1385 "selector": "#child>#child-div3",
1386 "expect": [],
1387 "level": 2
1388 },
1389 {
1390 "name": "Child combinator, not matching element with id that is not a child of an element with class",
1391 "selector": "#child-div1>.child-div3",
1392 "expect": [],
1393 "level": 2
1394 },
1395 {
1396 "name": "Child combinator, not matching element with class that is not a child of an element with class",
1397 "selector": ".child-div1>.child-div3",
1398 "expect": [],
1399 "level": 2
1400 },
1401 {
1402 "name": "Child combinator, surrounded by whitespace",
1403 "selector": "#child-div1\t\r\n>\t\r\n#child-div2",
1404 "expect": [
1405 "child-div2"
1406 ],
1407 "level": 2
1408 },
1409 {
1410 "name": "Child combinator, whitespace after",
1411 "selector": "#child-div1>\t\r\n#child-div2",
1412 "expect": [
1413 "child-div2"
1414 ],
1415 "level": 2
1416 },
1417 {
1418 "name": "Child combinator, whitespace before",
1419 "selector": "#child-div1\t\r\n>#child-div2",
1420 "expect": [
1421 "child-div2"
1422 ],
1423 "level": 2
1424 },
1425 {
1426 "name": "Child combinator, no whitespace",
1427 "selector": "#child-div1>#child-div2",
1428 "expect": [
1429 "child-div2"
1430 ],
1431 "level": 2
1432 },
1433 {
1434 "name": "Adjacent sibling combinator, matching element that is an adjacent sibling of an element with id",
1435 "selector": "#adjacent-div2+div",
1436 "expect": [
1437 "adjacent-div4"
1438 ],
1439 "level": 2
1440 },
1441 {
1442 "name": "Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element",
1443 "selector": "div+#adjacent-div4",
1444 "expect": [
1445 "adjacent-div4"
1446 ],
1447 "level": 2
1448 },
1449 {
1450 "name": "Adjacent sibling combinator, matching element with id that is an adjacent sibling of an element with id",
1451 "selector": "#adjacent-div2+#adjacent-div4",
1452 "expect": [
1453 "adjacent-div4"
1454 ],
1455 "level": 2
1456 },
1457 {
1458 "name": "Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with id",
1459 "selector": "#adjacent-div2+.adjacent-div4",
1460 "expect": [
1461 "adjacent-div4"
1462 ],
1463 "level": 2
1464 },
1465 {
1466 "name": "Adjacent sibling combinator, matching element with class that is an adjacent sibling of an element with class",
1467 "selector": ".adjacent-div2+.adjacent-div4",
1468 "expect": [
1469 "adjacent-div4"
1470 ],
1471 "level": 2
1472 },
1473 {
1474 "name": "Adjacent sibling combinator, matching p element that is an adjacent sibling of a div element",
1475 "selector": "#adjacent div+p",
1476 "expect": [
1477 "adjacent-p2"
1478 ],
1479 "level": 2
1480 },
1481 {
1482 "name": "Adjacent sibling combinator, not matching element with id that is not an adjacent sibling of an element with id",
1483 "selector": "#adjacent-div2+#adjacent-p2, #adjacent-div2+#adjacent-div1",
1484 "expect": [],
1485 "level": 2
1486 },
1487 {
1488 "name": "Adjacent sibling combinator, surrounded by whitespace",
1489 "selector": "#adjacent-p2\t\r\n+\t\r\n#adjacent-p3",
1490 "expect": [
1491 "adjacent-p3"
1492 ],
1493 "level": 2
1494 },
1495 {
1496 "name": "Adjacent sibling combinator, whitespace after",
1497 "selector": "#adjacent-p2+\t\r\n#adjacent-p3",
1498 "expect": [
1499 "adjacent-p3"
1500 ],
1501 "level": 2
1502 },
1503 {
1504 "name": "Adjacent sibling combinator, whitespace before",
1505 "selector": "#adjacent-p2\t\r\n+#adjacent-p3",
1506 "expect": [
1507 "adjacent-p3"
1508 ],
1509 "level": 2
1510 },
1511 {
1512 "name": "Adjacent sibling combinator, no whitespace",
1513 "selector": "#adjacent-p2+#adjacent-p3",
1514 "expect": [
1515 "adjacent-p3"
1516 ],
1517 "level": 2
1518 },
1519 {
1520 "name": "General sibling combinator, matching element that is a sibling of an element with id",
1521 "selector": "#sibling-div2~div",
1522 "expect": [
1523 "sibling-div4",
1524 "sibling-div6"
1525 ],
1526 "level": 3
1527 },
1528 {
1529 "name": "General sibling combinator, matching element with id that is a sibling of an element",
1530 "selector": "div~#sibling-div4",
1531 "expect": [
1532 "sibling-div4"
1533 ],
1534 "level": 3
1535 },
1536 {
1537 "name": "General sibling combinator, matching element with id that is a sibling of an element with id",
1538 "selector": "#sibling-div2~#sibling-div4",
1539 "expect": [
1540 "sibling-div4"
1541 ],
1542 "level": 3
1543 },
1544 {
1545 "name": "General sibling combinator, matching element with class that is a sibling of an element with id",
1546 "selector": "#sibling-div2~.sibling-div",
1547 "expect": [
1548 "sibling-div4",
1549 "sibling-div6"
1550 ],
1551 "level": 3
1552 },
1553 {
1554 "name": "General sibling combinator, matching p element that is a sibling of a div element",
1555 "selector": "#sibling div~p",
1556 "expect": [
1557 "sibling-p2",
1558 "sibling-p3"
1559 ],
1560 "level": 3
1561 },
1562 {
1563 "name": "General sibling combinator, not matching element with id that is not a sibling after a p element",
1564 "selector": "#sibling>p~div",
1565 "expect": [],
1566 "level": 3
1567 },
1568 {
1569 "name": "General sibling combinator, not matching element with id that is not a sibling after an element with id",
1570 "selector": "#sibling-div2~#sibling-div3, #sibling-div2~#sibling-div1",
1571 "expect": [],
1572 "level": 3
1573 },
1574 {
1575 "name": "General sibling combinator, surrounded by whitespace",
1576 "selector": "#sibling-p2\t\r\n~\t\r\n#sibling-p3",
1577 "expect": [
1578 "sibling-p3"
1579 ],
1580 "level": 3
1581 },
1582 {
1583 "name": "General sibling combinator, whitespace after",
1584 "selector": "#sibling-p2~\t\r\n#sibling-p3",
1585 "expect": [
1586 "sibling-p3"
1587 ],
1588 "level": 3
1589 },
1590 {
1591 "name": "General sibling combinator, whitespace before",
1592 "selector": "#sibling-p2\t\r\n~#sibling-p3",
1593 "expect": [
1594 "sibling-p3"
1595 ],
1596 "level": 3
1597 },
1598 {
1599 "name": "General sibling combinator, no whitespace",
1600 "selector": "#sibling-p2~#sibling-p3",
1601 "expect": [
1602 "sibling-p3"
1603 ],
1604 "level": 3
1605 },
1606 {
1607 "name": "Syntax, group of selectors separator, surrounded by whitespace",
1608 "selector": "#group em\t\r \n,\t\r \n#group strong",
1609 "expect": [
1610 "group-em1",
1611 "group-strong1"
1612 ],
1613 "level": 1
1614 },
1615 {
1616 "name": "Syntax, group of selectors separator, whitespace after",
1617 "selector": "#group em,\t\r\n#group strong",
1618 "expect": [
1619 "group-em1",
1620 "group-strong1"
1621 ],
1622 "level": 1
1623 },
1624 {
1625 "name": "Syntax, group of selectors separator, whitespace before",
1626 "selector": "#group em\t\r\n,#group strong",
1627 "expect": [
1628 "group-em1",
1629 "group-strong1"
1630 ],
1631 "level": 1
1632 },
1633 {
1634 "name": "Syntax, group of selectors separator, no whitespace",
1635 "selector": "#group em,#group strong",
1636 "expect": [
1637 "group-em1",
1638 "group-strong1"
1639 ],
1640 "level": 1
1641 }
1642]
View as plain text