|
| 1 | +import pytest |
| 2 | + |
| 3 | +from univers.version_range import CargoVersionRange |
| 4 | +from univers.version_range import InvalidVersionRange |
| 5 | +from univers.versions import CargoVersion |
| 6 | + |
| 7 | +values = [ |
| 8 | + # https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html |
| 9 | + # caret |
| 10 | + ["^1.2.3", [[["=", "1.2.3"]]], ["1.2.3"], ["1.2.4"]], |
| 11 | + # tilde |
| 12 | + ["~1.2.3", [[[">=", "1.2.3"], ["<", "1.3.0"]]], ["1.2.4"], ["2.0.1"]], |
| 13 | + ["~1.2", [[[">=", "1.2.0"], ["<", "1.3.0"]]], ["1.2.5"], ["1.3.1"]], |
| 14 | + [ |
| 15 | + "~1", |
| 16 | + [[[">=", "1.0.0"], ["<", "2.0.0"]]], |
| 17 | + ["1.3.0", "1.8.1"], |
| 18 | + ["2.1.0", "2.2"], |
| 19 | + ], # tilde increment the major |
| 20 | + # wildcard |
| 21 | + ["*", [[[">=", "0.0.0"]]], ["1.0.0", "2.0.0"], []], |
| 22 | + # ["1.*", [[[">=", "1.0.0"]]], ["1.0.0"], ["2", "1.0.1"]], |
| 23 | + # ["1.2.*", [[[">=", "1.2.0"], ["<", "1.3.0"]]], ["1.2", "1.2.1"], ["2.1.0", "2.2"]], |
| 24 | + # https://github.com/dtolnay/semver/blob/master/tests/test_version_req.rs : |
| 25 | + ["=1.0.0", [["=", "1.0.0"]], ["1.0.0"], ["1.0.1", "0.9.9", "0.10.0", "0.1.0", "1.0.0-pre"]], |
| 26 | + ["=0.9.0", [["=", "0.9.0"]], ["0.9.0"], ["0.9.1", "1.9.0", "0.0.9", "0.9.0-pre"]], |
| 27 | + ["=0.0.2", [["=", "0.0.2"]], ["0.0.2"], ["0.0.1", "0.0.3", "0.0.2-pre"]], |
| 28 | + [ |
| 29 | + "=0.1.0-beta2.a", |
| 30 | + [["=", "0.1.0-beta2.a"]], |
| 31 | + ["0.1.0-beta2.a"], |
| 32 | + ["0.9.1", "0.1.0", "0.1.1-beta2.a", "0.1.0-beta2"], |
| 33 | + ], |
| 34 | + # ["=0.1.0+meta", [["=", "0.1.0+meta"]], ["0.1.0", "0.1.0+meta", "0.1.0+any"], []], |
| 35 | + # ["<1.0.0", [["<", "1.0.0"]], ["0.1.0", "0.0.1"], ["1.0.0", "1.0.0-beta", "1.0.1", "0.9.9-alpha"]], |
| 36 | + # [ |
| 37 | + # "<= 2.1.0-alpha2", |
| 38 | + # [["<", "2.1.0-alpha2"], ["=", "2.1.0-alpha2"]], |
| 39 | + # ["2.1.0-alpha2", "2.1.0-alpha1", "2.0.0", "1.0.0"], |
| 40 | + # ["2.1.0", "2.2.0-alpha1", "2.0.0-alpha2", "1.0.0-alpha2"], |
| 41 | + # ], |
| 42 | + # [">1.0.0-alpha, <1.0.0", [[[">", "2.1.0-alpha2"], ["<", "1.0.0"]]], ["1.0.0-beta"], []], |
| 43 | + # [">1.0.0-alpha, <1.0", [[[">", "1.0.0-alpha"], ["<", "1.0"]]], ["1.0.0-beta"], []], |
| 44 | + # [">1.0.0-alpha, <1", [[[">", "1.0.0-alpha"], ["<", "1"]]], ["1.0.0-beta"], []], |
| 45 | + # [ |
| 46 | + # ">=0.5.1-alpha3, <0.6", |
| 47 | + # [[[">", "0.5.1-alpha3"], ["=", "0.5.1-alpha3"], ["<", "0.6"]]], |
| 48 | + # ["0.5.1-alpha3", "0.5.1-alpha4", "0.5.1-beta", "0.5.1", "0.5.5"], |
| 49 | + # ["0.5.1-alpha1", "0.5.2-alpha3", "0.5.5-pre", "0.5.0-pre"], |
| 50 | + # ], |
| 51 | + ["~1", [], ["1.0.0", "1.0.1", "1.1.1"], ["0.9.1", "2.9.0", "0.0.9"]], |
| 52 | + ["~1.2", [], ["1.2.0", "1.2.1"], ["1.1.1", "1.3.0", "0.0.9"]], |
| 53 | + ["~1.2.2", [], ["1.2.2", "1.2.4"], ["1.2.1", "1.9.0", "1.0.9", "2.0.1", "0.1.3"]], |
| 54 | + # [ |
| 55 | + # "~1.2.3-beta.2", |
| 56 | + # [], |
| 57 | + # ["1.2.3", "1.2.4", "1.2.3-beta.2", "1.2.3-beta.4"], |
| 58 | + # ["1.3.3", "1.1.4", "1.2.3-beta.1", "1.2.4-beta.2"], |
| 59 | + # ], |
| 60 | +] |
| 61 | + |
| 62 | +error_list = [ |
| 63 | + "> 0.1.0,", |
| 64 | + "> 0.3.0, ,", |
| 65 | + # "1.2.3 - 2.3.4", |
| 66 | + # "> 0.0.9 <= 2.5.3", |
| 67 | + # "=1.2.3 || =2.3.4", |
| 68 | + # "1.1 || =1.2.3", |
| 69 | + # "6.* || 8.* || >= 10.*", |
| 70 | + # ">= >= 0.0.2", |
| 71 | + # ">== 0.0.2", |
| 72 | + # "a.0.0", |
| 73 | + # "1.0.0-", |
| 74 | + # ">=", |
| 75 | + # "*.1", |
| 76 | + # "1.*.1", |
| 77 | + # ">=1.*.1", |
| 78 | + # "*, 0.20.0-any", |
| 79 | + # "0.20.0-any, *" "0.20.0-any, *, 1.0", |
| 80 | +] |
| 81 | + |
| 82 | + |
| 83 | +@pytest.mark.parametrize("version_range, conditions, versions_in, versions_out", values) |
| 84 | +def test_range(version_range, conditions, versions_in, versions_out): |
| 85 | + r = CargoVersionRange.from_native(version_range) |
| 86 | + # TODO test Version Constraints |
| 87 | + |
| 88 | + for v in versions_in: |
| 89 | + assert CargoVersion(v) in r |
| 90 | + |
| 91 | + for v in versions_out: |
| 92 | + assert CargoVersion(v) not in r |
| 93 | + |
| 94 | + |
| 95 | +def test_error(): |
| 96 | + for i in error_list: |
| 97 | + with pytest.raises(InvalidVersionRange): |
| 98 | + CargoVersionRange.from_native(i) |
0 commit comments