OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / hashicorp / go-version / constraint_test.go
1 package version
2
3 import (
4         "testing"
5 )
6
7 func TestNewConstraint(t *testing.T) {
8         cases := []struct {
9                 input string
10                 count int
11                 err   bool
12         }{
13                 {">= 1.2", 1, false},
14                 {"1.0", 1, false},
15                 {">= 1.x", 0, true},
16                 {">= 1.2, < 1.0", 2, false},
17
18                 // Out of bounds
19                 {"11387778780781445675529500000000000000000", 0, true},
20         }
21
22         for _, tc := range cases {
23                 v, err := NewConstraint(tc.input)
24                 if tc.err && err == nil {
25                         t.Fatalf("expected error for input: %s", tc.input)
26                 } else if !tc.err && err != nil {
27                         t.Fatalf("error for input %s: %s", tc.input, err)
28                 }
29
30                 if len(v) != tc.count {
31                         t.Fatalf("input: %s\nexpected len: %d\nactual: %d",
32                                 tc.input, tc.count, len(v))
33                 }
34         }
35 }
36
37 func TestConstraintCheck(t *testing.T) {
38         cases := []struct {
39                 constraint string
40                 version    string
41                 check      bool
42         }{
43                 {">= 1.0, < 1.2", "1.1.5", true},
44                 {"< 1.0, < 1.2", "1.1.5", false},
45                 {"= 1.0", "1.1.5", false},
46                 {"= 1.0", "1.0.0", true},
47                 {"1.0", "1.0.0", true},
48                 {"~> 1.0", "2.0", false},
49                 {"~> 1.0", "1.1", true},
50                 {"~> 1.0", "1.2.3", true},
51                 {"~> 1.0.0", "1.2.3", false},
52                 {"~> 1.0.0", "1.0.7", true},
53                 {"~> 1.0.0", "1.1.0", false},
54                 {"~> 1.0.7", "1.0.4", false},
55                 {"~> 1.0.7", "1.0.7", true},
56                 {"~> 1.0.7", "1.0.8", true},
57                 {"~> 1.0.7", "1.0.7.5", true},
58                 {"~> 1.0.7", "1.0.6.99", false},
59                 {"~> 1.0.7", "1.0.8.0", true},
60                 {"~> 1.0.9.5", "1.0.9.5", true},
61                 {"~> 1.0.9.5", "1.0.9.4", false},
62                 {"~> 1.0.9.5", "1.0.9.6", true},
63                 {"~> 1.0.9.5", "1.0.9.5.0", true},
64                 {"~> 1.0.9.5", "1.0.9.5.1", true},
65                 {"~> 2.0", "2.1.0-beta", false},
66                 {"~> 2.1.0-a", "2.2.0", false},
67                 {"~> 2.1.0-a", "2.1.0", false},
68                 {"~> 2.1.0-a", "2.1.0-beta", true},
69                 {"~> 2.1.0-a", "2.2.0-alpha", false},
70                 {"> 2.0", "2.1.0-beta", false},
71                 {">= 2.1.0-a", "2.1.0-beta", true},
72                 {">= 2.1.0-a", "2.1.1-beta", false},
73                 {">= 2.0.0", "2.1.0-beta", false},
74                 {">= 2.1.0-a", "2.1.1", true},
75                 {">= 2.1.0-a", "2.1.1-beta", false},
76                 {">= 2.1.0-a", "2.1.0", true},
77                 {"<= 2.1.0-a", "2.0.0", true},
78         }
79
80         for _, tc := range cases {
81                 c, err := NewConstraint(tc.constraint)
82                 if err != nil {
83                         t.Fatalf("err: %s", err)
84                 }
85
86                 v, err := NewVersion(tc.version)
87                 if err != nil {
88                         t.Fatalf("err: %s", err)
89                 }
90
91                 actual := c.Check(v)
92                 expected := tc.check
93                 if actual != expected {
94                         t.Fatalf("Version: %s\nConstraint: %s\nExpected: %#v",
95                                 tc.version, tc.constraint, expected)
96                 }
97         }
98 }
99
100 func TestConstraintsString(t *testing.T) {
101         cases := []struct {
102                 constraint string
103                 result     string
104         }{
105                 {">= 1.0, < 1.2", ""},
106                 {"~> 1.0.7", ""},
107         }
108
109         for _, tc := range cases {
110                 c, err := NewConstraint(tc.constraint)
111                 if err != nil {
112                         t.Fatalf("err: %s", err)
113                 }
114
115                 actual := c.String()
116                 expected := tc.result
117                 if expected == "" {
118                         expected = tc.constraint
119                 }
120
121                 if actual != expected {
122                         t.Fatalf("Constraint: %s\nExpected: %#v\nActual: %s",
123                                 tc.constraint, expected, actual)
124                 }
125         }
126 }