19e815959Sopenharmony_ciimport { readFileSync } from "fs";
29e815959Sopenharmony_ciimport { parse } from ".";
39e815959Sopenharmony_ciimport { tests } from "./__fixtures__/tests";
49e815959Sopenharmony_ci
59e815959Sopenharmony_ciconst broken = [
69e815959Sopenharmony_ci    "[",
79e815959Sopenharmony_ci    "(",
89e815959Sopenharmony_ci    "{",
99e815959Sopenharmony_ci    "()",
109e815959Sopenharmony_ci    "<>",
119e815959Sopenharmony_ci    "{}",
129e815959Sopenharmony_ci    ",",
139e815959Sopenharmony_ci    ",a",
149e815959Sopenharmony_ci    "a,",
159e815959Sopenharmony_ci    "[id=012345678901234567890123456789",
169e815959Sopenharmony_ci    "input[name=foo b]",
179e815959Sopenharmony_ci    "input[name!foo]",
189e815959Sopenharmony_ci    "input[name|]",
199e815959Sopenharmony_ci    "input[name=']",
209e815959Sopenharmony_ci    "input[name=foo[baz]]",
219e815959Sopenharmony_ci    ':has("p")',
229e815959Sopenharmony_ci    ":has(p",
239e815959Sopenharmony_ci    ":foo(p()",
249e815959Sopenharmony_ci    "#",
259e815959Sopenharmony_ci    "##foo",
269e815959Sopenharmony_ci    "/*",
279e815959Sopenharmony_ci];
289e815959Sopenharmony_ci
299e815959Sopenharmony_cidescribe("Parse", () => {
309e815959Sopenharmony_ci    describe("Own tests", () => {
319e815959Sopenharmony_ci        for (const [selector, expected, message] of tests) {
329e815959Sopenharmony_ci            test(message, () =>
339e815959Sopenharmony_ci                expect(parse(selector)).toStrictEqual(expected)
349e815959Sopenharmony_ci            );
359e815959Sopenharmony_ci        }
369e815959Sopenharmony_ci    });
379e815959Sopenharmony_ci
389e815959Sopenharmony_ci    describe("Collected selectors (qwery, sizzle, nwmatcher)", () => {
399e815959Sopenharmony_ci        const out = JSON.parse(
409e815959Sopenharmony_ci            readFileSync(`${__dirname}/__fixtures__/out.json`, "utf8")
419e815959Sopenharmony_ci        );
429e815959Sopenharmony_ci        for (const s of Object.keys(out)) {
439e815959Sopenharmony_ci            test(s, () => {
449e815959Sopenharmony_ci                expect(parse(s)).toStrictEqual(out[s]);
459e815959Sopenharmony_ci            });
469e815959Sopenharmony_ci        }
479e815959Sopenharmony_ci    });
489e815959Sopenharmony_ci
499e815959Sopenharmony_ci    describe("Broken selectors", () => {
509e815959Sopenharmony_ci        for (const selector of broken) {
519e815959Sopenharmony_ci            it(`should not parse — ${selector}`, () => {
529e815959Sopenharmony_ci                expect(() => parse(selector)).toThrow(Error);
539e815959Sopenharmony_ci            });
549e815959Sopenharmony_ci        }
559e815959Sopenharmony_ci    });
569e815959Sopenharmony_ci
579e815959Sopenharmony_ci    it("should ignore comments", () => {
589e815959Sopenharmony_ci        expect(parse("/* comment1 */ /**/ foo /*comment2*/")).toEqual([
599e815959Sopenharmony_ci            [{ name: "foo", namespace: null, type: "tag" }],
609e815959Sopenharmony_ci        ]);
619e815959Sopenharmony_ci
629e815959Sopenharmony_ci        expect(() => parse("/*/")).toThrowError("Comment was not terminated");
639e815959Sopenharmony_ci    });
649e815959Sopenharmony_ci});
65