def test_comparison(): versions = [ "1.0.0-alpha", "1.0.0-alpha.1", "1.0.0-beta.2", "1.0.0-beta.11", "1.0.0-rc.1", "1.0.0-rc.1+build.1", "1.0.0", "1.0.0+0.3.7", "1.3.7+build", "1.3.7+build.2.b8f12d7", "1.3.7+build.11.e0f985a", "2.0.0", "2.1.0", "2.2.0", "2.11.0", "2.11.1", ] for i in range(len(versions)): for j in range(len(versions)): a = Version.parse(versions[i]) b = Version.parse(versions[j]) assert (a < b) == (i < j) assert (a > b) == (i > j) assert (a <= b) == (i <= j) assert (a >= b) == (i >= j) assert (a == b) == (i == j) assert (a != b) == (i != j)
def test_allows_all(): v = Version.parse("1.2.3") assert v.allows_all(v) assert not v.allows_all(Version.parse("0.0.3")) assert not v.allows_all( VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4"))) assert not v.allows_all(VersionRange()) assert v.allows_all(EmptyConstraint())
def add( self, name, version, deps=None ): # type: (str, str, Optional[Dict[str, str]]) -> None version = Version.parse(version) if name not in self._packages: self._packages[name] = {} # if already added without deps, assume now called with discovered deps and overwrite if version in self._packages[name] and not ( deps is None or self._packages[name][version] is None ): raise ValueError("{} ({}) already exists".format(name, version)) # not existing and deps undiscovered if deps is None: self._packages[name][version] = None return dependencies = [] for dep in deps: req = parse_req(dep) constraint = ",".join(["".join(tup) for tup in req.specs]) dependencies.append(Dependency(req.key, constraint, req.__str__())) self._packages[name][version] = dependencies
def __init__( self, cache_dir, index_url, extra_index_url, pre, ): # type: () -> None self._root_version = Version.parse("0.0.0") self._root_dependencies = [] self._packages = {} self._packages_metadata = {} self.cache_dir = cache_dir self.index_url = index_url self.extra_index_url = extra_index_url self.pre = pre super(PackageSource, self).__init__()
def test_allows(): v = Version.parse("1.2.3") assert v.allows(v) assert not v.allows(Version.parse("2.2.3")) assert not v.allows(Version.parse("1.3.3")) assert not v.allows(Version.parse("1.2.4")) assert not v.allows(Version.parse("1.2.3-dev")) assert not v.allows(Version.parse("1.2.3+build"))
def test_intersect(): v = Version.parse("1.2.3") assert v.intersect(v) == v assert v.intersect(Version.parse("1.1.4")).is_empty() assert (v.intersect( VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4"))) == v) assert (Version.parse("1.1.4").intersect( VersionRange(v, Version.parse("1.2.4"))).is_empty())
def test_difference(): v = Version.parse("1.2.3") assert v.difference(v).is_empty() assert v.difference(Version.parse("0.8.0")) == v assert v.difference( VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4"))).is_empty() assert (v.difference( VersionRange(Version.parse("1.4.0"), Version.parse("3.0.0"))) == v)
def add( self, name, version, deps=None ): # type: (str, str, Optional[Dict[str, str]]) -> None if deps is None: deps = {} version = Version.parse(version) if name not in self._packages: self._packages[name] = {} if version in self._packages[name]: raise ValueError("{} ({}) already exists".format(name, version)) dependencies = [] for dep_name, spec in deps.items(): dependencies.append(Dependency(dep_name, spec)) self._packages[name][version] = dependencies
def v003(): return Version.parse("0.0.3")
def v200(): return Version.parse("2.0.0")
def v234(): return Version.parse("2.3.4")
import pytest from pipgrip.libs.semver import Version, VersionRange, VersionUnion, parse_constraint @pytest.mark.parametrize( "input_,constraint", [ ("*", VersionRange()), ("*.*", VersionRange()), ("v*.*", VersionRange()), ("*.x.*", VersionRange()), ("x.X.x.*", VersionRange()), # ('!=1.0.0', Constraint('!=', '1.0.0.0')), (">1.0.0", VersionRange(min=Version(1, 0, 0))), (">1.0.0rc1", VersionRange(min=Version(1, 0, 0, pre="rc1"))), ("<1.2.3", VersionRange(max=Version(1, 2, 3))), ("<1.2.3rc1", VersionRange(max=Version(1, 2, 3, pre="rc1"))), ("<=1.2.3", VersionRange(max=Version(1, 2, 3), include_max=True)), ("<=1.2.3rc1", VersionRange(max=Version(1, 2, 3, pre="rc1"), include_max=True)), ("<=1.2rc1", VersionRange(max=Version(1, 2, 0, pre="rc1"), include_max=True)), (">=1.2.3", VersionRange(min=Version(1, 2, 3), include_min=True)), (">=1.2.3rc1", VersionRange(min=Version(1, 2, 3, pre="rc1"), include_min=True)), ("=1.2.3", Version(1, 2, 3)), ("=1.2.3rc1", Version(1, 2, 3, pre="rc1")), ("1.2.3", Version(1, 2, 3)), ("1.2.3rc1", Version(1, 2, 3, pre="rc1")), ("=1.0", Version(1, 0, 0)),
def v140(): return Version.parse("1.4.0")
def test_parse_invalid(input): with pytest.raises(ParseVersionError): Version.parse(input)
def __init__(self): # type: () -> None self._root_version = Version.parse("0.0.0") self._root_dependencies = [] self._packages = {} super(PackageSource, self).__init__()
def test_union(): v = Version.parse("1.2.3") assert v.union(v) == v result = v.union(Version.parse("0.8.0")) assert result.allows(v) assert result.allows(Version.parse("0.8.0")) assert not result.allows(Version.parse("1.1.4")) range = VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4")) assert v.union(range) == range union = Version.parse("1.1.4").union( VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4"))) assert union == VersionRange(Version.parse("1.1.4"), Version.parse("1.2.4"), include_min=True) result = v.union( VersionRange(Version.parse("0.0.3"), Version.parse("1.1.4"))) assert result.allows(v) assert result.allows(Version.parse("0.1.0"))
def v114(): return Version.parse("1.1.4")
def test_allows_any( v003, v010, v072, v080, v114, v123, v124, v140, v200, v234, v250, v300 ): # disallows an empty constraint assert not VersionRange(v123, v250).allows_any(EmptyConstraint()) # allows allowed versions range = VersionRange(v123, v250, include_max=True) assert not range.allows_any(v123) assert range.allows_any(v124) assert range.allows_any(v250) assert not range.allows_any(v300) # with no min range = VersionRange(max=v200) assert range.allows_any(VersionRange(v140, v300)) assert not range.allows_any(VersionRange(v234, v300)) assert range.allows_any(VersionRange(v140)) assert not range.allows_any(VersionRange(v234)) assert range.allows_any(range) # with no max range = VersionRange(min=v072) assert range.allows_any(VersionRange(v003, v140)) assert not range.allows_any(VersionRange(v003, v010)) assert range.allows_any(VersionRange(max=v080)) assert not range.allows_any(VersionRange(max=v003)) assert range.allows_any(range) # with min and max range = VersionRange(v072, v200) assert range.allows_any(VersionRange(v003, v140)) assert range.allows_any(VersionRange(v140, v300)) assert not range.allows_any(VersionRange(v003, v010)) assert not range.allows_any(VersionRange(v234, v300)) assert not range.allows_any(VersionRange(max=v010)) assert not range.allows_any(VersionRange(v234)) assert range.allows_any(range) # allows a bordering range when both are inclusive assert not VersionRange(max=v250).allows_any(VersionRange(min=v250)) assert not VersionRange(max=v250, include_max=True).allows_any( VersionRange(min=v250) ) assert not VersionRange(max=v250).allows_any( VersionRange(min=v250, include_min=True) ) assert not VersionRange(min=v250).allows_any(VersionRange(max=v250)) assert VersionRange(max=v250, include_max=True).allows_any( VersionRange(min=v250, include_min=True) ) # allows unions that are partially contained' range = VersionRange(v114, v200) assert range.allows_any(VersionRange(v010, v080).union(v140)) assert range.allows_any(VersionRange(v123, v234).union(v300)) assert not range.allows_any(VersionRange(v234, v300).union(v010)) # pre-release min does not allow lesser than itself range = VersionRange(Version.parse("1.9b1"), include_min=True) assert not range.allows_any( VersionRange( Version.parse("1.8.0"), Version.parse("1.9.0"), include_min=True, always_include_max_prerelease=True, ) )
def v080(): return Version.parse("0.8.0")
def v010(): return Version.parse("0.1.0")
def test_parse_constraint_multi_wilcard(input_): assert parse_constraint(input_) == VersionUnion( VersionRange(Version(2, 7, 0), Version(3, 0, 0), True, False), VersionRange(Version(3, 2, 0), None, True, False), )
def test_parse_constraint_multi(input_): assert parse_constraint(input_) == VersionRange(Version(2, 0, 0), Version(3, 0, 0), include_min=False, include_max=True)
def v250(): return Version.parse("2.5.0")
def v123(): return Version.parse("1.2.3")
def v300(): return Version.parse("3.0.0")
def v124(): return Version.parse("1.2.4")
def test_parse_valid(input, version): parsed = Version.parse(input) assert parsed == version assert parsed.text == input
def v130(): return Version.parse("1.3.0")
def v072(): return Version.parse("0.7.2")
def test_equality(): assert Version.parse("1.2.3") == Version.parse("01.2.3") assert Version.parse("1.2.3") == Version.parse("1.02.3") assert Version.parse("1.2.3") == Version.parse("1.2.03") assert Version.parse("1.2.3-1") == Version.parse("1.2.3-01") assert Version.parse("1.2.3+1") == Version.parse("1.2.3+01")