|
| 1 | +import { StaticVersion, VersionSpec } from "../src/version"; |
| 2 | + |
| 3 | +describe("StaticVersion", () => { |
| 4 | + describe("constructor", () => { |
| 5 | + test("new instance", () => { |
| 6 | + const version = new StaticVersion({ |
| 7 | + major: 119, |
| 8 | + minor: 0, |
| 9 | + build: 6045, |
| 10 | + patch: 123, |
| 11 | + }); |
| 12 | + |
| 13 | + expect(version.major).toBe(119); |
| 14 | + expect(version.minor).toBe(0); |
| 15 | + expect(version.build).toBe(6045); |
| 16 | + expect(version.patch).toBe(123); |
| 17 | + }); |
| 18 | + |
| 19 | + test("parse", () => { |
| 20 | + const version = new StaticVersion("119.0.6045.123"); |
| 21 | + |
| 22 | + expect([ |
| 23 | + version.major, |
| 24 | + version.minor, |
| 25 | + version.build, |
| 26 | + version.patch, |
| 27 | + ]).toEqual([119, 0, 6045, 123]); |
| 28 | + }); |
| 29 | + |
| 30 | + test.each([ |
| 31 | + ["119.0.6045.123.456"], |
| 32 | + ["119.0.6045.-123"], |
| 33 | + ["119.0.6045.beta"], |
| 34 | + ["119.0.6045"], |
| 35 | + ])("throw an error for %s", (version) => { |
| 36 | + expect(() => new StaticVersion(version)).toThrow( |
| 37 | + `Invalid version: ${version}`, |
| 38 | + ); |
| 39 | + }); |
| 40 | + }); |
| 41 | + |
| 42 | + describe("compare", () => { |
| 43 | + test.each` |
| 44 | + a | b | equals | greaterThan | lessThan | greaterThanOrEqual | lessThanOrEqual |
| 45 | + ${"119.0.6045.123"} | ${"119.0.6045.123"} | ${true} | ${false} | ${false} | ${true} | ${true} |
| 46 | + ${"119.0.6045.123"} | ${"119.0.6045.100"} | ${false} | ${true} | ${false} | ${false} | ${true} |
| 47 | + ${"119.0.6045.123"} | ${"119.0.6045.200"} | ${false} | ${false} | ${true} | ${false} | ${true} |
| 48 | + ${"119.0.6045.123"} | ${"119.0.7000.100"} | ${false} | ${false} | ${true} | ${false} | ${true} |
| 49 | + ${"119.0.6045.123"} | ${"119.0.5000.100"} | ${false} | ${true} | ${false} | ${false} | ${true} |
| 50 | + ${"119.0.6045.123"} | ${"119.1.6045.100"} | ${false} | ${false} | ${true} | ${false} | ${true} |
| 51 | + ${"119.0.6045.123"} | ${"120.0.6045.100"} | ${false} | ${false} | ${true} | ${false} | ${true} |
| 52 | + ${"119.0.6045.123"} | ${"118.0.6045.100"} | ${false} | ${true} | ${false} | ${false} | ${true} |
| 53 | + ${"119.0.6045.123"} | ${"119.0.6045.122"} | ${false} | ${true} | ${false} | ${false} | ${true} |
| 54 | + `('compare "$a" and "$b"', ({ a, b, equals, greaterThan, lessThan }) => { |
| 55 | + const v1 = new StaticVersion(a); |
| 56 | + const v2 = new StaticVersion(b); |
| 57 | + expect(v1.equals(v2)).toBe(equals); |
| 58 | + expect(v1.greaterThan(v2)).toBe(greaterThan); |
| 59 | + expect(v1.lessThan(v2)).toBe(lessThan); |
| 60 | + expect(v1.greaterThanOrEqual(v2)).toBe(greaterThan || equals); |
| 61 | + expect(v1.lessThanOrEqual(v2)).toBe(lessThan || equals); |
| 62 | + }); |
| 63 | + }); |
| 64 | + |
| 65 | + describe("toString", () => { |
| 66 | + test("return stringified version", () => { |
| 67 | + const v = new StaticVersion("119.0.6045.123"); |
| 68 | + expect(v.toString()).toBe("119.0.6045.123"); |
| 69 | + }); |
| 70 | + }); |
| 71 | +}); |
| 72 | + |
| 73 | +describe("VersionSpec", () => { |
| 74 | + describe("constructor", () => { |
| 75 | + test("new instance", () => { |
| 76 | + const version = new VersionSpec({ |
| 77 | + major: 119, |
| 78 | + minor: 0, |
| 79 | + build: 6045, |
| 80 | + patch: 123, |
| 81 | + }); |
| 82 | + |
| 83 | + expect(version.major).toBe(119); |
| 84 | + expect(version.minor).toBe(0); |
| 85 | + expect(version.build).toBe(6045); |
| 86 | + expect(version.patch).toBe(123); |
| 87 | + }); |
| 88 | + |
| 89 | + test.each([ |
| 90 | + ["119.0.6045.123", [119, 0, 6045, 123]], |
| 91 | + ["119.0.6045", [119, 0, 6045]], |
| 92 | + ["119.0", [119, 0]], |
| 93 | + ["119", [119]], |
| 94 | + ["119.0.6045.x", [119, 0, 6045]], |
| 95 | + ["119.0.x", [119, 0]], |
| 96 | + ["119.x", [119]], |
| 97 | + ])("parse %s", (version, expected) => { |
| 98 | + const v = new VersionSpec(version); |
| 99 | + expect([v.major, v.minor, v.build, v.patch]).toEqual(expected); |
| 100 | + }); |
| 101 | + |
| 102 | + test.each([ |
| 103 | + ["119.0.6045.beta"], |
| 104 | + ["119.0.x.123"], |
| 105 | + ["x"], |
| 106 | + ["119.0.6045.123.456"], |
| 107 | + ["119.0.6045.-123"], |
| 108 | + [""], |
| 109 | + ])("throw an error for %s", (version) => { |
| 110 | + expect(() => new VersionSpec(version)).toThrow( |
| 111 | + `Invalid version: ${version}`, |
| 112 | + ); |
| 113 | + }); |
| 114 | + }); |
| 115 | + |
| 116 | + describe("toString", () => { |
| 117 | + test.each([ |
| 118 | + ["119.0.6045.123", "119.0.6045.123"], |
| 119 | + ["119", "119"], |
| 120 | + ])("return %s for %s", (expected, version) => { |
| 121 | + const v = new VersionSpec(version); |
| 122 | + expect(v.toString()).toBe(expected); |
| 123 | + }); |
| 124 | + }); |
| 125 | + |
| 126 | + describe("satisfies", () => { |
| 127 | + test.each` |
| 128 | + spec | version | satisfies |
| 129 | + ${"119.0.6045.123"} | ${"119.0.6045.123"} | ${true} |
| 130 | + ${"119.0.6045"} | ${"119.0.6045.123"} | ${true} |
| 131 | + ${"119"} | ${"119.0.6045.123"} | ${true} |
| 132 | + ${"119.0.6045.123"} | ${"119.0.6045.100"} | ${false} |
| 133 | + ${"119.0.6000"} | ${"119.0.6045.100"} | ${false} |
| 134 | + ${"120"} | ${"119.0.6045.100"} | ${false} |
| 135 | + `("return if $spec satisfies $version", ({ spec, version, satisfies }) => { |
| 136 | + const s = new VersionSpec(spec); |
| 137 | + const v = new StaticVersion(version); |
| 138 | + expect(s.satisfies(v)).toBe(satisfies); |
| 139 | + }); |
| 140 | + }); |
| 141 | +}); |
0 commit comments