internal/deps/version_test.go

3bcdce33fb9a2309312854331359d376171c7368
gitbay/internal/deps/version_test.go history · blame · raw

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}