69 lines
2.1 KiB
TypeScript
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();
|
|
});
|
|
});
|