internal/deps/version_test.go
72 lines · 1840 bytes
1package deps
2
3import "testing"
4
5func TestNewer(t *testing.T) {
6 cases := []struct {
7 current, latest string
8 want bool
9 }{
10 {"v1.2.3", "v1.3.0", true},
11 {"v1.2.3", "v1.2.3", false},
12 {"v1.3.0", "v1.2.3", false},
13 {"1.2", "1.2.1", true},
14 {"1.2.1", "1.2", false},
15 {"0.9", "1.0", true},
16 {"1.9.0", "1.10.0", true}, // numeric, not lexical
17 {"2.0.0-rc1", "2.0.0", true},
18 {"2.0.0", "2.0.0-rc1", false},
19 {"1.2.3", "1.2.3.post1", true},
20 {"1.2.3.post1", "1.2.3", false},
21 {"2.0b1", "2.0", true},
22 // A pseudo-version is behind any tagged release.
23 {"v0.0.0-20230129092748-24d4a6f8daec", "v1.0.0", true},
24 // Unreadable input reports nothing rather than guessing.
25 {"", "1.0.0", false},
26 {"1.0.0", "", false},
27 {"main", "1.0.0", false},
28 }
29 for _, c := range cases {
30 if got := Newer(c.current, c.latest); got != c.want {
31 t.Errorf("Newer(%q, %q) = %v, want %v", c.current, c.latest, got, c.want)
32 }
33 }
34}
35
36func TestIsPrerelease(t *testing.T) {
37 for _, v := range []string{"2.0.0-rc1", "1.0.0-beta.2", "2.0b1", "1.0.0-alpha"} {
38 if !IsPrerelease(v) {
39 t.Errorf("IsPrerelease(%q) = false", v)
40 }
41 }
42 for _, v := range []string{"1.2.3", "v1.2.3", "1.2.3.post1", "10.0"} {
43 if IsPrerelease(v) {
44 t.Errorf("IsPrerelease(%q) = true", v)
45 }
46 }
47}
48
49func TestPin(t *testing.T) {
50 cases := map[string]string{
51 "1.2.3": "1.2.3",
52 "^1.2.3": "1.2.3",
53 "~1.2": "1.2",
54 ">=2.0.0": "2.0.0",
55 "==1.4.2": "1.4.2",
56 "v1.2.3": "1.2.3",
57 "1.2.3-rc1": "1.2.3-rc1",
58 "*": "",
59 ">=2,<3": "",
60 "1.x": "",
61 "^1.0 || ^2.0": "",
62 "workspace:*": "",
63 "npm:foo@1.0": "",
64 "file:../lib": "",
65 "": "",
66 }
67 for spec, want := range cases {
68 if got := pin(spec); got != want {
69 t.Errorf("pin(%q) = %q, want %q", spec, got, want)
70 }
71 }
72}