19e815959Sopenharmony_ciimport { Selector, SelectorType, AttributeAction, IgnoreCaseMode } from "..";
29e815959Sopenharmony_ci
39e815959Sopenharmony_ciexport const tests: [
49e815959Sopenharmony_ci    selector: string,
59e815959Sopenharmony_ci    expected: Selector[][],
69e815959Sopenharmony_ci    message: string
79e815959Sopenharmony_ci][] = [
89e815959Sopenharmony_ci    // Tag names
99e815959Sopenharmony_ci    [
109e815959Sopenharmony_ci        "div",
119e815959Sopenharmony_ci        [
129e815959Sopenharmony_ci            [
139e815959Sopenharmony_ci                {
149e815959Sopenharmony_ci                    type: SelectorType.Tag,
159e815959Sopenharmony_ci                    namespace: null,
169e815959Sopenharmony_ci                    name: "div",
179e815959Sopenharmony_ci                },
189e815959Sopenharmony_ci            ],
199e815959Sopenharmony_ci        ],
209e815959Sopenharmony_ci        "simple tag",
219e815959Sopenharmony_ci    ],
229e815959Sopenharmony_ci    [
239e815959Sopenharmony_ci        "*",
249e815959Sopenharmony_ci        [
259e815959Sopenharmony_ci            [
269e815959Sopenharmony_ci                {
279e815959Sopenharmony_ci                    type: SelectorType.Universal,
289e815959Sopenharmony_ci                    namespace: null,
299e815959Sopenharmony_ci                },
309e815959Sopenharmony_ci            ],
319e815959Sopenharmony_ci        ],
329e815959Sopenharmony_ci        "universal",
339e815959Sopenharmony_ci    ],
349e815959Sopenharmony_ci
359e815959Sopenharmony_ci    // Traversal
369e815959Sopenharmony_ci    [
379e815959Sopenharmony_ci        "div div",
389e815959Sopenharmony_ci        [
399e815959Sopenharmony_ci            [
409e815959Sopenharmony_ci                {
419e815959Sopenharmony_ci                    type: SelectorType.Tag,
429e815959Sopenharmony_ci                    namespace: null,
439e815959Sopenharmony_ci                    name: "div",
449e815959Sopenharmony_ci                },
459e815959Sopenharmony_ci                {
469e815959Sopenharmony_ci                    type: SelectorType.Descendant,
479e815959Sopenharmony_ci                },
489e815959Sopenharmony_ci                {
499e815959Sopenharmony_ci                    type: SelectorType.Tag,
509e815959Sopenharmony_ci                    namespace: null,
519e815959Sopenharmony_ci                    name: "div",
529e815959Sopenharmony_ci                },
539e815959Sopenharmony_ci            ],
549e815959Sopenharmony_ci        ],
559e815959Sopenharmony_ci        "descendant",
569e815959Sopenharmony_ci    ],
579e815959Sopenharmony_ci    [
589e815959Sopenharmony_ci        "div\t \n \tdiv",
599e815959Sopenharmony_ci        [
609e815959Sopenharmony_ci            [
619e815959Sopenharmony_ci                {
629e815959Sopenharmony_ci                    type: SelectorType.Tag,
639e815959Sopenharmony_ci                    namespace: null,
649e815959Sopenharmony_ci                    name: "div",
659e815959Sopenharmony_ci                },
669e815959Sopenharmony_ci                {
679e815959Sopenharmony_ci                    type: SelectorType.Descendant,
689e815959Sopenharmony_ci                },
699e815959Sopenharmony_ci                {
709e815959Sopenharmony_ci                    type: SelectorType.Tag,
719e815959Sopenharmony_ci                    namespace: null,
729e815959Sopenharmony_ci                    name: "div",
739e815959Sopenharmony_ci                },
749e815959Sopenharmony_ci            ],
759e815959Sopenharmony_ci        ],
769e815959Sopenharmony_ci        "descendant /w whitespace",
779e815959Sopenharmony_ci    ],
789e815959Sopenharmony_ci    [
799e815959Sopenharmony_ci        "div + div",
809e815959Sopenharmony_ci        [
819e815959Sopenharmony_ci            [
829e815959Sopenharmony_ci                {
839e815959Sopenharmony_ci                    type: SelectorType.Tag,
849e815959Sopenharmony_ci                    namespace: null,
859e815959Sopenharmony_ci                    name: "div",
869e815959Sopenharmony_ci                },
879e815959Sopenharmony_ci                {
889e815959Sopenharmony_ci                    type: SelectorType.Adjacent,
899e815959Sopenharmony_ci                },
909e815959Sopenharmony_ci                {
919e815959Sopenharmony_ci                    type: SelectorType.Tag,
929e815959Sopenharmony_ci                    namespace: null,
939e815959Sopenharmony_ci                    name: "div",
949e815959Sopenharmony_ci                },
959e815959Sopenharmony_ci            ],
969e815959Sopenharmony_ci        ],
979e815959Sopenharmony_ci        "adjacent",
989e815959Sopenharmony_ci    ],
999e815959Sopenharmony_ci    [
1009e815959Sopenharmony_ci        "div ~ div",
1019e815959Sopenharmony_ci        [
1029e815959Sopenharmony_ci            [
1039e815959Sopenharmony_ci                {
1049e815959Sopenharmony_ci                    type: SelectorType.Tag,
1059e815959Sopenharmony_ci                    namespace: null,
1069e815959Sopenharmony_ci                    name: "div",
1079e815959Sopenharmony_ci                },
1089e815959Sopenharmony_ci                {
1099e815959Sopenharmony_ci                    type: SelectorType.Sibling,
1109e815959Sopenharmony_ci                },
1119e815959Sopenharmony_ci                {
1129e815959Sopenharmony_ci                    type: SelectorType.Tag,
1139e815959Sopenharmony_ci                    namespace: null,
1149e815959Sopenharmony_ci                    name: "div",
1159e815959Sopenharmony_ci                },
1169e815959Sopenharmony_ci            ],
1179e815959Sopenharmony_ci        ],
1189e815959Sopenharmony_ci        "sibling",
1199e815959Sopenharmony_ci    ],
1209e815959Sopenharmony_ci    [
1219e815959Sopenharmony_ci        "p < div",
1229e815959Sopenharmony_ci        [
1239e815959Sopenharmony_ci            [
1249e815959Sopenharmony_ci                {
1259e815959Sopenharmony_ci                    type: SelectorType.Tag,
1269e815959Sopenharmony_ci                    namespace: null,
1279e815959Sopenharmony_ci                    name: "p",
1289e815959Sopenharmony_ci                },
1299e815959Sopenharmony_ci                {
1309e815959Sopenharmony_ci                    type: SelectorType.Parent,
1319e815959Sopenharmony_ci                },
1329e815959Sopenharmony_ci                {
1339e815959Sopenharmony_ci                    type: SelectorType.Tag,
1349e815959Sopenharmony_ci                    namespace: null,
1359e815959Sopenharmony_ci                    name: "div",
1369e815959Sopenharmony_ci                },
1379e815959Sopenharmony_ci            ],
1389e815959Sopenharmony_ci        ],
1399e815959Sopenharmony_ci        "parent",
1409e815959Sopenharmony_ci    ],
1419e815959Sopenharmony_ci
1429e815959Sopenharmony_ci    // Escaped whitespace
1439e815959Sopenharmony_ci    [
1449e815959Sopenharmony_ci        "#\\  > a ",
1459e815959Sopenharmony_ci        [
1469e815959Sopenharmony_ci            [
1479e815959Sopenharmony_ci                {
1489e815959Sopenharmony_ci                    type: SelectorType.Attribute,
1499e815959Sopenharmony_ci                    namespace: null,
1509e815959Sopenharmony_ci                    action: AttributeAction.Equals,
1519e815959Sopenharmony_ci                    name: "id",
1529e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.QuirksMode,
1539e815959Sopenharmony_ci                    value: " ",
1549e815959Sopenharmony_ci                },
1559e815959Sopenharmony_ci                {
1569e815959Sopenharmony_ci                    type: SelectorType.Child,
1579e815959Sopenharmony_ci                },
1589e815959Sopenharmony_ci                {
1599e815959Sopenharmony_ci                    type: SelectorType.Tag,
1609e815959Sopenharmony_ci                    namespace: null,
1619e815959Sopenharmony_ci                    name: "a",
1629e815959Sopenharmony_ci                },
1639e815959Sopenharmony_ci            ],
1649e815959Sopenharmony_ci        ],
1659e815959Sopenharmony_ci        "Space between escaped space and combinator",
1669e815959Sopenharmony_ci    ],
1679e815959Sopenharmony_ci    [
1689e815959Sopenharmony_ci        ".\\  ",
1699e815959Sopenharmony_ci        [
1709e815959Sopenharmony_ci            [
1719e815959Sopenharmony_ci                {
1729e815959Sopenharmony_ci                    type: SelectorType.Attribute,
1739e815959Sopenharmony_ci                    namespace: null,
1749e815959Sopenharmony_ci                    name: "class",
1759e815959Sopenharmony_ci                    action: AttributeAction.Element,
1769e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.QuirksMode,
1779e815959Sopenharmony_ci                    value: " ",
1789e815959Sopenharmony_ci                },
1799e815959Sopenharmony_ci            ],
1809e815959Sopenharmony_ci        ],
1819e815959Sopenharmony_ci        "Space after escaped space",
1829e815959Sopenharmony_ci    ],
1839e815959Sopenharmony_ci    [
1849e815959Sopenharmony_ci        ".m™²³",
1859e815959Sopenharmony_ci        [
1869e815959Sopenharmony_ci            [
1879e815959Sopenharmony_ci                {
1889e815959Sopenharmony_ci                    type: SelectorType.Attribute,
1899e815959Sopenharmony_ci                    namespace: null,
1909e815959Sopenharmony_ci                    name: "class",
1919e815959Sopenharmony_ci                    action: AttributeAction.Element,
1929e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.QuirksMode,
1939e815959Sopenharmony_ci                    value: "m™²³",
1949e815959Sopenharmony_ci                },
1959e815959Sopenharmony_ci            ],
1969e815959Sopenharmony_ci        ],
1979e815959Sopenharmony_ci        "Special charecters in selector",
1989e815959Sopenharmony_ci    ],
1999e815959Sopenharmony_ci    [
2009e815959Sopenharmony_ci        "\\61 ",
2019e815959Sopenharmony_ci        [
2029e815959Sopenharmony_ci            [
2039e815959Sopenharmony_ci                {
2049e815959Sopenharmony_ci                    type: SelectorType.Tag,
2059e815959Sopenharmony_ci                    namespace: null,
2069e815959Sopenharmony_ci                    name: "a",
2079e815959Sopenharmony_ci                },
2089e815959Sopenharmony_ci            ],
2099e815959Sopenharmony_ci        ],
2109e815959Sopenharmony_ci        "Numeric escape with space (BMP)",
2119e815959Sopenharmony_ci    ],
2129e815959Sopenharmony_ci    [
2139e815959Sopenharmony_ci        "\\1d306\\01d306",
2149e815959Sopenharmony_ci        [
2159e815959Sopenharmony_ci            [
2169e815959Sopenharmony_ci                {
2179e815959Sopenharmony_ci                    type: SelectorType.Tag,
2189e815959Sopenharmony_ci                    namespace: null,
2199e815959Sopenharmony_ci                    name: "\uD834\uDF06\uD834\uDF06",
2209e815959Sopenharmony_ci                },
2219e815959Sopenharmony_ci            ],
2229e815959Sopenharmony_ci        ],
2239e815959Sopenharmony_ci        "Numeric escape (outside BMP)",
2249e815959Sopenharmony_ci    ],
2259e815959Sopenharmony_ci    [
2269e815959Sopenharmony_ci        "#\\26 B",
2279e815959Sopenharmony_ci        [
2289e815959Sopenharmony_ci            [
2299e815959Sopenharmony_ci                {
2309e815959Sopenharmony_ci                    type: SelectorType.Attribute,
2319e815959Sopenharmony_ci                    namespace: null,
2329e815959Sopenharmony_ci                    action: AttributeAction.Equals,
2339e815959Sopenharmony_ci                    name: "id",
2349e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.QuirksMode,
2359e815959Sopenharmony_ci                    value: "&B",
2369e815959Sopenharmony_ci                },
2379e815959Sopenharmony_ci            ],
2389e815959Sopenharmony_ci        ],
2399e815959Sopenharmony_ci        "id selector with escape sequence",
2409e815959Sopenharmony_ci    ],
2419e815959Sopenharmony_ci
2429e815959Sopenharmony_ci    // Attributes
2439e815959Sopenharmony_ci    [
2449e815959Sopenharmony_ci        '[name^="foo["]',
2459e815959Sopenharmony_ci        [
2469e815959Sopenharmony_ci            [
2479e815959Sopenharmony_ci                {
2489e815959Sopenharmony_ci                    type: SelectorType.Attribute,
2499e815959Sopenharmony_ci                    namespace: null,
2509e815959Sopenharmony_ci                    name: "name",
2519e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
2529e815959Sopenharmony_ci                    action: AttributeAction.Start,
2539e815959Sopenharmony_ci                    value: "foo[",
2549e815959Sopenharmony_ci                },
2559e815959Sopenharmony_ci            ],
2569e815959Sopenharmony_ci        ],
2579e815959Sopenharmony_ci        "quoted attribute",
2589e815959Sopenharmony_ci    ],
2599e815959Sopenharmony_ci    [
2609e815959Sopenharmony_ci        '[name^="foo[bar]"]',
2619e815959Sopenharmony_ci        [
2629e815959Sopenharmony_ci            [
2639e815959Sopenharmony_ci                {
2649e815959Sopenharmony_ci                    type: SelectorType.Attribute,
2659e815959Sopenharmony_ci                    namespace: null,
2669e815959Sopenharmony_ci                    name: "name",
2679e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
2689e815959Sopenharmony_ci                    action: AttributeAction.Start,
2699e815959Sopenharmony_ci                    value: "foo[bar]",
2709e815959Sopenharmony_ci                },
2719e815959Sopenharmony_ci            ],
2729e815959Sopenharmony_ci        ],
2739e815959Sopenharmony_ci        "quoted attribute",
2749e815959Sopenharmony_ci    ],
2759e815959Sopenharmony_ci    [
2769e815959Sopenharmony_ci        '[name$="[bar]"]',
2779e815959Sopenharmony_ci        [
2789e815959Sopenharmony_ci            [
2799e815959Sopenharmony_ci                {
2809e815959Sopenharmony_ci                    type: SelectorType.Attribute,
2819e815959Sopenharmony_ci                    namespace: null,
2829e815959Sopenharmony_ci                    name: "name",
2839e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
2849e815959Sopenharmony_ci                    action: AttributeAction.End,
2859e815959Sopenharmony_ci                    value: "[bar]",
2869e815959Sopenharmony_ci                },
2879e815959Sopenharmony_ci            ],
2889e815959Sopenharmony_ci        ],
2899e815959Sopenharmony_ci        "quoted attribute",
2909e815959Sopenharmony_ci    ],
2919e815959Sopenharmony_ci    [
2929e815959Sopenharmony_ci        '[href *= "google"]',
2939e815959Sopenharmony_ci        [
2949e815959Sopenharmony_ci            [
2959e815959Sopenharmony_ci                {
2969e815959Sopenharmony_ci                    type: SelectorType.Attribute,
2979e815959Sopenharmony_ci                    namespace: null,
2989e815959Sopenharmony_ci                    name: "href",
2999e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
3009e815959Sopenharmony_ci                    action: AttributeAction.Any,
3019e815959Sopenharmony_ci                    value: "google",
3029e815959Sopenharmony_ci                },
3039e815959Sopenharmony_ci            ],
3049e815959Sopenharmony_ci        ],
3059e815959Sopenharmony_ci        "quoted attribute with spaces",
3069e815959Sopenharmony_ci    ],
3079e815959Sopenharmony_ci    [
3089e815959Sopenharmony_ci        '[value="\nsome text\n"]',
3099e815959Sopenharmony_ci        [
3109e815959Sopenharmony_ci            [
3119e815959Sopenharmony_ci                {
3129e815959Sopenharmony_ci                    type: SelectorType.Attribute,
3139e815959Sopenharmony_ci                    namespace: null,
3149e815959Sopenharmony_ci                    name: "value",
3159e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
3169e815959Sopenharmony_ci                    action: AttributeAction.Equals,
3179e815959Sopenharmony_ci                    value: "\nsome text\n",
3189e815959Sopenharmony_ci                },
3199e815959Sopenharmony_ci            ],
3209e815959Sopenharmony_ci        ],
3219e815959Sopenharmony_ci        "quoted attribute with internal newline",
3229e815959Sopenharmony_ci    ],
3239e815959Sopenharmony_ci    [
3249e815959Sopenharmony_ci        "[name=foo\\.baz]",
3259e815959Sopenharmony_ci        [
3269e815959Sopenharmony_ci            [
3279e815959Sopenharmony_ci                {
3289e815959Sopenharmony_ci                    type: SelectorType.Attribute,
3299e815959Sopenharmony_ci                    namespace: null,
3309e815959Sopenharmony_ci                    name: "name",
3319e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
3329e815959Sopenharmony_ci                    action: AttributeAction.Equals,
3339e815959Sopenharmony_ci                    value: "foo.baz",
3349e815959Sopenharmony_ci                },
3359e815959Sopenharmony_ci            ],
3369e815959Sopenharmony_ci        ],
3379e815959Sopenharmony_ci        "attribute with escaped dot",
3389e815959Sopenharmony_ci    ],
3399e815959Sopenharmony_ci    [
3409e815959Sopenharmony_ci        "[name=foo\\[bar\\]]",
3419e815959Sopenharmony_ci        [
3429e815959Sopenharmony_ci            [
3439e815959Sopenharmony_ci                {
3449e815959Sopenharmony_ci                    type: SelectorType.Attribute,
3459e815959Sopenharmony_ci                    namespace: null,
3469e815959Sopenharmony_ci                    name: "name",
3479e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
3489e815959Sopenharmony_ci                    action: AttributeAction.Equals,
3499e815959Sopenharmony_ci                    value: "foo[bar]",
3509e815959Sopenharmony_ci                },
3519e815959Sopenharmony_ci            ],
3529e815959Sopenharmony_ci        ],
3539e815959Sopenharmony_ci        "attribute with escaped square brackets",
3549e815959Sopenharmony_ci    ],
3559e815959Sopenharmony_ci    [
3569e815959Sopenharmony_ci        "[xml\\:test]",
3579e815959Sopenharmony_ci        [
3589e815959Sopenharmony_ci            [
3599e815959Sopenharmony_ci                {
3609e815959Sopenharmony_ci                    type: SelectorType.Attribute,
3619e815959Sopenharmony_ci                    namespace: null,
3629e815959Sopenharmony_ci                    name: "xml:test",
3639e815959Sopenharmony_ci                    action: AttributeAction.Exists,
3649e815959Sopenharmony_ci                    value: "",
3659e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
3669e815959Sopenharmony_ci                },
3679e815959Sopenharmony_ci            ],
3689e815959Sopenharmony_ci        ],
3699e815959Sopenharmony_ci        "escaped attribute",
3709e815959Sopenharmony_ci    ],
3719e815959Sopenharmony_ci    [
3729e815959Sopenharmony_ci        "[name='foo ~ < > , bar' i]",
3739e815959Sopenharmony_ci        [
3749e815959Sopenharmony_ci            [
3759e815959Sopenharmony_ci                {
3769e815959Sopenharmony_ci                    type: SelectorType.Attribute,
3779e815959Sopenharmony_ci                    namespace: null,
3789e815959Sopenharmony_ci                    name: "name",
3799e815959Sopenharmony_ci                    action: AttributeAction.Equals,
3809e815959Sopenharmony_ci                    value: "foo ~ < > , bar",
3819e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.IgnoreCase,
3829e815959Sopenharmony_ci                },
3839e815959Sopenharmony_ci            ],
3849e815959Sopenharmony_ci        ],
3859e815959Sopenharmony_ci        "attribute with previously normalized characters",
3869e815959Sopenharmony_ci    ],
3879e815959Sopenharmony_ci
3889e815959Sopenharmony_ci    // ID starting with a dot
3899e815959Sopenharmony_ci    [
3909e815959Sopenharmony_ci        "#.identifier",
3919e815959Sopenharmony_ci        [
3929e815959Sopenharmony_ci            [
3939e815959Sopenharmony_ci                {
3949e815959Sopenharmony_ci                    type: SelectorType.Attribute,
3959e815959Sopenharmony_ci                    namespace: null,
3969e815959Sopenharmony_ci                    action: AttributeAction.Equals,
3979e815959Sopenharmony_ci                    name: "id",
3989e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.QuirksMode,
3999e815959Sopenharmony_ci                    value: ".identifier",
4009e815959Sopenharmony_ci                },
4019e815959Sopenharmony_ci            ],
4029e815959Sopenharmony_ci        ],
4039e815959Sopenharmony_ci        "ID starting with a dot",
4049e815959Sopenharmony_ci    ],
4059e815959Sopenharmony_ci
4069e815959Sopenharmony_ci    // Pseudo elements
4079e815959Sopenharmony_ci    [
4089e815959Sopenharmony_ci        "::foo",
4099e815959Sopenharmony_ci        [
4109e815959Sopenharmony_ci            [
4119e815959Sopenharmony_ci                {
4129e815959Sopenharmony_ci                    type: SelectorType.PseudoElement,
4139e815959Sopenharmony_ci                    name: "foo",
4149e815959Sopenharmony_ci                    data: null,
4159e815959Sopenharmony_ci                },
4169e815959Sopenharmony_ci            ],
4179e815959Sopenharmony_ci        ],
4189e815959Sopenharmony_ci        "pseudo-element",
4199e815959Sopenharmony_ci    ],
4209e815959Sopenharmony_ci    [
4219e815959Sopenharmony_ci        "::foo()",
4229e815959Sopenharmony_ci        [
4239e815959Sopenharmony_ci            [
4249e815959Sopenharmony_ci                {
4259e815959Sopenharmony_ci                    type: SelectorType.PseudoElement,
4269e815959Sopenharmony_ci                    name: "foo",
4279e815959Sopenharmony_ci                    data: "",
4289e815959Sopenharmony_ci                },
4299e815959Sopenharmony_ci            ],
4309e815959Sopenharmony_ci        ],
4319e815959Sopenharmony_ci        "pseudo-element",
4329e815959Sopenharmony_ci    ],
4339e815959Sopenharmony_ci    [
4349e815959Sopenharmony_ci        "::foo(bar())",
4359e815959Sopenharmony_ci        [
4369e815959Sopenharmony_ci            [
4379e815959Sopenharmony_ci                {
4389e815959Sopenharmony_ci                    type: SelectorType.PseudoElement,
4399e815959Sopenharmony_ci                    name: "foo",
4409e815959Sopenharmony_ci                    data: "bar()",
4419e815959Sopenharmony_ci                },
4429e815959Sopenharmony_ci            ],
4439e815959Sopenharmony_ci        ],
4449e815959Sopenharmony_ci        "pseudo-element",
4459e815959Sopenharmony_ci    ],
4469e815959Sopenharmony_ci
4479e815959Sopenharmony_ci    // Pseudo selectors
4489e815959Sopenharmony_ci    [
4499e815959Sopenharmony_ci        ":foo",
4509e815959Sopenharmony_ci        [
4519e815959Sopenharmony_ci            [
4529e815959Sopenharmony_ci                {
4539e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
4549e815959Sopenharmony_ci                    name: "foo",
4559e815959Sopenharmony_ci                    data: null,
4569e815959Sopenharmony_ci                },
4579e815959Sopenharmony_ci            ],
4589e815959Sopenharmony_ci        ],
4599e815959Sopenharmony_ci        "pseudo selector without any data",
4609e815959Sopenharmony_ci    ],
4619e815959Sopenharmony_ci    [
4629e815959Sopenharmony_ci        ":bar(baz)",
4639e815959Sopenharmony_ci        [
4649e815959Sopenharmony_ci            [
4659e815959Sopenharmony_ci                {
4669e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
4679e815959Sopenharmony_ci                    name: "bar",
4689e815959Sopenharmony_ci                    data: "baz",
4699e815959Sopenharmony_ci                },
4709e815959Sopenharmony_ci            ],
4719e815959Sopenharmony_ci        ],
4729e815959Sopenharmony_ci        "pseudo selector with data",
4739e815959Sopenharmony_ci    ],
4749e815959Sopenharmony_ci    [
4759e815959Sopenharmony_ci        ':contains("(foo)")',
4769e815959Sopenharmony_ci        [
4779e815959Sopenharmony_ci            [
4789e815959Sopenharmony_ci                {
4799e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
4809e815959Sopenharmony_ci                    name: "contains",
4819e815959Sopenharmony_ci                    data: "(foo)",
4829e815959Sopenharmony_ci                },
4839e815959Sopenharmony_ci            ],
4849e815959Sopenharmony_ci        ],
4859e815959Sopenharmony_ci        "pseudo selector with data",
4869e815959Sopenharmony_ci    ],
4879e815959Sopenharmony_ci    [
4889e815959Sopenharmony_ci        ":where(a)",
4899e815959Sopenharmony_ci        [
4909e815959Sopenharmony_ci            [
4919e815959Sopenharmony_ci                {
4929e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
4939e815959Sopenharmony_ci                    name: "where",
4949e815959Sopenharmony_ci                    data: [
4959e815959Sopenharmony_ci                        [
4969e815959Sopenharmony_ci                            {
4979e815959Sopenharmony_ci                                type: SelectorType.Tag,
4989e815959Sopenharmony_ci                                namespace: null,
4999e815959Sopenharmony_ci                                name: "a",
5009e815959Sopenharmony_ci                            },
5019e815959Sopenharmony_ci                        ],
5029e815959Sopenharmony_ci                    ],
5039e815959Sopenharmony_ci                },
5049e815959Sopenharmony_ci            ],
5059e815959Sopenharmony_ci        ],
5069e815959Sopenharmony_ci        "pseudo selector with data",
5079e815959Sopenharmony_ci    ],
5089e815959Sopenharmony_ci    [
5099e815959Sopenharmony_ci        ':contains("(a((foo\\\\\\))))")',
5109e815959Sopenharmony_ci        [
5119e815959Sopenharmony_ci            [
5129e815959Sopenharmony_ci                {
5139e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
5149e815959Sopenharmony_ci                    name: "contains",
5159e815959Sopenharmony_ci                    data: "(a((foo))))",
5169e815959Sopenharmony_ci                },
5179e815959Sopenharmony_ci            ],
5189e815959Sopenharmony_ci        ],
5199e815959Sopenharmony_ci        "pseudo selector with escaped data",
5209e815959Sopenharmony_ci    ],
5219e815959Sopenharmony_ci    [
5229e815959Sopenharmony_ci        ":icontains('')",
5239e815959Sopenharmony_ci        [
5249e815959Sopenharmony_ci            [
5259e815959Sopenharmony_ci                {
5269e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
5279e815959Sopenharmony_ci                    name: "icontains",
5289e815959Sopenharmony_ci                    data: "",
5299e815959Sopenharmony_ci                },
5309e815959Sopenharmony_ci            ],
5319e815959Sopenharmony_ci        ],
5329e815959Sopenharmony_ci        "pseudo selector with quote-stripped data",
5339e815959Sopenharmony_ci    ],
5349e815959Sopenharmony_ci    [
5359e815959Sopenharmony_ci        ':contains("(foo)")',
5369e815959Sopenharmony_ci        [
5379e815959Sopenharmony_ci            [
5389e815959Sopenharmony_ci                {
5399e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
5409e815959Sopenharmony_ci                    name: "contains",
5419e815959Sopenharmony_ci                    data: "(foo)",
5429e815959Sopenharmony_ci                },
5439e815959Sopenharmony_ci            ],
5449e815959Sopenharmony_ci        ],
5459e815959Sopenharmony_ci        "pseudo selector with data",
5469e815959Sopenharmony_ci    ],
5479e815959Sopenharmony_ci
5489e815959Sopenharmony_ci    // Multiple selectors
5499e815959Sopenharmony_ci    [
5509e815959Sopenharmony_ci        "a , b",
5519e815959Sopenharmony_ci        [
5529e815959Sopenharmony_ci            [
5539e815959Sopenharmony_ci                {
5549e815959Sopenharmony_ci                    type: SelectorType.Tag,
5559e815959Sopenharmony_ci                    namespace: null,
5569e815959Sopenharmony_ci                    name: "a",
5579e815959Sopenharmony_ci                },
5589e815959Sopenharmony_ci            ],
5599e815959Sopenharmony_ci            [
5609e815959Sopenharmony_ci                {
5619e815959Sopenharmony_ci                    type: SelectorType.Tag,
5629e815959Sopenharmony_ci                    namespace: null,
5639e815959Sopenharmony_ci                    name: "b",
5649e815959Sopenharmony_ci                },
5659e815959Sopenharmony_ci            ],
5669e815959Sopenharmony_ci        ],
5679e815959Sopenharmony_ci        "multiple selectors",
5689e815959Sopenharmony_ci    ],
5699e815959Sopenharmony_ci
5709e815959Sopenharmony_ci    [
5719e815959Sopenharmony_ci        ":host(h1, p)",
5729e815959Sopenharmony_ci        [
5739e815959Sopenharmony_ci            [
5749e815959Sopenharmony_ci                {
5759e815959Sopenharmony_ci                    type: SelectorType.Pseudo,
5769e815959Sopenharmony_ci                    name: "host",
5779e815959Sopenharmony_ci                    data: [
5789e815959Sopenharmony_ci                        [
5799e815959Sopenharmony_ci                            {
5809e815959Sopenharmony_ci                                type: SelectorType.Tag,
5819e815959Sopenharmony_ci                                namespace: null,
5829e815959Sopenharmony_ci                                name: "h1",
5839e815959Sopenharmony_ci                            },
5849e815959Sopenharmony_ci                        ],
5859e815959Sopenharmony_ci                        [
5869e815959Sopenharmony_ci                            {
5879e815959Sopenharmony_ci                                type: SelectorType.Tag,
5889e815959Sopenharmony_ci                                namespace: null,
5899e815959Sopenharmony_ci                                name: "p",
5909e815959Sopenharmony_ci                            },
5919e815959Sopenharmony_ci                        ],
5929e815959Sopenharmony_ci                    ],
5939e815959Sopenharmony_ci                },
5949e815959Sopenharmony_ci            ],
5959e815959Sopenharmony_ci        ],
5969e815959Sopenharmony_ci        "pseudo selector with data",
5979e815959Sopenharmony_ci    ],
5989e815959Sopenharmony_ci
5999e815959Sopenharmony_ci    /*
6009e815959Sopenharmony_ci     * Bad attributes (taken from Sizzle)
6019e815959Sopenharmony_ci     * https://github.com/jquery/sizzle/blob/af163873d7cdfc57f18b16c04b1915209533f0b1/test/unit/selector.js#L602-L651
6029e815959Sopenharmony_ci     */
6039e815959Sopenharmony_ci    [
6049e815959Sopenharmony_ci        "[id=types_all]",
6059e815959Sopenharmony_ci        [
6069e815959Sopenharmony_ci            [
6079e815959Sopenharmony_ci                {
6089e815959Sopenharmony_ci                    type: SelectorType.Attribute,
6099e815959Sopenharmony_ci                    namespace: null,
6109e815959Sopenharmony_ci                    action: AttributeAction.Equals,
6119e815959Sopenharmony_ci                    name: "id",
6129e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
6139e815959Sopenharmony_ci                    value: "types_all",
6149e815959Sopenharmony_ci                },
6159e815959Sopenharmony_ci            ],
6169e815959Sopenharmony_ci        ],
6179e815959Sopenharmony_ci        "Underscores don't need escaping",
6189e815959Sopenharmony_ci    ],
6199e815959Sopenharmony_ci    [
6209e815959Sopenharmony_ci        "[name=foo\\ bar]",
6219e815959Sopenharmony_ci        [
6229e815959Sopenharmony_ci            [
6239e815959Sopenharmony_ci                {
6249e815959Sopenharmony_ci                    type: SelectorType.Attribute,
6259e815959Sopenharmony_ci                    namespace: null,
6269e815959Sopenharmony_ci                    action: AttributeAction.Equals,
6279e815959Sopenharmony_ci                    name: "name",
6289e815959Sopenharmony_ci                    value: "foo bar",
6299e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
6309e815959Sopenharmony_ci                },
6319e815959Sopenharmony_ci            ],
6329e815959Sopenharmony_ci        ],
6339e815959Sopenharmony_ci        "Escaped space",
6349e815959Sopenharmony_ci    ],
6359e815959Sopenharmony_ci    [
6369e815959Sopenharmony_ci        "[name=foo\\.baz]",
6379e815959Sopenharmony_ci        [
6389e815959Sopenharmony_ci            [
6399e815959Sopenharmony_ci                {
6409e815959Sopenharmony_ci                    type: SelectorType.Attribute,
6419e815959Sopenharmony_ci                    namespace: null,
6429e815959Sopenharmony_ci                    action: AttributeAction.Equals,
6439e815959Sopenharmony_ci                    name: "name",
6449e815959Sopenharmony_ci                    value: "foo.baz",
6459e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
6469e815959Sopenharmony_ci                },
6479e815959Sopenharmony_ci            ],
6489e815959Sopenharmony_ci        ],
6499e815959Sopenharmony_ci        "Escaped dot",
6509e815959Sopenharmony_ci    ],
6519e815959Sopenharmony_ci    [
6529e815959Sopenharmony_ci        "[name=foo\\[baz\\]]",
6539e815959Sopenharmony_ci        [
6549e815959Sopenharmony_ci            [
6559e815959Sopenharmony_ci                {
6569e815959Sopenharmony_ci                    type: SelectorType.Attribute,
6579e815959Sopenharmony_ci                    namespace: null,
6589e815959Sopenharmony_ci                    action: AttributeAction.Equals,
6599e815959Sopenharmony_ci                    name: "name",
6609e815959Sopenharmony_ci                    value: "foo[baz]",
6619e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
6629e815959Sopenharmony_ci                },
6639e815959Sopenharmony_ci            ],
6649e815959Sopenharmony_ci        ],
6659e815959Sopenharmony_ci        "Escaped brackets",
6669e815959Sopenharmony_ci    ],
6679e815959Sopenharmony_ci    [
6689e815959Sopenharmony_ci        "[data-attr='foo_baz\\']']",
6699e815959Sopenharmony_ci        [
6709e815959Sopenharmony_ci            [
6719e815959Sopenharmony_ci                {
6729e815959Sopenharmony_ci                    type: SelectorType.Attribute,
6739e815959Sopenharmony_ci                    namespace: null,
6749e815959Sopenharmony_ci                    action: AttributeAction.Equals,
6759e815959Sopenharmony_ci                    name: "data-attr",
6769e815959Sopenharmony_ci                    value: "foo_baz']",
6779e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
6789e815959Sopenharmony_ci                },
6799e815959Sopenharmony_ci            ],
6809e815959Sopenharmony_ci        ],
6819e815959Sopenharmony_ci        "Escaped quote + right bracket",
6829e815959Sopenharmony_ci    ],
6839e815959Sopenharmony_ci    [
6849e815959Sopenharmony_ci        "[data-attr='\\'']",
6859e815959Sopenharmony_ci        [
6869e815959Sopenharmony_ci            [
6879e815959Sopenharmony_ci                {
6889e815959Sopenharmony_ci                    type: SelectorType.Attribute,
6899e815959Sopenharmony_ci                    namespace: null,
6909e815959Sopenharmony_ci                    action: AttributeAction.Equals,
6919e815959Sopenharmony_ci                    name: "data-attr",
6929e815959Sopenharmony_ci                    value: "'",
6939e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
6949e815959Sopenharmony_ci                },
6959e815959Sopenharmony_ci            ],
6969e815959Sopenharmony_ci        ],
6979e815959Sopenharmony_ci        "Quoted quote",
6989e815959Sopenharmony_ci    ],
6999e815959Sopenharmony_ci    [
7009e815959Sopenharmony_ci        "[data-attr='\\\\']",
7019e815959Sopenharmony_ci        [
7029e815959Sopenharmony_ci            [
7039e815959Sopenharmony_ci                {
7049e815959Sopenharmony_ci                    type: SelectorType.Attribute,
7059e815959Sopenharmony_ci                    namespace: null,
7069e815959Sopenharmony_ci                    action: AttributeAction.Equals,
7079e815959Sopenharmony_ci                    name: "data-attr",
7089e815959Sopenharmony_ci                    value: "\\",
7099e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
7109e815959Sopenharmony_ci                },
7119e815959Sopenharmony_ci            ],
7129e815959Sopenharmony_ci        ],
7139e815959Sopenharmony_ci        "Quoted backslash",
7149e815959Sopenharmony_ci    ],
7159e815959Sopenharmony_ci    [
7169e815959Sopenharmony_ci        "[data-attr='\\\\\\'']",
7179e815959Sopenharmony_ci        [
7189e815959Sopenharmony_ci            [
7199e815959Sopenharmony_ci                {
7209e815959Sopenharmony_ci                    type: SelectorType.Attribute,
7219e815959Sopenharmony_ci                    namespace: null,
7229e815959Sopenharmony_ci                    action: AttributeAction.Equals,
7239e815959Sopenharmony_ci                    name: "data-attr",
7249e815959Sopenharmony_ci                    value: "\\'",
7259e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
7269e815959Sopenharmony_ci                },
7279e815959Sopenharmony_ci            ],
7289e815959Sopenharmony_ci        ],
7299e815959Sopenharmony_ci        "Quoted backslash quote",
7309e815959Sopenharmony_ci    ],
7319e815959Sopenharmony_ci    [
7329e815959Sopenharmony_ci        "[data-attr='\\\\\\\\']",
7339e815959Sopenharmony_ci        [
7349e815959Sopenharmony_ci            [
7359e815959Sopenharmony_ci                {
7369e815959Sopenharmony_ci                    type: SelectorType.Attribute,
7379e815959Sopenharmony_ci                    namespace: null,
7389e815959Sopenharmony_ci                    action: AttributeAction.Equals,
7399e815959Sopenharmony_ci                    name: "data-attr",
7409e815959Sopenharmony_ci                    value: "\\\\",
7419e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
7429e815959Sopenharmony_ci                },
7439e815959Sopenharmony_ci            ],
7449e815959Sopenharmony_ci        ],
7459e815959Sopenharmony_ci        "Quoted backslash backslash",
7469e815959Sopenharmony_ci    ],
7479e815959Sopenharmony_ci    [
7489e815959Sopenharmony_ci        "[data-attr='\\5C\\\\']",
7499e815959Sopenharmony_ci        [
7509e815959Sopenharmony_ci            [
7519e815959Sopenharmony_ci                {
7529e815959Sopenharmony_ci                    type: SelectorType.Attribute,
7539e815959Sopenharmony_ci                    namespace: null,
7549e815959Sopenharmony_ci                    action: AttributeAction.Equals,
7559e815959Sopenharmony_ci                    name: "data-attr",
7569e815959Sopenharmony_ci                    value: "\\\\",
7579e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
7589e815959Sopenharmony_ci                },
7599e815959Sopenharmony_ci            ],
7609e815959Sopenharmony_ci        ],
7619e815959Sopenharmony_ci        "Quoted backslash backslash (numeric escape)",
7629e815959Sopenharmony_ci    ],
7639e815959Sopenharmony_ci    [
7649e815959Sopenharmony_ci        "[data-attr='\\5C \\\\']",
7659e815959Sopenharmony_ci        [
7669e815959Sopenharmony_ci            [
7679e815959Sopenharmony_ci                {
7689e815959Sopenharmony_ci                    type: SelectorType.Attribute,
7699e815959Sopenharmony_ci                    namespace: null,
7709e815959Sopenharmony_ci                    action: AttributeAction.Equals,
7719e815959Sopenharmony_ci                    name: "data-attr",
7729e815959Sopenharmony_ci                    value: "\\\\",
7739e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
7749e815959Sopenharmony_ci                },
7759e815959Sopenharmony_ci            ],
7769e815959Sopenharmony_ci        ],
7779e815959Sopenharmony_ci        "Quoted backslash backslash (numeric escape with trailing space)",
7789e815959Sopenharmony_ci    ],
7799e815959Sopenharmony_ci    [
7809e815959Sopenharmony_ci        "[data-attr='\\5C\t\\\\']",
7819e815959Sopenharmony_ci        [
7829e815959Sopenharmony_ci            [
7839e815959Sopenharmony_ci                {
7849e815959Sopenharmony_ci                    type: SelectorType.Attribute,
7859e815959Sopenharmony_ci                    namespace: null,
7869e815959Sopenharmony_ci                    action: AttributeAction.Equals,
7879e815959Sopenharmony_ci                    name: "data-attr",
7889e815959Sopenharmony_ci                    value: "\\\\",
7899e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
7909e815959Sopenharmony_ci                },
7919e815959Sopenharmony_ci            ],
7929e815959Sopenharmony_ci        ],
7939e815959Sopenharmony_ci        "Quoted backslash backslash (numeric escape with trailing tab)",
7949e815959Sopenharmony_ci    ],
7959e815959Sopenharmony_ci    [
7969e815959Sopenharmony_ci        "[data-attr='\\04e00']",
7979e815959Sopenharmony_ci        [
7989e815959Sopenharmony_ci            [
7999e815959Sopenharmony_ci                {
8009e815959Sopenharmony_ci                    type: SelectorType.Attribute,
8019e815959Sopenharmony_ci                    namespace: null,
8029e815959Sopenharmony_ci                    action: AttributeAction.Equals,
8039e815959Sopenharmony_ci                    name: "data-attr",
8049e815959Sopenharmony_ci                    value: "\u4e00",
8059e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
8069e815959Sopenharmony_ci                },
8079e815959Sopenharmony_ci            ],
8089e815959Sopenharmony_ci        ],
8099e815959Sopenharmony_ci        "Long numeric escape (BMP)",
8109e815959Sopenharmony_ci    ],
8119e815959Sopenharmony_ci    [
8129e815959Sopenharmony_ci        "[data-attr='\\01D306A']",
8139e815959Sopenharmony_ci        [
8149e815959Sopenharmony_ci            [
8159e815959Sopenharmony_ci                {
8169e815959Sopenharmony_ci                    type: SelectorType.Attribute,
8179e815959Sopenharmony_ci                    namespace: null,
8189e815959Sopenharmony_ci                    action: AttributeAction.Equals,
8199e815959Sopenharmony_ci                    name: "data-attr",
8209e815959Sopenharmony_ci                    value: "\uD834\uDF06A",
8219e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
8229e815959Sopenharmony_ci                },
8239e815959Sopenharmony_ci            ],
8249e815959Sopenharmony_ci        ],
8259e815959Sopenharmony_ci        "Long numeric escape (non-BMP)",
8269e815959Sopenharmony_ci    ],
8279e815959Sopenharmony_ci    [
8289e815959Sopenharmony_ci        "fOo[baR]",
8299e815959Sopenharmony_ci        [
8309e815959Sopenharmony_ci            [
8319e815959Sopenharmony_ci                {
8329e815959Sopenharmony_ci                    name: "fOo",
8339e815959Sopenharmony_ci                    type: SelectorType.Tag,
8349e815959Sopenharmony_ci                    namespace: null,
8359e815959Sopenharmony_ci                },
8369e815959Sopenharmony_ci                {
8379e815959Sopenharmony_ci                    action: AttributeAction.Exists,
8389e815959Sopenharmony_ci                    name: "baR",
8399e815959Sopenharmony_ci                    type: SelectorType.Attribute,
8409e815959Sopenharmony_ci                    namespace: null,
8419e815959Sopenharmony_ci                    value: "",
8429e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
8439e815959Sopenharmony_ci                },
8449e815959Sopenharmony_ci            ],
8459e815959Sopenharmony_ci        ],
8469e815959Sopenharmony_ci        "Mixed case tag and attribute name",
8479e815959Sopenharmony_ci    ],
8489e815959Sopenharmony_ci
8499e815959Sopenharmony_ci    // Namespaces
8509e815959Sopenharmony_ci    [
8519e815959Sopenharmony_ci        "foo|bar",
8529e815959Sopenharmony_ci        [
8539e815959Sopenharmony_ci            [
8549e815959Sopenharmony_ci                {
8559e815959Sopenharmony_ci                    name: "bar",
8569e815959Sopenharmony_ci                    type: SelectorType.Tag,
8579e815959Sopenharmony_ci                    namespace: "foo",
8589e815959Sopenharmony_ci                },
8599e815959Sopenharmony_ci            ],
8609e815959Sopenharmony_ci        ],
8619e815959Sopenharmony_ci        "basic tag namespace",
8629e815959Sopenharmony_ci    ],
8639e815959Sopenharmony_ci    [
8649e815959Sopenharmony_ci        "*|bar",
8659e815959Sopenharmony_ci        [
8669e815959Sopenharmony_ci            [
8679e815959Sopenharmony_ci                {
8689e815959Sopenharmony_ci                    name: "bar",
8699e815959Sopenharmony_ci                    type: SelectorType.Tag,
8709e815959Sopenharmony_ci                    namespace: "*",
8719e815959Sopenharmony_ci                },
8729e815959Sopenharmony_ci            ],
8739e815959Sopenharmony_ci        ],
8749e815959Sopenharmony_ci        "star tag namespace",
8759e815959Sopenharmony_ci    ],
8769e815959Sopenharmony_ci    [
8779e815959Sopenharmony_ci        "|bar",
8789e815959Sopenharmony_ci        [
8799e815959Sopenharmony_ci            [
8809e815959Sopenharmony_ci                {
8819e815959Sopenharmony_ci                    name: "bar",
8829e815959Sopenharmony_ci                    type: SelectorType.Tag,
8839e815959Sopenharmony_ci                    namespace: "",
8849e815959Sopenharmony_ci                },
8859e815959Sopenharmony_ci            ],
8869e815959Sopenharmony_ci        ],
8879e815959Sopenharmony_ci        "without namespace",
8889e815959Sopenharmony_ci    ],
8899e815959Sopenharmony_ci    [
8909e815959Sopenharmony_ci        "*|*",
8919e815959Sopenharmony_ci        [
8929e815959Sopenharmony_ci            [
8939e815959Sopenharmony_ci                {
8949e815959Sopenharmony_ci                    type: SelectorType.Universal,
8959e815959Sopenharmony_ci                    namespace: "*",
8969e815959Sopenharmony_ci                },
8979e815959Sopenharmony_ci            ],
8989e815959Sopenharmony_ci        ],
8999e815959Sopenharmony_ci        "universal with namespace",
9009e815959Sopenharmony_ci    ],
9019e815959Sopenharmony_ci    [
9029e815959Sopenharmony_ci        "[foo|bar]",
9039e815959Sopenharmony_ci        [
9049e815959Sopenharmony_ci            [
9059e815959Sopenharmony_ci                {
9069e815959Sopenharmony_ci                    action: AttributeAction.Exists,
9079e815959Sopenharmony_ci                    name: "bar",
9089e815959Sopenharmony_ci                    type: SelectorType.Attribute,
9099e815959Sopenharmony_ci                    namespace: "foo",
9109e815959Sopenharmony_ci                    value: "",
9119e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
9129e815959Sopenharmony_ci                },
9139e815959Sopenharmony_ci            ],
9149e815959Sopenharmony_ci        ],
9159e815959Sopenharmony_ci        "basic attribute namespace, existential",
9169e815959Sopenharmony_ci    ],
9179e815959Sopenharmony_ci    [
9189e815959Sopenharmony_ci        "[|bar]",
9199e815959Sopenharmony_ci        [
9209e815959Sopenharmony_ci            [
9219e815959Sopenharmony_ci                {
9229e815959Sopenharmony_ci                    action: AttributeAction.Exists,
9239e815959Sopenharmony_ci                    name: "bar",
9249e815959Sopenharmony_ci                    type: SelectorType.Attribute,
9259e815959Sopenharmony_ci                    namespace: null,
9269e815959Sopenharmony_ci                    value: "",
9279e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.Unknown,
9289e815959Sopenharmony_ci                },
9299e815959Sopenharmony_ci            ],
9309e815959Sopenharmony_ci        ],
9319e815959Sopenharmony_ci        "without namespace, existential",
9329e815959Sopenharmony_ci    ],
9339e815959Sopenharmony_ci    [
9349e815959Sopenharmony_ci        "[foo|bar='baz' i]",
9359e815959Sopenharmony_ci        [
9369e815959Sopenharmony_ci            [
9379e815959Sopenharmony_ci                {
9389e815959Sopenharmony_ci                    action: AttributeAction.Equals,
9399e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.IgnoreCase,
9409e815959Sopenharmony_ci                    name: "bar",
9419e815959Sopenharmony_ci                    type: SelectorType.Attribute,
9429e815959Sopenharmony_ci                    namespace: "foo",
9439e815959Sopenharmony_ci                    value: "baz",
9449e815959Sopenharmony_ci                },
9459e815959Sopenharmony_ci            ],
9469e815959Sopenharmony_ci        ],
9479e815959Sopenharmony_ci        "basic attribute namespace, equality",
9489e815959Sopenharmony_ci    ],
9499e815959Sopenharmony_ci    [
9509e815959Sopenharmony_ci        "[*|bar='baz' i]",
9519e815959Sopenharmony_ci        [
9529e815959Sopenharmony_ci            [
9539e815959Sopenharmony_ci                {
9549e815959Sopenharmony_ci                    action: AttributeAction.Equals,
9559e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.IgnoreCase,
9569e815959Sopenharmony_ci                    name: "bar",
9579e815959Sopenharmony_ci                    type: SelectorType.Attribute,
9589e815959Sopenharmony_ci                    namespace: "*",
9599e815959Sopenharmony_ci                    value: "baz",
9609e815959Sopenharmony_ci                },
9619e815959Sopenharmony_ci            ],
9629e815959Sopenharmony_ci        ],
9639e815959Sopenharmony_ci        "star attribute namespace",
9649e815959Sopenharmony_ci    ],
9659e815959Sopenharmony_ci    [
9669e815959Sopenharmony_ci        "[type='a' S]",
9679e815959Sopenharmony_ci        [
9689e815959Sopenharmony_ci            [
9699e815959Sopenharmony_ci                {
9709e815959Sopenharmony_ci                    action: AttributeAction.Equals,
9719e815959Sopenharmony_ci                    ignoreCase: IgnoreCaseMode.CaseSensitive,
9729e815959Sopenharmony_ci                    name: "type",
9739e815959Sopenharmony_ci                    type: SelectorType.Attribute,
9749e815959Sopenharmony_ci                    value: "a",
9759e815959Sopenharmony_ci                    namespace: null,
9769e815959Sopenharmony_ci                },
9779e815959Sopenharmony_ci            ],
9789e815959Sopenharmony_ci        ],
9799e815959Sopenharmony_ci        "case-sensitive attribute selector",
9809e815959Sopenharmony_ci    ],
9819e815959Sopenharmony_ci    [
9829e815959Sopenharmony_ci        "foo || bar",
9839e815959Sopenharmony_ci        [
9849e815959Sopenharmony_ci            [
9859e815959Sopenharmony_ci                {
9869e815959Sopenharmony_ci                    name: "foo",
9879e815959Sopenharmony_ci                    namespace: null,
9889e815959Sopenharmony_ci                    type: SelectorType.Tag,
9899e815959Sopenharmony_ci                },
9909e815959Sopenharmony_ci                {
9919e815959Sopenharmony_ci                    type: SelectorType.ColumnCombinator,
9929e815959Sopenharmony_ci                },
9939e815959Sopenharmony_ci                {
9949e815959Sopenharmony_ci                    name: "bar",
9959e815959Sopenharmony_ci                    namespace: null,
9969e815959Sopenharmony_ci                    type: SelectorType.Tag,
9979e815959Sopenharmony_ci                },
9989e815959Sopenharmony_ci            ],
9999e815959Sopenharmony_ci        ],
10009e815959Sopenharmony_ci        "column combinator",
10019e815959Sopenharmony_ci    ],
10029e815959Sopenharmony_ci    [
10039e815959Sopenharmony_ci        "foo||bar",
10049e815959Sopenharmony_ci        [
10059e815959Sopenharmony_ci            [
10069e815959Sopenharmony_ci                {
10079e815959Sopenharmony_ci                    name: "foo",
10089e815959Sopenharmony_ci                    namespace: null,
10099e815959Sopenharmony_ci                    type: SelectorType.Tag,
10109e815959Sopenharmony_ci                },
10119e815959Sopenharmony_ci                {
10129e815959Sopenharmony_ci                    type: SelectorType.ColumnCombinator,
10139e815959Sopenharmony_ci                },
10149e815959Sopenharmony_ci                {
10159e815959Sopenharmony_ci                    name: "bar",
10169e815959Sopenharmony_ci                    namespace: null,
10179e815959Sopenharmony_ci                    type: SelectorType.Tag,
10189e815959Sopenharmony_ci                },
10199e815959Sopenharmony_ci            ],
10209e815959Sopenharmony_ci        ],
10219e815959Sopenharmony_ci        "column combinator without whitespace",
10229e815959Sopenharmony_ci    ],
10239e815959Sopenharmony_ci];
1024