1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
import * as CSSselect from "../src";
import { parseDOM } from "htmlparser2";
import type { Element } from "domhandler";
const dom = parseDOM(
"<div><p>In the end, it doesn't really Matter.</p><div>Indeed-that's a delicate matter.</div>"
) as Element[];
describe("icontains", () => {
describe("ignore case", () => {
it("should match full string", () => {
let matches = CSSselect.selectAll(
":icontains(indeed-that's a delicate matter.)",
dom
);
expect(matches).toHaveLength(2);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[1],
] as Element[]);
matches = CSSselect.selectAll(
":icontains(inDeeD-THAT's a DELICATE matteR.)",
dom
);
expect(matches).toHaveLength(2);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[1],
] as Element[]);
});
it("should match substring", () => {
let matches = CSSselect.selectAll(":icontains(indeed)", dom);
expect(matches).toHaveLength(2);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[1],
] as Element[]);
matches = CSSselect.selectAll(":icontains(inDeeD)", dom);
expect(matches).toHaveLength(2);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[1],
] as Element[]);
});
it("should match specific element", () => {
let matches = CSSselect.selectAll("p:icontains(matter)", dom);
expect(matches).toHaveLength(1);
expect(matches).toStrictEqual([dom[0].children[0] as Element]);
matches = CSSselect.selectAll("p:icontains(mATter)", dom);
expect(matches).toHaveLength(1);
expect(matches).toStrictEqual([dom[0].children[0] as Element]);
});
it("should match multiple elements", () => {
let matches = CSSselect.selectAll(":icontains(matter)", dom);
expect(matches).toHaveLength(3);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[0],
dom[0].children[1],
] as Element[]);
matches = CSSselect.selectAll(":icontains(mATter)", dom);
expect(matches).toHaveLength(3);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[0],
dom[0].children[1],
] as Element[]);
});
it("should match empty string", () => {
const matches = CSSselect.selectAll(":icontains()", dom);
expect(matches).toHaveLength(3);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[0],
dom[0].children[1],
] as Element[]);
});
it("should match quoted string", () => {
let matches = CSSselect.selectAll(":icontains('')", dom);
expect(matches).toHaveLength(3);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[0],
dom[0].children[1],
] as Element[]);
matches = CSSselect.selectAll("p:icontains('matter')", dom);
expect(matches).toHaveLength(1);
expect(matches).toStrictEqual([dom[0].children[0] as Element]);
matches = CSSselect.selectAll('p:icontains("matter")', dom);
expect(matches).toHaveLength(1);
expect(matches).toStrictEqual([dom[0].children[0] as Element]);
});
it("should match whitespace", () => {
let matches = CSSselect.selectAll(":icontains( matter)", dom);
expect(matches).toHaveLength(3);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[0],
dom[0].children[1],
] as Element[]);
matches = CSSselect.selectAll(":icontains( mATter)", dom);
expect(matches).toHaveLength(3);
expect(matches).toStrictEqual([
dom[0],
dom[0].children[0],
dom[0].children[1],
] as Element[]);
});
});
describe("no matches", () => {
it("should not match", () => {
const matches = CSSselect.selectAll("p:icontains(indeed)", dom);
expect(matches).toHaveLength(0);
});
});
});
|