1
2
3
4
5 package module
6
7 import (
8 "testing"
9 "time"
10 )
11
12 var pseudoTests = []struct {
13 major string
14 older string
15 version string
16 }{
17 {"", "", "v0.0.0-20060102150405-hash"},
18 {"v0", "", "v0.0.0-20060102150405-hash"},
19 {"v1", "", "v1.0.0-20060102150405-hash"},
20 {"v2", "", "v2.0.0-20060102150405-hash"},
21 {"unused", "v0.0.0", "v0.0.1-0.20060102150405-hash"},
22 {"unused", "v1.2.3", "v1.2.4-0.20060102150405-hash"},
23 {"unused", "v1.2.99999999999999999", "v1.2.100000000000000000-0.20060102150405-hash"},
24 {"unused", "v1.2.3-pre", "v1.2.3-pre.0.20060102150405-hash"},
25 {"unused", "v1.3.0-pre", "v1.3.0-pre.0.20060102150405-hash"},
26 {"unused", "v0.0.0--", "v0.0.0--.0.20060102150405-hash"},
27 {"unused", "v1.0.0+metadata", "v1.0.1-0.20060102150405-hash+metadata"},
28 {"unused", "v2.0.0+incompatible", "v2.0.1-0.20060102150405-hash+incompatible"},
29 {"unused", "v2.3.0-pre+incompatible", "v2.3.0-pre.0.20060102150405-hash+incompatible"},
30 }
31
32 var pseudoTime = time.Date(2006, 1, 2, 15, 4, 5, 0, time.UTC)
33
34 func TestPseudoVersion(t *testing.T) {
35 for _, tt := range pseudoTests {
36 v := PseudoVersion(tt.major, tt.older, pseudoTime, "hash")
37 if v != tt.version {
38 t.Errorf("PseudoVersion(%q, %q, ...) = %v, want %v", tt.major, tt.older, v, tt.version)
39 }
40 }
41 }
42
43 func TestIsPseudoVersion(t *testing.T) {
44 for _, tt := range pseudoTests {
45 if !IsPseudoVersion(tt.version) {
46 t.Errorf("IsPseudoVersion(%q) = false, want true", tt.version)
47 }
48 if IsPseudoVersion(tt.older) {
49 t.Errorf("IsPseudoVersion(%q) = true, want false", tt.older)
50 }
51 }
52 }
53
54 func TestPseudoVersionTime(t *testing.T) {
55 for _, tt := range pseudoTests {
56 tm, err := PseudoVersionTime(tt.version)
57 if tm != pseudoTime || err != nil {
58 t.Errorf("PseudoVersionTime(%q) = %v, %v, want %v, nil", tt.version, tm.Format(time.RFC3339), err, pseudoTime.Format(time.RFC3339))
59 }
60 tm, err = PseudoVersionTime(tt.older)
61 if tm != (time.Time{}) || err == nil {
62 t.Errorf("PseudoVersionTime(%q) = %v, %v, want %v, error", tt.older, tm.Format(time.RFC3339), err, time.Time{}.Format(time.RFC3339))
63 }
64 }
65 }
66
67 func TestInvalidPseudoVersionTime(t *testing.T) {
68 const v = "---"
69 if _, err := PseudoVersionTime(v); err == nil {
70 t.Error("expected error, got nil instead")
71 }
72 }
73
74 func TestPseudoVersionRev(t *testing.T) {
75 for _, tt := range pseudoTests {
76 rev, err := PseudoVersionRev(tt.version)
77 if rev != "hash" || err != nil {
78 t.Errorf("PseudoVersionRev(%q) = %q, %v, want %q, nil", tt.older, rev, err, "hash")
79 }
80 rev, err = PseudoVersionRev(tt.older)
81 if rev != "" || err == nil {
82 t.Errorf("PseudoVersionRev(%q) = %q, %v, want %q, error", tt.older, rev, err, "")
83 }
84 }
85 }
86
87 func TestPseudoVersionBase(t *testing.T) {
88 for _, tt := range pseudoTests {
89 base, err := PseudoVersionBase(tt.version)
90 if err != nil {
91 t.Errorf("PseudoVersionBase(%q): %v", tt.version, err)
92 } else if base != tt.older {
93 t.Errorf("PseudoVersionBase(%q) = %q; want %q", tt.version, base, tt.older)
94 }
95 }
96 }
97
98 func TestInvalidPseudoVersionBase(t *testing.T) {
99 for _, in := range []string{
100 "v0.0.0",
101 "v0.0.0-",
102 "v0.0.0-0.20060102150405-hash",
103 "v0.1.0-0.20060102150405-hash",
104 "v1.0.0-0.20060102150405-hash",
105 "v0.0.0-20060102150405-hash+incompatible",
106 "v0.0.0-20060102150405-hash+metadata",
107 } {
108 base, err := PseudoVersionBase(in)
109 if err == nil || base != "" {
110 t.Errorf(`PseudoVersionBase(%q) = %q, %v; want "", error`, in, base, err)
111 }
112 }
113 }
114
115 func TestIncDecimal(t *testing.T) {
116 cases := []struct {
117 in, want string
118 }{
119 {"0", "1"},
120 {"1", "2"},
121 {"99", "100"},
122 {"100", "101"},
123 {"101", "102"},
124 }
125
126 for _, tc := range cases {
127 got := incDecimal(tc.in)
128 if got != tc.want {
129 t.Fatalf("incDecimal(%q) = %q; want %q", tc.in, tc.want, got)
130 }
131 }
132 }
133
134 func TestDecDecimal(t *testing.T) {
135 cases := []struct {
136 in, want string
137 }{
138 {"", ""},
139 {"0", ""},
140 {"00", ""},
141 {"1", "0"},
142 {"2", "1"},
143 {"99", "98"},
144 {"100", "99"},
145 {"101", "100"},
146 }
147
148 for _, tc := range cases {
149 got := decDecimal(tc.in)
150 if got != tc.want {
151 t.Fatalf("decDecimal(%q) = %q; want %q", tc.in, tc.want, got)
152 }
153 }
154 }
155
View as plain text