|
5 | 5 | # Visit https://aboutcode.org and https://github.com/nexB/univers for support and download. |
6 | 6 |
|
7 | 7 | from unittest import TestCase |
| 8 | +import pytest |
8 | 9 |
|
9 | 10 | from univers.version_constraint import VersionConstraint |
10 | 11 | from univers.version_range import GemVersionRange |
11 | 12 | from univers.version_range import PypiVersionRange |
12 | 13 | from univers.version_range import VersionRange |
| 14 | +from univers.version_range import RANGE_CLASS_BY_SCHEMES |
13 | 15 | from univers.versions import PypiVersion |
14 | 16 | from univers.versions import RubygemsVersion |
15 | 17 |
|
@@ -189,3 +191,30 @@ def test_VersionRange_contains_works_for_star_range(self): |
189 | 191 | from univers.versions import SemverVersion |
190 | 192 |
|
191 | 193 | SemverVersion("1.0.0") in VersionRange.from_string("vers:nginx/*") |
| 194 | + |
| 195 | + |
| 196 | +VERSION_RANGE_TESTS_BY_SCHEME = { |
| 197 | + "nginx": ["0.8.40+", "0.7.52-0.8.39", "0.9.10", "1.5.0+, 1.4.1+"], |
| 198 | +} |
| 199 | + |
| 200 | + |
| 201 | +@pytest.mark.xfail(reason="Not all schemes are implemented yet") |
| 202 | +def test_all_schemes_are_tested_for_round_tripping(): |
| 203 | + untested_schemes = [] |
| 204 | + for scheme in RANGE_CLASS_BY_SCHEMES: |
| 205 | + if scheme not in VERSION_RANGE_TESTS_BY_SCHEME: |
| 206 | + untested_schemes.append(scheme) |
| 207 | + assert not untested_schemes |
| 208 | + |
| 209 | + |
| 210 | +@pytest.mark.parametrize( |
| 211 | + "scheme, native_ranges", |
| 212 | + VERSION_RANGE_TESTS_BY_SCHEME.items(), |
| 213 | +) |
| 214 | +def test_from_native_and_from_string_round_trip(scheme, native_ranges): |
| 215 | + |
| 216 | + range_class = RANGE_CLASS_BY_SCHEMES[scheme] |
| 217 | + for rng in native_ranges: |
| 218 | + from_native = range_class.from_native(rng) |
| 219 | + from_string = range_class.from_string(from_native.to_string()) |
| 220 | + assert from_native == from_string |
0 commit comments