git.dumitru.net fructose / master src / tests / parser / combinators / zeroOrMore.test.ts
master

Tree @master (Download .tar.gz)

zeroOrMore.test.ts @masterraw · history · blame

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)));
  });
});