Files
UHD_Media_Tool/packages/domain/test/differential/meta.test.ts
T
rootandClaude Opus 5.5 591cc78c7d test(porting): differential tests against MoviePilot Rust-accelerated parsers
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]>
2026-09-27 22:44:11 +08:00

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