ModReleaser/src/lib/utils/existingVersion.test.ts
2026-07-18 10:04:16 +08:00

69 lines
2.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { Template } from "./template";
import { compareParsed, parseExisting } from "./existingVersion";
describe("parseExisting", () => {
it("从 version_number 模板反向解析 version 和 mc_version", () => {
const tmpl = new Template("${version}-mc${mc_version}");
expect(parseExisting(tmpl, "1.2.3-mc1.21")).toEqual({
version: "1.2.3",
mc_version: "1.21",
});
});
it("从 filename_format 模板反向解析(含字面量前缀)", () => {
const tmpl = new Template("modname-${version}-mc${mc_version}.jar");
expect(parseExisting(tmpl, "modname-0.9.0-mc1.20.1.jar")).toEqual({
version: "0.9.0",
mc_version: "1.20.1",
});
});
it("不匹配模板时返回 null", () => {
const tmpl = new Template("${version}-mc${mc_version}");
expect(parseExisting(tmpl, "random-string")).toEqual({
version: null,
mc_version: null,
});
});
it("捕获段不是合法 SemVer 时返回 null", () => {
const tmpl = new Template("${version}-mc${mc_version}");
expect(parseExisting(tmpl, "abc-mc1.21")).toEqual({
version: null,
mc_version: null,
});
});
});
describe("compareParsed", () => {
const p = (version: string | null, mc_version: string | null = null) => ({
version,
mc_version,
});
it("mod_version 降序优先", () => {
const list = [p("1.0.0"), p("1.2.0"), p("0.9.0")];
list.sort(compareParsed);
expect(list.map((x) => x.version)).toEqual(["1.2.0", "1.0.0", "0.9.0"]);
});
it("同 mod_version 时 mc_version 降序", () => {
const list = [
p("1.0.0", "1.20"),
p("1.0.0", "1.21"),
p("1.0.0", "1.19.4"),
];
list.sort(compareParsed);
expect(list.map((x) => x.mc_version)).toEqual(["1.21", "1.20", "1.19.4"]);
});
it("无法解析的排最后", () => {
const list = [p(null), p("1.0.0", "1.21"), p("0.9.0", "1.20")];
list.sort(compareParsed);
expect(list[0]!.version).toBe("1.0.0");
expect(list[1]!.version).toBe("0.9.0");
expect(list[2]!.version).toBeNull();
});
});