aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/vlib/semver/semver_test.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/old/vlib/semver/semver_test.v')
-rw-r--r--v_windows/v/old/vlib/semver/semver_test.v192
1 files changed, 192 insertions, 0 deletions
diff --git a/v_windows/v/old/vlib/semver/semver_test.v b/v_windows/v/old/vlib/semver/semver_test.v
new file mode 100644
index 0000000..77c8cd7
--- /dev/null
+++ b/v_windows/v/old/vlib/semver/semver_test.v
@@ -0,0 +1,192 @@
+import semver
+
+struct TestVersion {
+ raw string
+ major int
+ minor int
+ patch int
+ prerelease string
+ metadata string
+}
+
+struct TestRange {
+ raw_version string
+ range_satisfied string
+ range_unsatisfied string
+}
+
+struct TestCoerce {
+ invalid string
+ valid string
+}
+
+const (
+ versions_to_test = [
+ TestVersion{'1.2.4', 1, 2, 4, '', ''},
+ TestVersion{'1.2.4-prerelease-1', 1, 2, 4, 'prerelease-1', ''},
+ TestVersion{'1.2.4+20191231', 1, 2, 4, '', '20191231'},
+ TestVersion{'1.2.4-prerelease-1+20191231', 1, 2, 4, 'prerelease-1', '20191231'},
+ TestVersion{'1.2.4+20191231-prerelease-1', 1, 2, 4, '', '20191231-prerelease-1'},
+ ]
+ ranges_to_test = [
+ TestRange{'1.1.0', '1.1.0', '1.1.1'},
+ TestRange{'1.1.0', '=1.1.0', '=1.1.1'},
+ TestRange{'1.1.0', '>=1.0.0', '<1.1.0'},
+ TestRange{'1.1.0', '>=1.0.0 <=1.1.0', '>=1.0.0 <1.1.0'},
+ TestRange{'2.3.1', '>=1.0.0 <=1.1.0 || >2.0.0 <2.3.4', '>=1.0.0 <1.1.0'},
+ TestRange{'2.3.1', '>=1.0.0 <=1.1.0 || >2.0.0 <2.3.4', '>=1.0.0 <1.1.0 || >4.0.0 <5.0.0'},
+ TestRange{'2.3.1', '~2.3.0', '~2.4.0'},
+ TestRange{'3.0.0', '~3.0.0', '~4.0.0'},
+ TestRange{'2.3.1', '^2.0.0', '^2.4.0'},
+ TestRange{'0.3.1', '^0.3.0', '^2.4.0'},
+ TestRange{'0.0.4', '^0.0.1', '^0.1.0'},
+ TestRange{'2.3.4', '^0.0.1 || ^2.3.0', '^3.1.0 || ^4.2.0'},
+ TestRange{'2.3.4', '>2 || <3', '>3 || >4'},
+ TestRange{'2.3.4', '2.3.4 - 2.3.5', '2.5.1 - 2.8.3'},
+ TestRange{'2.3.4', '2.2 - 2.3', '2.4 - 2.8'},
+ TestRange{'2.3.4', '2.3.x', '2.4.x'},
+ TestRange{'2.3.4', '2.x', '3.x'},
+ TestRange{'2.3.4', '*', '3.x'},
+ ]
+ coerce_to_test = [
+ TestCoerce{'1.2.0.4', '1.2.0'},
+ TestCoerce{'1.2.0', '1.2.0'},
+ TestCoerce{'1.2', '1.2.0'},
+ TestCoerce{'1', '1.0.0'},
+ TestCoerce{'1-alpha', '1.0.0-alpha'},
+ TestCoerce{'1+meta', '1.0.0+meta'},
+ TestCoerce{'1-alpha+meta', '1.0.0-alpha+meta'},
+ ]
+ invalid_versions_to_test = [
+ 'a.b.c',
+ '1.2',
+ '1.2.x',
+ '1.2.3.4',
+ '1.2.3-alpha@',
+ '1.2.3+meta%',
+ ]
+ invalid_ranges_to_test = [
+ '^a',
+ '~b',
+ 'a - c',
+ '>a',
+ 'a',
+ 'a.x',
+ ]
+)
+
+fn test_from() {
+ for item in versions_to_test {
+ ver := semver.from(item.raw) or {
+ assert false
+ return
+ }
+ assert ver.major == item.major
+ assert ver.minor == item.minor
+ assert ver.patch == item.patch
+ assert ver.metadata == item.metadata
+ assert ver.prerelease == item.prerelease
+ }
+ for ver in invalid_versions_to_test {
+ semver.from(ver) or {
+ assert true
+ continue
+ }
+ assert false
+ }
+}
+
+fn test_increment() {
+ version1 := semver.build(1, 2, 3)
+ version1_inc := version1.increment(.major)
+ assert version1_inc.major == 2
+ assert version1_inc.minor == 0
+ assert version1_inc.patch == 0
+ version2_inc := version1.increment(.minor)
+ assert version2_inc.major == 1
+ assert version2_inc.minor == 3
+ assert version2_inc.patch == 0
+ version3_inc := version1.increment(.patch)
+ assert version3_inc.major == 1
+ assert version3_inc.minor == 2
+ assert version3_inc.patch == 4
+}
+
+fn test_compare() {
+ first := semver.build(1, 0, 0)
+ patch := semver.build(1, 0, 1)
+ minor := semver.build(1, 2, 3)
+ major := semver.build(2, 0, 0)
+ assert first.le(first)
+ assert first.ge(first)
+ assert !first.lt(first)
+ assert !first.gt(first)
+ assert patch.ge(first)
+ assert first.le(patch)
+ assert !first.ge(patch)
+ assert !patch.le(first)
+ assert patch.gt(first)
+ assert first.lt(patch)
+ assert !first.gt(patch)
+ assert !patch.lt(first)
+ assert minor.gt(patch)
+ assert patch.lt(minor)
+ assert !patch.gt(minor)
+ assert !minor.lt(patch)
+ assert major.gt(minor)
+ assert minor.lt(major)
+ assert !minor.gt(major)
+ assert !major.lt(minor)
+}
+
+fn test_satisfies() {
+ for item in ranges_to_test {
+ ver := semver.from(item.raw_version) or {
+ assert false
+ return
+ }
+ assert ver.satisfies(item.range_satisfied)
+ assert !ver.satisfies(item.range_unsatisfied)
+ }
+}
+
+fn test_satisfies_invalid() {
+ ver := semver.from('1.0.0') or {
+ assert false
+ return
+ }
+ for item in invalid_ranges_to_test {
+ assert ver.satisfies(item) == false
+ }
+}
+
+fn test_coerce() {
+ for item in coerce_to_test {
+ valid := semver.from(item.valid) or {
+ assert false
+ return
+ }
+ fixed := semver.coerce(item.invalid) or {
+ assert false
+ return
+ }
+ assert fixed.eq(valid)
+ }
+}
+
+fn test_coerce_invalid() {
+ semver.coerce('a') or {
+ assert true
+ return
+ }
+ assert false
+}
+
+fn test_is_valid() {
+ for item in versions_to_test {
+ assert semver.is_valid(item.raw)
+ }
+ for item in invalid_versions_to_test {
+ assert semver.is_valid(item) == false
+ }
+}