def test_list_package_requirements(self, test_recipebook): pkg = ("baton-pkg", "3.0.1") assert test_recipebook.package_requirements(pkg) == \ {("irods-dev", VersionSpec("4.2.7")), ("irods-dev", VersionSpec("4.2.8")), ("libjansson-dev", None), ("libssl-dev", None)}
def test_version_spec_3(self): v1 = VersionSpec('1.7.1*') v2 = VersionSpec('1.7.1.*') self.assertFalse(v1.is_exact()) self.assertFalse(v2.is_exact()) self.assertTrue(v1 == v2) self.assertFalse(v1 != v2) self.assertEqual(hash(v1), hash(v2))
def test_version_spec_4(self): v1 = VersionSpec('1.7.1*,1.8.1*') v2 = VersionSpec('1.7.1.*,1.8.1.*') v3 = VersionSpec('1.7.1*,1.8.1.*') assert v1.is_exact() is False assert v2.is_exact() is False assert v1 == v2 == v3 assert not v1 != v2 assert hash(v1) == hash(v2) == hash(v3)
def check_result(all_versions, acceptable_versions, expected_range): version_ranges = find_version_ranges(all_versions, acceptable_versions) assert expected_range == version_ranges if expected_range: specifier = VersionSpec(expected_range) try: assert all(specifier.any_match(v) for v in acceptable_versions) except AttributeError: assert all(specifier.match(v) for v in acceptable_versions)
def test_local_identifier(self): """The separator for the local identifier should be either `.` or `+`""" # a valid versionstr should match itself versions = ( '1.7.0' '1.7.0.post123' '1.7.0.post123.gabcdef9', '1.7.0.post123+gabcdef9', ) for version in versions: m = VersionSpec(version) self.assertTrue(m.match(version))
def test_local_identifier(self): """The separator for the local identifier should be either `.` or `+`""" # a valid versionstr should match itself versions = ( '1.7.0' '1.7.0.post123' '1.7.0.post123.gabcdef9', '1.7.0.post123+gabcdef9', ) for version in versions: m = VersionSpec(version) self.assertTrue(m.match(version))
def test_version_spec_1(self): v1 = VersionSpec('1.7.1') v2 = VersionSpec('1.7.1*') v3 = VersionSpec('1.7.1') self.assertTrue(v1.is_exact()) self.assertFalse(v2.is_exact()) self.assertTrue(v1 == v3) self.assertFalse(v1 != v3) self.assertTrue(v1 != v2) self.assertFalse(v1 == v2) self.assertTrue(v1 != 1.0) self.assertFalse(v1 == 1.0) self.assertEqual(hash(v1), hash(v3)) self.assertNotEqual(hash(v1), hash(v2))
def test_compatible_release_versions(self): assert VersionSpec("~=1.10").match("1.11.0") assert not VersionSpec("~=1.10.0").match("1.11.0") assert not VersionSpec("~=3.3.2").match("3.4.0") assert not VersionSpec("~=3.3.2").match("3.3.1") assert VersionSpec("~=3.3.2").match("3.3.2.0") assert VersionSpec("~=3.3.2").match("3.3.3") assert VersionSpec("~=3.3.2|==2.2").match("2.2.0") assert VersionSpec("~=3.3.2|==2.2").match("3.3.3") assert not VersionSpec("~=3.3.2|==2.2").match("2.2.1") with pytest.raises(InvalidVersionSpec): VersionSpec("~=3.3.2.*")
def test_compound_versions(self): vs = VersionSpec('>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*') assert not vs.match('2.6.8') assert vs.match('2.7.2') assert not vs.match('3.3') assert not vs.match('3.3.4') assert vs.match('3.4') assert vs.match('3.4a')
def test_version_spec_2(self): v1 = VersionSpec('( (1.5|((1.6|1.7), 1.8), 1.9 |2.0))|2.1') self.assertEqual(v1.spec, '1.5|1.6|1.7,1.8,1.9|2.0|2.1') self.assertRaises(InvalidVersionSpecError, VersionSpec, '(1.5') self.assertRaises(InvalidVersionSpecError, VersionSpec, '1.5)') self.assertRaises(InvalidVersionSpecError, VersionSpec, '1.5||1.6') self.assertRaises(InvalidVersionSpecError, VersionSpec, '^1.5')
def test_compound_versions(self): vs = VersionSpec('>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*') assert not vs.match('2.6.8') assert vs.match('2.7.2') assert not vs.match('3.3') assert not vs.match('3.3.4') assert vs.match('3.4') assert vs.match('3.4a')
def test_match(self): for vspec, res in [ ('1.7.*', True), ('1.7.1', True), ('1.7.0', False), ('1.7', False), ('1.5.*', False), ('>=1.5', True), ('!=1.5', True), ('!=1.7.1', False), ('==1.7.1', True), ('==1.7', False), ('==1.7.2', False), ('==1.7.1.0', True), ('1.7.*|1.8.*', True), # ('1.8/*|1.9.*', False), what was this supposed to be? ('>1.7,<1.8', True), ('>1.7.1,<1.8', False), ('^1.7.1$', True), ('^1\.7\.1$', True), ('^1\.7\.[0-9]+$', True), ('^1\.8.*$', False), ('^1\.[5-8]\.1$', True), ('^[^1].*$', False), ('^[0-9+]+\.[0-9+]+\.[0-9]+$', True), ('^$', False), ('^.*$', True), ('1.7.*|^0.*$', True), ('1.6.*|^0.*$', False), ('1.6.*|^0.*$|1.7.1', True), ('^0.*$|1.7.1', True), ('1.6.*|^.*\.7\.1$|0.7.1', True), ('*', True), ('1.*.1', True), ('1.5.*|>1.7,<1.8', True), ('1.5.*|>1.7,<1.7.1', False), ]: m = VersionSpec(vspec) assert VersionSpec(m) is m assert str(m) == vspec assert repr(m) == "VersionSpec('%s')" % vspec assert m.match('1.7.1') == res, vspec
def test_version_spec_4(self): v1 = VersionSpec('1.7.1*,1.8.1*') v2 = VersionSpec('1.7.1.*,1.8.1.*') v3 = VersionSpec('1.7.1*,1.8.1.*') assert v1.is_exact() is False assert v2.is_exact() is False assert v1 == v2 == v3 assert not v1 != v2 assert hash(v1) == hash(v2) == hash(v3)
def test_match(self): for vspec, res in [ ('1.7.*', True), ('1.7.1', True), ('1.7.0', False), ('1.7', False), ('1.5.*', False), ('>=1.5', True), ('!=1.5', True), ('!=1.7.1', False), ('==1.7.1', True), ('==1.7', False), ('==1.7.2', False), ('==1.7.1.0', True), ('1.7.*|1.8.*', True), # ('1.8/*|1.9.*', False), what was this supposed to be? ('>1.7,<1.8', True), ('>1.7.1,<1.8', False), ('^1.7.1$', True), ('^1\.7\.1$', True), ('^1\.7\.[0-9]+$', True), ('^1\.8.*$', False), ('^1\.[5-8]\.1$', True), ('^[^1].*$', False), ('^[0-9+]+\.[0-9+]+\.[0-9]+$', True), ('^$', False), ('^.*$', True), ('1.7.*|^0.*$', True), ('1.6.*|^0.*$', False), ('1.6.*|^0.*$|1.7.1', True), ('^0.*$|1.7.1', True), ('1.6.*|^.*\.7\.1$|0.7.1', True), ('*', True), ('1.*.1', True), ('1.5.*|>1.7,<1.8', True), ('1.5.*|>1.7,<1.7.1', False), ]: m = VersionSpec(vspec) assert VersionSpec(m) is m assert str(m) == vspec assert repr(m) == "VersionSpec('%s')" % vspec assert m.match('1.7.1') == res, vspec
def test_version_spec_3(self): v1 = VersionSpec('1.7.1*') v2 = VersionSpec('1.7.1.*') self.assertFalse(v1.is_exact()) self.assertFalse(v2.is_exact()) self.assertTrue(v1 == v2) self.assertFalse(v1 != v2) self.assertEqual(hash(v1), hash(v2))
def version_eq2ge(spec, except_package_list=None): if (except_package_list is None) or (spec.name not in except_package_list): # noinspection PyProtectedMember kwargs = { key: value for key, value in spec._match_components.items() if key == "channel" } spec = MatchSpec( version=VersionSpec(">=" + str(spec.version.matcher_vo)), name=spec.name, **kwargs, ) return spec
def test_version_spec(self): v1 = VersionSpec('1.7.1') v2 = VersionSpec('1.7.1*') v3 = VersionSpec('1.7.1') self.assertTrue(v1.is_exact()) self.assertFalse(v2.is_exact()) self.assertTrue(v1 == v3) self.assertFalse(v1 != v3) self.assertTrue(v1 != v2) self.assertFalse(v1 == v2) self.assertTrue(v1 != 1.0) self.assertFalse(v1 == 1.0) self.assertEqual(hash(v1), hash(v3)) self.assertNotEqual(hash(v1), hash(v2)) v1 = VersionSpec('( (1.5|((1.6|1.7), 1.8), 1.9 |2.0))|2.1') self.assertEqual(v1.spec, '1.5|(1.6|1.7),1.8,1.9|2.0|2.1') self.assertRaises(InvalidVersionSpecError, VersionSpec, '(1.5') self.assertRaises(InvalidVersionSpecError, VersionSpec, '1.5)') self.assertRaises(InvalidVersionSpecError, VersionSpec, '1.5||1.6') self.assertRaises(InvalidVersionSpecError, VersionSpec, '^1.5')
def test_version_spec_1(self): v1 = VersionSpec('1.7.1') v2 = VersionSpec('1.7.1*') v3 = VersionSpec('1.7.1') self.assertTrue(v1.is_exact()) self.assertFalse(v2.is_exact()) self.assertTrue(v1 == v3) self.assertFalse(v1 != v3) self.assertTrue(v1 != v2) self.assertFalse(v1 == v2) self.assertTrue(v1 != 1.0) self.assertFalse(v1 == 1.0) self.assertEqual(hash(v1), hash(v3)) self.assertNotEqual(hash(v1), hash(v2))
def test_dist(self): with env_unmodified(conda_tests_ctxt_mgmt_def_pol): dst = Dist('defaults::foo-1.2.3-4.tar.bz2') a = MatchSpec(dst) b = MatchSpec(a) c = MatchSpec(dst, optional=True, target='burg') d = MatchSpec(a, build='5') assert a == b assert hash(a) == hash(b) assert a is b assert a != c assert hash(a) != hash(c) assert a != d assert hash(a) != hash(d) p = MatchSpec(channel='defaults',name='python',version=VersionSpec('3.5*')) assert p.match(Dist(channel='defaults', dist_name='python-3.5.3-1', name='python', version='3.5.3', build_string='1', build_number=1, base_url=None, platform=None)) assert not p.match(Dist(channel='defaults', dist_name='python-3.6.0-0', name='python', version='3.6.0', build_string='0', build_number=0, base_url=None, platform=None)) assert p.match(Dist(channel='defaults', dist_name='python-3.5.1-0', name='python', version='3.5.1', build_string='0', build_number=0, base_url=None, platform=None)) assert p.match(PackageRecord(name='python', version='3.5.1', build='0', build_number=0, depends=('openssl 1.0.2*', 'readline 6.2*', 'sqlite', 'tk 8.5*', 'xz 5.0.5', 'zlib 1.2*', 'pip'), channel=Channel(scheme='https', auth=None, location='repo.anaconda.com', token=None, name='pkgs/main', platform='osx-64', package_filename=None), subdir='osx-64', fn='python-3.5.1-0.tar.bz2', md5='a813bc0a32691ab3331ac9f37125164c', size=14678857, priority=0, url='https://repo.anaconda.com/pkgs/main/osx-64/python-3.5.1-0.tar.bz2'))
def test_not_eq_star(self): assert VersionSpec("=3.3").match("3.3.1") assert VersionSpec("=3.3").match("3.3") assert not VersionSpec("=3.3").match("3.4") assert VersionSpec("3.3.*").match("3.3.1") assert VersionSpec("3.3.*").match("3.3") assert not VersionSpec("3.3.*").match("3.4") assert VersionSpec("=3.3.*").match("3.3.1") assert VersionSpec("=3.3.*").match("3.3") assert not VersionSpec("=3.3.*").match("3.4") assert not VersionSpec("!=3.3.*").match("3.3.1") assert VersionSpec("!=3.3.*").match("3.4") assert VersionSpec("!=3.3.*").match("3.4.1") assert VersionSpec("!=3.3").match("3.3.1") assert not VersionSpec("!=3.3").match("3.3.0.0") assert not VersionSpec("!=3.3.*").match("3.3.0.0")
def test_invalid_version_specs(self): with pytest.raises(InvalidVersionSpec): VersionSpec("~") with pytest.raises(InvalidVersionSpec): VersionSpec("^")
def test_pep_440_arbitrary_equality_operator(self): # We're going to leave the not implemented for now. with pytest.raises(InvalidVersionSpec): VersionSpec("===3.3.2")