forked from Shopify/zk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
version_test.go
155 lines (140 loc) · 4.45 KB
/
version_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package zk
import "testing"
func TestParseVersion(t *testing.T) {
t.Parallel()
tt := []struct {
vs string
wantVersion Version
}{
{vs: "1.2.3", wantVersion: Version{1, 2, 3}},
{vs: "0.0.0", wantVersion: Version{0, 0, 0}},
{vs: "1.0.0", wantVersion: Version{1, 0, 0}},
{vs: "0.1.0", wantVersion: Version{0, 1, 0}},
{vs: "0.0.1", wantVersion: Version{0, 0, 1}},
{vs: "1.1", wantVersion: Version{1, 1, 0}},
{vs: "1", wantVersion: Version{1, 0, 0}},
{vs: "1.2.3.4.5.6", wantVersion: Version{-1, -1, -1}},
{vs: "a.b.c", wantVersion: Version{-1, -1, -1}},
}
for _, tc := range tt {
v := ParseVersion(tc.vs)
if v != tc.wantVersion {
t.Errorf("ParseVersion(%q) = %v; want %v", tc.vs, v, tc.wantVersion)
}
}
}
func TestParseVersionErr(t *testing.T) {
t.Parallel()
tt := []struct {
vs string
wantVersion Version
wantErr string
}{
{vs: "1.2.3", wantVersion: Version{1, 2, 3}},
{vs: "0.0.0", wantVersion: Version{0, 0, 0}},
{vs: "1.0.0", wantVersion: Version{1, 0, 0}},
{vs: "0.1.0", wantVersion: Version{0, 1, 0}},
{vs: "0.0.1", wantVersion: Version{0, 0, 1}},
{vs: "1.1", wantVersion: Version{1, 1, 0}},
{vs: "1", wantVersion: Version{1, 0, 0}},
{vs: "1.2.3.4.5.6", wantErr: "invalid version string: too many dots"},
{vs: "a.b.c", wantErr: "invalid version string: expected integer"},
}
for _, tc := range tt {
v, err := ParseVersionErr(tc.vs)
if tc.wantErr != "" {
if err == nil {
t.Errorf("ParseVersionErr(%q); want error, but saw none", tc.vs)
} else if err.Error() != tc.wantErr {
t.Errorf("ParseVersionErr(%q); want error %q, but got %q", tc.vs, tc.wantErr, err.Error())
}
} else {
if err != nil {
t.Errorf("ParseVersionErr(%q) = %v; want %v", tc.vs, err, tc.wantVersion)
} else if v != tc.wantVersion {
t.Errorf("ParseVersionErr(%q) = %v; want %v", tc.vs, v, tc.wantVersion)
}
}
}
}
func TestVersion_String(t *testing.T) {
t.Parallel()
tt := []struct {
v Version
want string
}{
{v: Version{1, 2, 3}, want: "1.2.3"},
{v: Version{0, 0, 0}, want: "0.0.0"},
{v: Version{1, 0, 0}, want: "1.0.0"},
{v: Version{0, 1, 0}, want: "0.1.0"},
{v: Version{0, 0, 1}, want: "0.0.1"},
}
for _, tc := range tt {
if got := tc.v.String(); got != tc.want {
t.Errorf("%v.String() = %q; want %q", tc.v, got, tc.want)
}
}
}
func TestVersion_LessThan(t *testing.T) {
t.Parallel()
tt := []struct {
v Version
other Version
want bool
}{
{v: Version{1, 2, 3}, other: Version{1, 2, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 2, 4}, want: true},
{v: Version{1, 2, 3}, other: Version{1, 3, 3}, want: true},
{v: Version{1, 2, 3}, other: Version{2, 2, 3}, want: true},
{v: Version{1, 2, 3}, other: Version{1, 2, 2}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 1, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{0, 2, 3}, want: false},
}
for _, tc := range tt {
if got := tc.v.LessThan(tc.other); got != tc.want {
t.Errorf("%v.LessThan(%v) = %v; want %v", tc.v, tc.other, got, tc.want)
}
}
}
func TestVersion_Equal(t *testing.T) {
t.Parallel()
tt := []struct {
v Version
other Version
want bool
}{
{v: Version{1, 2, 3}, other: Version{1, 2, 3}, want: true},
{v: Version{1, 2, 3}, other: Version{1, 2, 4}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 3, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{2, 2, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 2, 2}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 1, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{0, 2, 3}, want: false},
}
for _, tc := range tt {
if got := tc.v.Equal(tc.other); got != tc.want {
t.Errorf("%v.Equal(%v) = %v; want %v", tc.v, tc.other, got, tc.want)
}
}
}
func TestVersion_GreaterThan(t *testing.T) {
t.Parallel()
tt := []struct {
v Version
other Version
want bool
}{
{v: Version{1, 2, 3}, other: Version{1, 2, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 2, 4}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 3, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{2, 2, 3}, want: false},
{v: Version{1, 2, 3}, other: Version{1, 2, 2}, want: true},
{v: Version{1, 2, 3}, other: Version{1, 1, 3}, want: true},
{v: Version{1, 2, 3}, other: Version{0, 2, 3}, want: true},
}
for _, tc := range tt {
if got := tc.v.GreaterThan(tc.other); got != tc.want {
t.Errorf("%v.GreaterThan(%v) = %v; want %v", tc.v, tc.other, got, tc.want)
}
}
}