import { matchChar, zeroOrMore } from "../../../parser/Parsers";
import { doc, loc, val } from "../../utils";
describe("zeroOrMore combinator", () => {
const p0 = zeroOrMore(() => matchChar("a"));
test("has a descriptive name", () => {
expect(p0.name).toEqual("(\"a\")*");
});
test("parses zero items", () => {
expect(
p0.parse(doc(""), loc(0, 0)))
.toEqual(
val([], loc(0, 0)));
});
test("returns an empty list in case of no match", () => {
expect(
p0.parse(doc("b"), loc(0, 0)))
.toEqual(
val([], loc(0, 0)));
});
test("parses one item", () => {
expect(
p0.parse(doc("a"), loc(0, 0)))
.toEqual(
val(["a"], loc(0, 1)));
});
test("parses multiple items", () => {
expect(
p0.parse(doc("aaa"), loc(0, 0)))
.toEqual(
val(["a", "a", "a"], loc(0, 3)));
});
});