version.test.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233
  1. import { describe, expect, test } from "vitest";
  2. import { compareVersions, isVersionEqual, isVersionGreater, isVersionLess } from "@/lib/version";
  3. describe("版本比较", () => {
  4. test("应正确判断是否存在可升级版本(latest > current)", () => {
  5. expect(compareVersions("v0.3.0", "v0.3.33")).toBe(1);
  6. expect(compareVersions("v0.3.33", "v0.3.0")).toBe(-1);
  7. expect(compareVersions("v0.3.33", "v0.3.33")).toBe(0);
  8. });
  9. test("应正确处理预发布版本(stable > prerelease)", () => {
  10. expect(compareVersions("v1.2.3-beta.1", "v1.2.3")).toBe(1);
  11. expect(compareVersions("v1.2.3", "v1.2.3-beta.1")).toBe(-1);
  12. });
  13. test("应正确比较预发布标识(alpha < beta, alpha.1 < alpha.2)", () => {
  14. expect(compareVersions("v1.2.3-alpha", "v1.2.3-beta")).toBe(1);
  15. expect(compareVersions("v1.2.3-alpha.1", "v1.2.3-alpha.2")).toBe(1);
  16. expect(compareVersions("v1.2.3-alpha.2", "v1.2.3-alpha.10")).toBe(1);
  17. });
  18. test("应忽略构建元数据(+build)", () => {
  19. expect(compareVersions("v1.2.3+build.1", "v1.2.3+build.2")).toBe(0);
  20. expect(compareVersions("v1.2.3+build.2", "v1.2.3+build.1")).toBe(0);
  21. });
  22. test("无法解析的版本应 Fail Open(视为相等)", () => {
  23. expect(compareVersions("dev", "v1.0.0")).toBe(0);
  24. expect(isVersionLess("dev", "v1.0.0")).toBe(false);
  25. expect(isVersionGreater("dev", "v1.0.0")).toBe(false);
  26. expect(isVersionEqual("dev", "v1.0.0")).toBe(true);
  27. });
  28. });