-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest_semver
executable file
·173 lines (152 loc) · 5.73 KB
/
test_semver
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#!/usr/bin/env bash
source semver
if [ -t 1 ] || [ -n "$OPT_COLOR" ]; then
C_RESET="\x1B[0m"; C_BOLD="\x1B[1m"; C_DEFAULT="\x1B[39m"; C_WHITE="\x1B[97m"; C_LTGRAY="\x1B[37m"; C_CYAN="\x1B[36m"; C_LTCYAN="\x1B[96m"; C_RED="\x1B[31m"; C_YELLOW="\x1B[33m";
fi
semverTest() {
local result message expected out
case "$1" in
eq)
out=$(semverEQ "$2" "$3" 2>/dev/null)
result=$?
message="$2 $1 $3"
[[ $result -ne 0 ]] && message="$message (${C_BOLD}${C_RED}$out${C_RESET})"
;;
lt)
out=$(semverLT "$2" "$3" 2>/dev/null)
result=$?
message="$2 $1 $3"
[[ $result -ne 0 ]] && message="$message (${C_BOLD}${C_RED}$out${C_RESET})"
;;
gt)
out=$(semverGT "$2" "$3" 2>/dev/null)
result=$?
message="$2 $1 $3"
[[ $result -ne 0 ]] && message="$message (${C_BOLD}${C_RED}$out${C_RESET})"
;;
bump)
shift
local ARGS=( "$@" )
expected="${ARGS[@]: -1}"
unset "ARGS[${#ARGS[@]}-1]"
local bumpresult; bumpresult=$(semverBump "${ARGS[@]}" 2>/dev/null)
message="bump ${ARGS[*]} -> $expected"
[[ "$bumpresult" == "$expected" ]] && result=0 || message="$message (${C_BOLD}${C_RED}Result: $bumpresult${C_RESET})"
;;
parse)
shift
[[ -n "$2" ]] && expected="$2" || expected="$1"
out=$(semverParse "$1" 2>/dev/null && echo "${SEMVER[0]}")
result=$?
message="parse $1 -> $expected"
[[ "$out" == "$expected" ]] && result=0 || message="$message (${C_BOLD}${C_RED}Result: $out${C_RESET})"
;;
*)
message="${C_BOLD}${C_RED}Invalid test: $1${C_RESET}"
;;
esac
[[ "$result" == "0" ]] && printf "PASS - " || printf "${C_BOLD}${C_RED}FAIL${C_RESET} - "
echo -e "$message"
}
# Parse
echo "--Parse"
semverTest parse "1.2.3"
semverTest parse "1.2.3-alpha"
semverTest parse "1.2.3-alpha.beta"
semverTest parse "1.2.3-alpha-dash-beta"
semverTest parse "1.2.3-alpha.doubledot.beta-beta"
semverTest parse "1.2.3+metadata"
semverTest parse "1.2.3+metadata-dash-beta"
# semverTest parse "1.2.3+metadata+dash+beta"
semverTest parse "1.2.3+metadata.dot.xxx"
semverTest parse "1.2.3+metadata.dot.xxx.yyy"
# Optional Minor, Optional patch
echo "--Optional Minor, Optional patch"
semverTest parse "1" "1.0.0"
semverTest parse "1" "1.0.0"
semverTest parse "1.0" "1.0.0"
semverTest parse "1.1" "1.1.0"
semverTest parse "1.0-alpha" "1.0.0-alpha"
semverTest parse "1-12.1-22.aaa.bbb+ccc-ddd.eee.fff-ggg" "1.0.0-12.1-22.aaa.bbb+ccc-ddd.eee.fff-ggg"
semverTest parse "1.2-12.1-22.aaa.bbb+ccc-ddd.eee.fff-ggg" "1.2.0-12.1-22.aaa.bbb+ccc-ddd.eee.fff-ggg"
# Allow leading zeros (i.e. 001.002.003), allow empty pre-release identifiers, allow empty metadata identifiers
echo "--Leading zeros"
semverTest parse "01.02.03" "1.2.3"
semverTest parse "001.2.3-12" "1.2.3-12"
semverTest parse "001.2.3-12.1" "1.2.3-12.1"
semverTest parse "001.2.3-12.1-22" "1.2.3-12.1-22"
semverTest parse "001.2.3-12.1-22.aaa.bbb" "1.2.3-12.1-22.aaa.bbb"
semverTest parse "001.2.3-12.1-22.aaa.bbb+c" "1.2.3-12.1-22.aaa.bbb+c"
semverTest parse "001.2.3-12.1-22.aaa.bbb+ccc-ddd.eee.fff-ggg" "1.2.3-12.1-22.aaa.bbb+ccc-ddd.eee.fff-ggg"
semverTest parse "001.2.3-a-b.c.def.1.12+asd.x.y.zz.eee-fff" "1.2.3-a-b.c.def.1.12+asd.x.y.zz.eee-fff"
# Allow empty pre-release identifiers
echo "--Empty pre-release identifiers"
semverTest parse "1.2.3-" "1.2.3"
semverTest parse "1.2.3-." "1.2.3-0.0"
semverTest parse "1.2.3-.." "1.2.3-0.0.0"
semverTest parse "1.2.3-..." "1.2.3-0.0.0.0"
# Allow empty metadata identifiers
echo "--Empty metadata identifiers"
semverTest parse "1.2.3+" "1.2.3"
semverTest parse "1.2.3+." "1.2.3+0.0"
semverTest parse "1.2.3+.." "1.2.3+0.0.0"
semverTest parse "1.2.3+..." "1.2.3+0.0.0.0"
semverTest parse "1.2.3-...+..." "1.2.3-0.0.0.0+0.0.0.0"
#
# Examples from https://semver.org/
#
echo "--Examples from https://semver.org/"
# 2. ... For instance: 1.9.0 -> 1.10.0 -> 1.11.0.
semverTest lt "1.9.0" "1.10.0"
semverTest lt "1.10.0" "1.11.0"
# 10. ... Two versions that differ only in the build metadat, have the same precedence.
semverTest eq "1.0.0-alpha+001" "1.0.0-alpha+20130313144700"
semverTest eq "1.0.0-alpha+001" "1.0.0-alpha+exp.sha.5114f85"
semverTest eq "1.0.0+20130313144700" "1.0.0+exp.sha.5114f85"
# 11. ...
semverTest lt "1.0.0" "2.0.0"
semverTest lt "2.0.0" "2.1.0"
semverTest lt "2.1.0" "2.1.1"
semverTest lt "1.0.0-alpha" "1.0.0"
semverTest lt "1.0.0-alpha" "1.0.0-alpha.1"
semverTest lt "1.0.0-alpha.1" "1.0.0-alpha.beta"
semverTest lt "1.0.0-alpha.beta" "1.0.0-beta"
semverTest lt "1.0.0-beta" "1.0.0-beta.2"
semverTest lt "1.0.0-beta.2" "1.0.0-beta.11"
semverTest lt "1.0.0-rc.1" "1.0.0"
semverTest gt "1.0.0-alpha.beta" "1.0.0-alpha.1"
semverTest gt "1.0.0-alpha.beta" "1.0.0-alpha.1"
semverTest eq "1.0.0" "1.0.0"
#
# Lexicographic ordering
#
echo "--Lexicographic ordering of pre-release identifiers (by ASCII values)"
semverTest lt "1.0.0--" "1.0.0-a"
semverTest lt "1.0.0--" "1.0.0-A"
semverTest lt "1.0.0-A" "1.0.0-Z"
semverTest lt "1.0.0-A" "1.0.0-a" # !
semverTest lt "1.0.0-Z" "1.0.0-a" # !
semverTest lt "1.0.0-A" "1.0.0-b"
semverTest lt "1.0.0-a" "1.0.0-z"
semverTest lt "1.0.0-aa" "1.0.0-aaa"
semverTest lt "1.0.0-aaz" "1.0.0-ab"
semverTest lt "1.0.0-0x10" "1.0.0-0x20"
semverTest lt "1.0.0-v.0" "1.0.0-v.-1"
semverTest lt "1.0.0-v.2" "1.0.0-v-.1"
#
# Dotted pre-release and build metadata
#
echo "--Dotted pre-release and build metadata"
semverTest eq "1.0.0-rc.1+asdf.x.y.z" "1.0.0-rc.1+qwer.a.b.c"
semverTest gt "1.0.0-rc.123.0aaa.yyy-beta.zzz+asdf.x--y.z" "1.0.0-rc.1+qwer.a.b.c"
# Bump version
echo "--Bump"
semverTest bump -M "0.0.0" "1.0.0"
semverTest bump -m "0.0.0" "0.1.0"
semverTest bump -p "0.0.0" "0.0.1"
semverTest bump -M "1.0.0" "2.0.0"
semverTest bump -M "1.2.3" "2.0.0"
semverTest bump -m "1.2.3" "1.3.0"
semverTest bump -p "1.2.3" "1.2.4"
semverTest bump -Mmp "1.2.3" "2.1.1"
semverTest bump -Mmp "1.2.3-alpha.2+gizmo.1" "2.1.1-alpha.2+gizmo.1"