clarity-pattern-parser
Version:
Parsing Library for Typescript and Javascript.
62 lines (51 loc) • 2.04 kB
text/typescript
import { Cursor } from "./Cursor";
import { Literal } from "./Literal";
import { Options } from "./Options";
import { TakeUntil } from "./TakeUntil";
describe("TakeUntil", () => {
test("Take With No End", () => {
const takeUntilScript = new TakeUntil(
"script-content",
new Literal("close-script-tag", "</script")
);
const result = takeUntilScript.exec("function(){}");
expect(result.ast?.value).toBe("function(){}");
});
test("Take Until Terminating Match", () => {
const takeUntilScript = new TakeUntil(
"script-content",
new Literal("close-script-tag", "</script")
);
const cursor = new Cursor("function(){}function(){}</script");
const result = takeUntilScript.parse(cursor);
expect(result?.value).toBe("function(){}function(){}");
expect(cursor.index).toBe(23);
});
test("Take Until Terminating Complex Match", () => {
const takeUntilScript = new TakeUntil(
"script-content",
new Options("end-tags", [
new Literal("close-script-tag", "</script"),
new Literal("close-style-tag", "</style")
])
);
let cursor = new Cursor("function(){}function(){}</script");
let result = takeUntilScript.parse(cursor);
expect(result?.value).toBe("function(){}function(){}");
expect(cursor.index).toBe(23);
cursor = new Cursor("function(){}function(){}</style");
result = takeUntilScript.parse(cursor);
expect(result?.value).toBe("function(){}function(){}");
expect(cursor.index).toBe(23);
});
test("Error", () => {
const takeUntilScript = new TakeUntil(
"script-content",
new Literal("close-script-tag", "</script")
);
const cursor = new Cursor("</script");
const result = takeUntilScript.parse(cursor);
expect(result).toBeNull();
expect(cursor.index).toBe(0);
});
});