shout/src/match.test.ts

72 lines
1.9 KiB
TypeScript

import { describe, expect, test } from "bun:test"
import { matchLine, matchOutput } from "./match.ts"
describe("matchLine", () => {
test("exact match", () => {
expect(matchLine("hello", "hello")).toBe(true)
})
test("exact mismatch", () => {
expect(matchLine("hello", "world")).toBe(false)
})
test("inline wildcard", () => {
expect(matchLine("draft 1 (v...)", "draft 1 (v2)")).toBe(true)
expect(matchLine("draft 1 (v...)", "draft 1 (v123)")).toBe(true)
})
test("wildcard at start", () => {
expect(matchLine("...world", "hello world")).toBe(true)
})
test("wildcard at end", () => {
expect(matchLine("hello...", "hello world")).toBe(true)
})
test("multiple inline wildcards", () => {
expect(matchLine("a...b...c", "aXXbYYc")).toBe(true)
})
})
describe("matchOutput", () => {
test("exact match", () => {
expect(matchOutput(["hello"], ["hello"])).toBe(true)
})
test("mismatch", () => {
expect(matchOutput(["hello"], ["world"])).toBe(false)
})
test("multiline wildcard matches zero lines", () => {
expect(matchOutput(["...", "end"], ["end"])).toBe(true)
})
test("multiline wildcard matches multiple lines", () => {
expect(matchOutput(["...", "end"], ["a", "b", "end"])).toBe(true)
})
test("multiline wildcard at end", () => {
expect(matchOutput(["start", "..."], ["start", "a", "b"])).toBe(true)
})
test("multiline wildcard in middle", () => {
expect(
matchOutput(["first", "...", "last"], ["first", "a", "b", "last"]),
).toBe(true)
})
test("empty expected matches empty actual", () => {
expect(matchOutput([], [])).toBe(true)
})
test("empty expected does not match non-empty actual", () => {
expect(matchOutput([], ["something"])).toBe(false)
})
test("multiline wildcard alone matches anything", () => {
expect(matchOutput(["..."], ["a", "b", "c"])).toBe(true)
expect(matchOutput(["..."], [])).toBe(true)
})
})