# Copyright 2010-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from portage.tests import TestCase from portage.dep import get_required_use_flags from portage.exception import InvalidDependString class TestCheckRequiredUse(TestCase): def testCheckRequiredUse(self): test_cases = ( ("a b c", ["a", "b", "c"]), ("|| ( a b c )", ["a", "b", "c"]), ("^^ ( a b c )", ["a", "b", "c"]), ("?? ( a b c )", ["a", "b", "c"]), ("?? ( )", []), ("|| ( a b ^^ ( d e f ) )", ["a", "b", "d", "e", "f"]), ("^^ ( a b || ( d e f ) )", ["a", "b", "d", "e", "f"]), ("( ^^ ( a ( b ) ( || ( ( d e ) ( f ) ) ) ) )", ["a", "b", "d", "e", "f"]), ("a? ( ^^ ( b c ) )", ["a", "b", "c"]), ("a? ( ^^ ( !b !d? ( c ) ) )", ["a", "b", "c", "d"]), ) test_cases_xfail = ( ("^^ ( || ( a b ) ^^ ( b c )"), ("^^( || ( a b ) ^^ ( b c ) )"), ("^^ || ( a b ) ^^ ( b c )"), ("^^ ( ( || ) ( a b ) ^^ ( b c ) )"), ("^^ ( || ( a b ) ) ^^ ( b c ) )"), ) for required_use, expected in test_cases: result = get_required_use_flags(required_use) expected = set(expected) self.assertEqual(result, expected, \ "REQUIRED_USE: '%s', expected: '%s', got: '%s'" % (required_use, expected, result)) for required_use in test_cases_xfail: self.assertRaisesMsg("REQUIRED_USE: '%s'" % (required_use,), \ InvalidDependString, get_required_use_flags, required_use)