def test_parser_toolchain_regex(self): """Test the ToolchainVersionOperator parser""" top = ToolchainVersionOperator() _, tcs = search_toolchain('') tc_names = [x.NAME for x in tcs] for tc in tc_names: # test all known toolchain names # test version expressions with optional version operator ok_tests = [ ("%s >= 1.2.3" % tc, None), # only dict repr for == operator ("%s == 1.2.3" % tc, {'name': tc, 'version': '1.2.3'}), (tc, None), # only toolchain name, no dict repr (default operator is >=, version is 0.0.0) ] for txt, as_dict in ok_tests: self.assertTrue(top.regex.search(txt), "%s matches toolchain section marker regex" % txt) tcversop = ToolchainVersionOperator(txt) self.assertTrue(tcversop) self.assertEqual(tcversop.as_dict(), as_dict) # only accept known toolchain names fail_tests = [ "x%s >= 1.2.3" % tc, "%sx >= 1.2.3" % tc, "foo", ">= 1.2.3", ] for txt in fail_tests: self.assertFalse(top.regex.search(txt), "%s doesn't match toolchain section marker regex" % txt) tcv = ToolchainVersionOperator(txt) self.assertEqual(tcv.tc_name, None) self.assertEqual(tcv.tcversop_str, None)
def test_parser_toolchain_regex(self): """Test the ToolchainVersionOperator parser""" top = ToolchainVersionOperator() _, tcs = search_toolchain('') tc_names = [x.NAME for x in tcs] for tc in tc_names: # test all known toolchain names # test version expressions with optional version operator ok_tests = [ "%s >= 1.2.3" % tc, "%s 1.2.3" % tc, tc, ] for txt in ok_tests: self.assertTrue(top.regex.search(txt), "%s matches toolchain section marker regex" % txt) self.assertTrue(ToolchainVersionOperator(txt)) # only accept known toolchain names fail_tests = [ "x%s >= 1.2.3" % tc, "%sx >= 1.2.3" % tc, "foo", ">= 1.2.3", ] for txt in fail_tests: self.assertFalse(top.regex.search(txt), "%s doesn't match toolchain section marker regex" % txt) self.assertFalse(ToolchainVersionOperator(txt))
def test_hashing(self): """Test hashing of VersionOperator and ToolchainVersionOperator instances.""" test_cases = [ VersionOperator('1.2.3'), VersionOperator('> 1.2.3'), ToolchainVersionOperator('foo'), ToolchainVersionOperator('foo > 1.2.3'), ] for test_case in test_cases: self.assertTrue(hash(test_case))
def test_toolchain_versop_test(self): """Test the ToolchainVersionOperator test""" _, tcs = search_toolchain('') tc_names = [x.NAME for x in tcs] for tc in tc_names: # test all known toolchain names # test version expressions with optional version operator tests = [ ("%s >= 1.2.3" % tc, ( (tc, '1.2.3', True), # version ok, name ok (tc, '1.2.4', True), # version ok, name ok (tc, '1.2.2', False), # version not ok, name ok ('x' + tc, '1.2.3', False), # version ok, name not ok ('x' + tc, '1.2.2', False), # version not ok, name not ok )), ] for txt, subtests in tests: tcversop = ToolchainVersionOperator(txt) for name, version, res in subtests: self.assertEqual(tcversop.test(name, version), res)
def test_dependency(self): """Test Dependency class""" versop_str = '>= 1.5' tc_versop_str = 'GCC >= 3.0' versop = VersionOperator(versop_str) tc_versop = ToolchainVersionOperator(tc_versop_str) txt = Dependency.SEPARATOR_DEP.join([versop_str]) dest = {'versop':versop} res = Dependency(txt) self.assertEqual(dest, res) self.assertEqual(str(res), txt) txt = Dependency.SEPARATOR_DEP.join([versop_str, tc_versop_str]) dest = {'versop':versop, 'tc_versop':tc_versop} res = Dependency(txt) self.assertEqual(dest, res) self.assertEqual(str(res), txt)
def _from_string(self, txt): """Convert from string versop_str;tc_versop_str -> {'versop': versop, 'tc_versop': tc_versop} """ res = {} items = self._split_string(txt, sep=self.SEPARATOR_DEP) if len(items) < 1 or len(items) > 2: msg = 'Dependency has at least one element (a version operator string), ' msg += 'and at most 2 (2nd element the toolchain version operator string). ' msg += 'Separator %s.' % self.SEPARATOR_DEP raise ValueError(msg) res['versop'] = VersionOperator(items[0]) if len(items) > 1: res['tc_versop'] = ToolchainVersionOperator(items[1]) return res