git.dumitru.net fructose / master src / tests / parser / base / regex.test.ts
master

Tree @master (Download .tar.gz)

regex.test.ts @masterraw · history · blame

import ParserError from "../../../parser/ParserError";
import { regex } from "../../../parser/Parsers";
import { doc, loc, val } from "../../utils";

describe("base regex parser", () => {
  const p0 = regex(/^a+b/);

  test("has a descriptive name", () => {
    expect(p0.name).toEqual("/^a+b/");
  });

  test("parses matching input", () => {
    expect(
      p0.parse(doc("aaab"), loc(0, 0)))
    .toEqual(
      val("aaab", loc(0, 4)));
  });

  test("returns an error in case of invalid input", () => {
    const attempt = p0.parse(doc("baaa"), loc(0, 0));
    expect(attempt).toBeInstanceOf(ParserError);
  });

  test("does not advance input on error", () => {
    const attempt = p0.parse(doc("baaa"), loc(0, 0));
    expect(attempt).toHaveProperty("location", loc(0, 0));
  });
});