def test_resolve_requirements(self): text = 'apple(linux) >= 1.2.3 kiwi orange(macos) == 6.6.6 pear(ios) lychee(all) corn(desktop) tomato(linux|macos) <= 9.8.7' reqs = RL.parse(text) self.assertEqual([ ('apple', '>=', '1.2.3', 'linux', None, None), ('kiwi', None, None, None, None, None), ('lychee', None, None, 'all', None, None), ('corn', None, None, 'desktop', None, None), ('tomato', '<=', '9.8.7', 'linux|macos', None, None), ], reqs.resolve('linux')) self.assertEqual([ ('kiwi', None, None, None, None, None), ('orange', '==', '6.6.6', 'macos', None, None), ('lychee', None, None, 'all', None, None), ('corn', None, None, 'desktop', None, None), ('tomato', '<=', '9.8.7', 'linux|macos', None, None), ], reqs.resolve('macos')) self.assertEqual([ ('kiwi', None, None, None, None, None), ('pear', None, None, 'ios', None, None), ('lychee', None, None, 'all', None, None), ], reqs.resolve('ios')) self.assertEqual([ ('kiwi', None, None, None, None, None), ('lychee', None, None, 'all', None, None), ], reqs.resolve('android'))
def test_filter_by_system(self): text = 'a(linux) >= 1.2 b(macos) >= 2.3 c(android) >= 3.4 d(desktop) >= 5.6 e(mobile) >= 6.7 f(ios) >= 7.8' r = RL.parse(text) self.assertEqual([ ('a', '>=', '1.2', 'linux', None, None), ('d', '>=', '5.6', 'desktop', None, None), ], r.filter_by_system('linux'))
def _matches_requirement(clazz, pd_string, req_string): assert pd_string assert req_string req = RL.parse(req_string) assert len(req) == 1 assert req[0] req = req[0] pd = PD.parse(pd_string) return pd.matches_requirement(req)
def test_names(self): r = RL.parse( 'a(linux) >= 1.2 b(macos) >= 2.3 c(android) >= 3.4 d(desktop) >= 5.6 e(mobile) >= 6.7 f(ios) >= 7.8' ) self.assertEqual(['a', 'b', 'c', 'd', 'e', 'f'], r.names(include_version=False)) self.assertEqual( ['a-1.2', 'b-2.3', 'c-3.4', 'd-5.6', 'e-6.7', 'f-7.8'], r.names(include_version=True))
def test_parse_requirements(self): self.maxDiff = None requirements = [ 'all: foo >= 1.2.3-1', 'all: bar >= 6.6.6-6', ] expected_requirements = RL.parse( 'foo(all) >= 1.2.3-1 bar(all) >= 6.6.6-6') actual_requirements = PD.parse_requirements(requirements) self.assertEqual(expected_requirements, actual_requirements)
def test_filter_by_hardness(self): text = 'a >= 1.2 RUN b >= 2.3 TOOL c >= 3.4 BUILD d >= 5.6 e >= 6.7' r = RL.parse(text) self.assertEqual([ ('a', '>=', '1.2', None, None, None), ('b', '>=', '2.3', None, requirement_hardness.RUN, None), ('e', '>=', '6.7', None, None, None), ], r.filter_by_hardness('RUN')) self.assertEqual([ ('c', '>=', '3.4', None, requirement_hardness.TOOL, None), ], r.filter_by_hardness('TOOL')) self.assertEqual([ ('d', '>=', '5.6', None, requirement_hardness.BUILD, None), ], r.filter_by_hardness('BUILD'))
def test_filter_by_requirement(self): P = PD.parse l = PDL([ P('foo-1.0.0'), P('foo-1.0.2'), P('foo-1.0.2-1'), P('foo-1.0.2-2'), P('foo-1.0.9'), P('foo-1.0.10'), P('foo-1.0.10-1'), P('foo-1.0.10-2'), ]) self.assertEqual([P('foo-1.0.0')], l.filter_by_requirement(RL.parse('foo == 1.0.0')[0])) self.assertEqual([P('foo-1.0.0'), P('foo-1.0.2')], l.filter_by_requirement(RL.parse('foo <= 1.0.2')[0])) self.assertEqual( [P('foo-1.0.0'), P('foo-1.0.2'), P('foo-1.0.2-1')], l.filter_by_requirement(RL.parse('foo <= 1.0.2-1')[0])) self.assertEqual( [P('foo-1.0.0'), P('foo-1.0.2'), P('foo-1.0.2-1')], l.filter_by_requirement(RL.parse('foo <= 1.0.2-1')[0]))
def test_parse_dups(self): text = 'foo >= 1.2.3 orange >= 6.6.6 bar baz bar orange >= 6.6.6' requirements = RL.parse(text) self.assertEqual([ ('foo', '>=', '1.2.3', None, None, None), ('orange', '>=', '6.6.6', None, None, None), ('bar', None, None, None, None, None), ('baz', None, None, None, None, None), ], requirements) self.assertEqual([ ('foo', '>=', '1.2.3', None, None, None), ('orange', '>=', '6.6.6', None, None, None), ('bar', None, None, None, None, None), ('baz', None, None, None, None, None), ], requirements)
def test_parse_string_seq_list(self): text = [ 'foo >= 1.2.3', 'orange >= 6.6.6', 'bar', 'baz', 'bar', 'orange >= 6.6.6' ] requirements = RL.parse(text) self.assertEqual([ ('foo', '>=', '1.2.3', None, None, None), ('orange', '>=', '6.6.6', None, None, None), ('bar', None, None, None, None, None), ('baz', None, None, None, None, None), ], requirements) self.assertEqual([ ('foo', '>=', '1.2.3', None, None, None), ('orange', '>=', '6.6.6', None, None, None), ('bar', None, None, None, None, None), ('baz', None, None, None, None, None), ], requirements)
class test_package_descriptor(unit_test): BT_LINUX_RELEASE = build_target('linux', '', '', None, ('x86_64'), 'release') BT_MACOS_RELEASE = build_target('macos', '', '', None, ('x86_64'), 'release') BT_LINUX_DEBUG = build_target('linux', '', '', None, ('x86_64'), 'debug') BT_MACOS_DEBUG = build_target('macos', '', '', None, ('x86_64'), 'debug') def test_init(self): self.assertEqual('foo-1.2.3-1', PD('foo', '1.2.3-1', []).full_name) self.assertEqual('foo-1.2.3-1', PD('foo', '1.2.3-1', None).full_name) self.assertEqual('foo-1.2.3-1', PD('foo', '1.2.3-1').full_name) def test_full_name(self): self.assertEqual('foo-1.2.3-1', PD('foo', '1.2.3-1', []).full_name) def test_name_is_valid(self): self.assertTrue(PD.name_is_valid('foo')) self.assertTrue(PD.name_is_valid('foo_bar')) self.assertTrue(PD.name_is_valid('foo-bar')) self.assertFalse(PD.name_is_valid(None)) self.assertFalse(PD.name_is_valid('')) TEST_REQUIREMENTS = RL.parse('d1 >= 1.2.3-1 d2 >= 6.6.6-1', default_system_mask=build_system.ALL) TEST_PROPS = {'a': 5, 'b': 66} def test_to_json(self): self.maxDiff = None expected_json = '''\ { "name": "foo", "properties": {}, "requirements": [ "all: d1 >= 1.2.3-1", "all: d2 >= 6.6.6-1" ], "version": "1.2.3-1" }''' pi = PD('foo', '1.2.3-1', requirements=self.TEST_REQUIREMENTS) actual_json = pi.to_json() self.assertEqualIgnoreWhiteSpace(expected_json, actual_json) def test_parse_json(self): json = '''\ { "version": "1.2.3-1", "name": "foo", "requirements": [ "all: d1 >= 1.2.3-1", "all: d2 >= 6.6.6-1" ] }''' expected_info = PD('foo', '1.2.3-1', requirements=self.TEST_REQUIREMENTS) actual_info = PD.parse_json(json) self.assertEqual(expected_info, actual_info) def test_parse_json_null_requirements(self): json = '''\ { "version": "1.2.3-1", "name": "foo", "requirements": null }''' expected_info = PD('foo', '1.2.3-1') actual_info = PD.parse_json(json) self.assertEqual(expected_info, actual_info) def test_parse_string(self): self.assertEqual(PD('foo', '1.2.3-1'), PD.parse('foo-1.2.3-1')) def test_lt(self): self.assertTrue(PD('foo', '1.2.3-1') < PD('foo', '1.2.3-2')) self.assertTrue(PD('foo', '1.2.3-2') < PD('foo', '1.2.4-1')) self.assertTrue(PD('foo', '1.2.3-1') < PD('foo', '1.2.4.5-1')) def test_properties_to_string(self): self.assertEqual( 'a=5; b=66', PD('foo', '1.2.3-1', properties=self.TEST_PROPS).properties_to_string()) def test_str(self): self.assertEqual('foo-1.2.3-1', str(PD('foo', '1.2.3-1'))) def test_str_with_requirements(self): self.assertEqual( 'foo-1.2.3-1(d1 >= 1.2.3-1 d2 >= 6.6.6-1)', str(PD('foo', '1.2.3-1', requirements=self.TEST_REQUIREMENTS))) def test_str_with_properties(self): self.assertEqual('foo-1.2.3-1(a=5; b=66)', str(PD('foo', '1.2.3-1', properties=self.TEST_PROPS))) def test_str_with_requirements_and_properties(self): self.assertEqual( 'foo-1.2.3-1(d1 >= 1.2.3-1 d2 >= 6.6.6-1; a=5; b=66)', str( PD('foo', '1.2.3-1', requirements=self.TEST_REQUIREMENTS, properties=self.TEST_PROPS))) def test_parse_requirements(self): self.maxDiff = None requirements = [ 'all: foo >= 1.2.3-1', 'all: bar >= 6.6.6-6', ] expected_requirements = RL.parse( 'foo(all) >= 1.2.3-1 bar(all) >= 6.6.6-6') actual_requirements = PD.parse_requirements(requirements) self.assertEqual(expected_requirements, actual_requirements) def _full_name_cmp(self, s1, s2): pi1 = PD.parse(s1) p12 = PD.parse(s2) return PD.full_name_cmp(pi1, p12) def test_full_name_cmp(self): self.assertEqual(0, self._full_name_cmp('foo-1.2.3-1', 'foo-1.2.3-1')) self.assertEqual(1, self._full_name_cmp('foo-1.2.4-1', 'foo-1.2.3-1')) self.assertEqual(1, self._full_name_cmp('foo-1.2.3-2', 'foo-1.2.3-1')) def test_tarball_filename(self): self.assertEqual('foo-1.2.3-1.tar.gz', PD('foo', '1.2.3-1').tarball_filename) def xtest_artifact_path(self): self.assertEqual( 'macos/x86_64/release/foo-1.2.3-1.tar.gz', PD('foo', '1.2.3-1').artifact_path(self.BT_MACOS_RELEASE)) # self.assertEqual( 'macos/x86_64/debug/foo-1.2.3-1.tar.gz', PD('foo', '1.2.3-1').artifact_path(self.BT_MACOS_DEBUG) ) # self.assertEqual( 'linux/x86_64/release/foo-1.2.3-1.tar.gz', PD('foo', '1.2.3-1').artifact_path(self.BT_LINUX_RELEASE) ) # self.assertEqual( 'linux/x86_64/debug/foo-1.2.3-1.tar.gz', PD('foo', '1.2.3-1').artifact_path(self.BT_LINUX_DEBUG) ) def test_matches_requirement_eq(self): self.assertEqual( True, self._matches_requirement('foo-1.2.2', 'foo == 1.2.2')) self.assertEqual( True, self._matches_requirement('foo-1.2.2-1', 'foo == 1.2.2-1')) self.assertEqual(True, self._matches_requirement('foo-1.2', 'foo == 1.2')) self.assertEqual(True, self._matches_requirement('foo-1', 'foo == 1')) self.assertEqual( False, self._matches_requirement('foo-1.2.3', 'foo == 1.2.2')) self.assertEqual( False, self._matches_requirement('foo-1.2.2-2', 'foo == 1.2.2-1')) self.assertEqual(False, self._matches_requirement('foo-1.2', 'foo == 1.1')) self.assertEqual(False, self._matches_requirement('foo-2', 'foo == 1')) self.assertEqual(True, self._matches_requirement('foo-1.0', 'foo == 1.0')) self.assertEqual( True, self._matches_requirement('foo-1.0-0', 'foo == 1.0-0')) self.assertEqual(True, self._matches_requirement('foo-1.0-0', 'foo == 1.0')) def test_matches_requirement_le(self): self.assertEqual( True, self._matches_requirement('foo-1.2.2', 'foo <= 1.2.2')) self.assertEqual( True, self._matches_requirement('foo-1.2.2', 'foo <= 1.2.3')) self.assertEqual( False, self._matches_requirement('foo-1.2.2', 'foo <= 1.2.1')) self.assertEqual( False, self._matches_requirement('foo-1.2.2-1', 'foo <= 1.2.1-0')) self.assertEqual( False, self._matches_requirement('foo-1.2.2-0', 'foo <= 1.2.1-1')) self.assertEqual( True, self._matches_requirement('foo-1.2.2-0', 'foo <= 1.2.2-0')) self.assertEqual( False, self._matches_requirement('foo-1.2.2', 'foo <= 1.2.1-1')) def test_matches_requirement_lt(self): self.assertEqual(False, self._matches_requirement('foo-1.2.2', 'foo < 1.2.2')) self.assertEqual(True, self._matches_requirement('foo-1.2.2', 'foo < 1.2.3')) self.assertEqual(False, self._matches_requirement('foo-1.2.2', 'foo < 1.2.1')) self.assertEqual( False, self._matches_requirement('foo-1.2.2-1', 'foo < 1.2.1-0')) self.assertEqual( False, self._matches_requirement('foo-1.2.2-0', 'foo < 1.2.1-1')) self.assertEqual( False, self._matches_requirement('foo-1.2.2-0', 'foo < 1.2.2-0')) self.assertEqual( True, self._matches_requirement('foo-1.2.0', 'foo < 1.2.1-1')) self.assertEqual( False, self._matches_requirement('foo-1.2.0', 'foo < 1.2.0-0')) @classmethod def _matches_requirement(clazz, pd_string, req_string): assert pd_string assert req_string req = RL.parse(req_string) assert len(req) == 1 assert req[0] req = req[0] pd = PD.parse(pd_string) return pd.matches_requirement(req)