Snapshot differential tests (known deviations registered, current state passes): - title/path recognition: 216 samples vs MP MetaInfo/MetaInfoPath - filter rules: 42 rules x 28 torrents vs MP FilterModule - RSS/indexer parsing: 15 feeds, 72 indexer samples - zhconv: 69 samples Generator: scripts/mp-sync/gen-differential.py; report: docs/porting/mp-rust-logic-parity.md Co-Authored-By: Claude Opus 5.5 <[email protected]>
36 lines
1.5 KiB
TypeScript
36 lines
1.5 KiB
TypeScript
/**
|
|
* 标题识别差分测试:MP MetaInfo/MetaInfoPath(Python 参考实现)vs parseRelease/parseReleasePath。
|
|
* 期望输出由 `scripts/mp-sync/gen-differential.py meta` 生成(meta-mp.json),已知差异登记在 meta-deviations.json。
|
|
* 断言:实际差异集合 == 登记集合,且规范形取值与快照一致。补迁某条后测试会失败,提示删除对应登记。
|
|
*/
|
|
import { describe, expect, it } from "vitest";
|
|
import { diffSample, loadMeta } from "./meta-map.ts";
|
|
|
|
const { samples, mp, deviations } = loadMeta();
|
|
|
|
describe("标题识别差分(MP MetaInfo ↔ parseRelease)", () => {
|
|
it("样本 ≥ 150 且每条都有 MP 输出", () => {
|
|
expect(samples.length).toBeGreaterThanOrEqual(150);
|
|
for (const s of samples) {
|
|
expect(mp.python[s.id], s.id).toBeDefined();
|
|
expect(mp.python[s.id]?.error, s.id).toBeUndefined();
|
|
}
|
|
});
|
|
|
|
it("登记项都对应存在的样本", () => {
|
|
const ids = new Set(samples.map((s) => s.id));
|
|
for (const id of Object.keys(deviations)) expect(ids.has(id), id).toBe(true);
|
|
});
|
|
|
|
for (const s of samples) {
|
|
it(`${s.id} ${s.input}`, () => {
|
|
const actual = diffSample(s, mp.python[s.id]!);
|
|
const registered = deviations[s.id] ?? {};
|
|
const snapshot = Object.fromEntries(
|
|
Object.entries(registered).map(([f, d]) => [f, { mp: d!.mp, ours: d!.ours }]),
|
|
);
|
|
expect(actual, `${s.id} 差异与 meta-deviations.json 登记不一致`).toEqual(snapshot);
|
|
});
|
|
}
|
|
});
|