Files
wehub-resource-sync e904b667c6
Build/Publish Develop Docs / deploy (push) Failing after 1s
PaddleOCR Code Style Check / check-code-style (push) Failing after 1s
PaddleOCR PR Tests GPU / detect-changes (push) Failing after 1s
PaddleOCR PR Tests / detect-changes (push) Failing after 1s
PaddleOCR PR Tests GPU / test-pr-gpu (push) Has been cancelled
PaddleOCR PR Tests / test-pr (push) Has been cancelled
PaddleOCR PR Tests GPU / test-pr-gpu-impl (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.13) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.8) (push) Has been cancelled
PaddleOCR PR Tests / test-pr-python (3.9) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:59:26 +08:00

102 lines
2.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
normalizeModelAsset,
normalizeAssets,
getModelEntryPath,
assertModelResourceSlot,
assertModelResources
} from "../src/resources/model-asset";
describe("model asset normalization", () => {
it("resolves built-in model asset references", () => {
const assets = normalizeAssets({
det: "PP-OCRv5_mobile_det",
rec: "PP-OCRv5_mobile_rec"
});
expect(assets.det.url).toMatch(/\.tar$/);
});
it("resolves PP-OCRv6 tiny and small model asset references", () => {
const tiny = normalizeAssets({
det: "PP-OCRv6_tiny_det",
rec: "PP-OCRv6_tiny_rec"
});
expect(tiny.det.url).toMatch(/PP-OCRv6_tiny_det_onnx_infer\.tar$/);
expect(tiny.rec.url).toMatch(/PP-OCRv6_tiny_rec_onnx_infer\.tar$/);
const small = normalizeAssets({
det: "PP-OCRv6_small_det",
rec: "PP-OCRv6_small_rec"
});
expect(small.det.url).toMatch(/PP-OCRv6_small_det_onnx_infer\.tar$/);
expect(small.rec.url).toMatch(/PP-OCRv6_small_rec_onnx_infer\.tar$/);
});
it("normalizes a single model asset directly", () => {
const asset = normalizeModelAsset("det", {
url: "/det.tar"
});
expect(asset.url).toBe("/det.tar");
});
it("rejects invalid assets", () => {
expect(() =>
normalizeAssets({
encoder: {}
})
).toThrow(/must define url/i);
});
it("rejects non-object asset descriptors", () => {
expect(() => normalizeModelAsset("det", null)).toThrow(/must be an object/i);
});
it("rejects unknown model asset references", () => {
expect(() =>
normalizeAssets({
det: "missing_model"
})
).toThrow(/unknown model asset/i);
});
});
describe("model resource validation", () => {
it("provides standard entry names", () => {
expect(getModelEntryPath("model")).toBe("inference.onnx");
expect(getModelEntryPath("config")).toBe("inference.yml");
expect(getModelEntryPath("other")).toBe(null);
});
it("rejects missing model binary resources", () => {
expect(() => assertModelResourceSlot("Detection", "model", new Uint8Array())).toThrow(
/inference\.onnx/i
);
});
it("rejects missing model config resources", () => {
expect(() => assertModelResourceSlot("Recognition", "config", "")).toThrow(/inference\.yml/i);
});
it("supports validating multiple model resources together", () => {
expect(() =>
assertModelResources("Detection", {
model: new Uint8Array([1]),
config: "Global:\n model_name: det"
})
).not.toThrow();
});
it("rejects unsupported model resource slots", () => {
expect(() => assertModelResourceSlot("Detection", "labels", "abc")).toThrow(
/Unsupported model resource slot/i
);
expect(() =>
assertModelResources("Detection", {
labels: "abc"
})
).toThrow(/Unsupported model resource slot/i);
});
});