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