1 package semver
2
3 import (
4 "regexp"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8 )
9
10 func TestSemverRegexpCompiles(t *testing.T) {
11 _, err := regexp.Compile(SemverRegexpString)
12 assert.NoError(t, err)
13 }
14
15 func TestSemverRegexp(t *testing.T) {
16
17
18 tests := []struct {
19 inputs []string
20 expected error
21 }{
22 {
23 inputs: []string{
24 "0.0.4",
25 "1.2.3",
26 "10.20.30",
27 "1.1.2-prerelease+meta",
28 "1.1.2+meta",
29 "1.1.2+meta-valid",
30 "1.0.0-alpha",
31 "1.0.0-beta",
32 "1.0.0-alpha.beta",
33 "1.0.0-alpha.beta.1",
34 "1.0.0-alpha.1",
35 "1.0.0-alpha0.valid",
36 "1.0.0-alpha.0valid",
37 "1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay",
38 "1.0.0-rc.1+build.1",
39 "2.0.0-rc.1+build.123",
40 "1.2.3-beta",
41 "10.2.3-DEV-SNAPSHOT",
42 "1.2.3-SNAPSHOT-123",
43 "1.0.0",
44 "2.0.0",
45 "1.1.7",
46 "2.0.0+build.1848",
47 "2.0.1-alpha.1227",
48 "1.0.0-alpha+beta",
49 "1.2.3----RC-SNAPSHOT.12.9.1--.12+788",
50 "1.2.3----R-S.12.9.1--.12+meta",
51 "1.2.3----RC-SNAPSHOT.12.9.1--.12",
52 "1.0.0+0.build.1-rc.10000aaa-kk-0.1",
53 "99999999999999999999999.999999999999999999.99999999999999999",
54 },
55 expected: nil,
56 },
57 {
58 inputs: []string{
59 "1",
60 "1.2",
61 "1.2.3-0123",
62 "1.2.3-0123.0123",
63 "1.1.2+.123",
64 "+invalid",
65 "-invalid",
66 "-invalid+invalid",
67 "-invalid.01",
68 "alpha",
69 "alpha.beta",
70 "alpha.beta.1",
71 "alpha.1",
72 "alpha+beta",
73 "alpha_beta",
74 "alpha.",
75 "alpha..",
76 "beta\\",
77 "1.0.0-alpha_beta",
78 "-alpha.",
79 "1.0.0-alpha..",
80 "1.0.0-alpha..1",
81 "1.0.0-alpha...1",
82 "1.0.0-alpha....1",
83 "1.0.0-alpha.....1",
84 "1.0.0-alpha......1",
85 "1.0.0-alpha.......1",
86 "01.1.1",
87 "1.01.1",
88 "1.1.01",
89 "1.2",
90 "1.2.3.DEV",
91 "1.2-SNAPSHOT",
92 "1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788",
93 "1.2-RC-SNAPSHOT",
94 "-1.0.3-gamma+b7718",
95 "+justmeta",
96 "9.8.7+meta+meta",
97 "9.8.7-whatever+meta+meta",
98 "99999999999999999999999.999999999999999999.99999999999999999----RC-SNAPSHOT.12.09.1--------------------------------..12",
99 "0.0.1+build.2415445056+commit.b1e31c3",
100 },
101 expected: ErrInvalidSemVer,
102 },
103 }
104
105 for _, tc := range tests {
106 for _, input := range tc.inputs {
107 err := IsValidSemver(input)
108 if err != tc.expected {
109 t.Errorf("Unexpected SemVer validation result: got %v, expected %v\nSemVer: %v\n", err, tc.expected, input)
110 }
111 }
112 }
113 }
114
View as plain text