示例#1
0
    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'))
示例#2
0
 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'))
示例#3
0
 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)
示例#4
0
 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))
示例#5
0
    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)
示例#6
0
 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'))
示例#7
0
 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]))
示例#8
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)
示例#9
0
 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)
示例#10
0
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)