29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { searchChapters, splitHighlight } from "../src/lib/search";
|
|
import { splitChapters } from "../src/lib/chapters";
|
|
|
|
const TEXT = ["第一章 起风", "风来了又走。", "第二章 落雨", "雨点敲窗,风声相伴。", "风止"].join("\n");
|
|
|
|
describe("searchChapters", () => {
|
|
const chs = splitChapters(TEXT);
|
|
it("finds case-insensitive hits with chapter index and position", () => {
|
|
const hits = searchChapters(TEXT, chs, "风");
|
|
expect(hits.length).toBeGreaterThanOrEqual(3);
|
|
expect(hits[0].ch).toBe(0);
|
|
expect(hits.every((h) => h.snippet.includes("风"))).toBe(true);
|
|
});
|
|
it("returns empty for no match / empty query", () => {
|
|
expect(searchChapters(TEXT, chs, "不存在")).toEqual([]);
|
|
expect(searchChapters(TEXT, chs, " ")).toEqual([]);
|
|
});
|
|
it("caps at limit", () => {
|
|
expect(searchChapters(TEXT, chs, "风", 2)).toHaveLength(2);
|
|
});
|
|
});
|
|
|
|
describe("splitHighlight", () => {
|
|
it("splits snippet into before/match/after", () => {
|
|
expect(splitHighlight("abc风def", 3, 1)).toEqual({ before: "abc", match: "风", after: "def" });
|
|
});
|
|
});
|