# Copyright 2011-2019 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 from portage.tests import TestCase from portage.tests.resolver.ResolverPlayground import (ResolverPlayground, ResolverPlaygroundTestCase) class KeywordsTestCase(TestCase): def testStableConfig(self): # Only accept stable keywords for a particular ARCH. user_config = { 'package.accept_keywords': ( '*/* -* x86', ), } ebuilds = { 'app-misc/A-1': {'KEYWORDS': 'x86'}, 'app-misc/B-1': {'KEYWORDS': '~x86'}, 'app-misc/C-1': {'KEYWORDS': '*'}, 'app-misc/D-1': {'KEYWORDS': '~*'}, 'app-misc/E-1': {'KEYWORDS': 'arm'}, 'app-misc/F-1': {'KEYWORDS': '~arm'}, 'app-misc/G-1': {'KEYWORDS': ''}, } test_cases = ( ResolverPlaygroundTestCase( ['app-misc/A'], success = True, mergelist = ['app-misc/A-1']), ResolverPlaygroundTestCase( ['app-misc/B'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/B-1',), mergelist = ['app-misc/B-1']), ResolverPlaygroundTestCase( ['app-misc/C'], success = True, mergelist = ['app-misc/C-1']), ResolverPlaygroundTestCase( ['app-misc/D'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/D-1',), mergelist = ['app-misc/D-1']), ResolverPlaygroundTestCase( ['app-misc/E'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/E-1',), mergelist = ['app-misc/E-1']), ResolverPlaygroundTestCase( ['app-misc/F'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/F-1',), mergelist = ['app-misc/F-1']), ResolverPlaygroundTestCase( ['app-misc/G'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/G-1',), mergelist = ['app-misc/G-1']), ) playground = ResolverPlayground(ebuilds=ebuilds, user_config=user_config) try: for test_case in test_cases: playground.run_TestCase(test_case) self.assertEqual(test_case.test_success, True, test_case.fail_msg) finally: playground.cleanup() def testAnyStableConfig(self): # Accept stable keywords for any ARCH. user_config = { 'package.accept_keywords': ( '*/* -* *', ), } ebuilds = { 'app-misc/A-1': {'KEYWORDS': 'x86'}, 'app-misc/B-1': {'KEYWORDS': '~x86'}, 'app-misc/C-1': {'KEYWORDS': '*'}, 'app-misc/D-1': {'KEYWORDS': '~*'}, 'app-misc/E-1': {'KEYWORDS': 'arm'}, 'app-misc/F-1': {'KEYWORDS': '~arm'}, 'app-misc/G-1': {'KEYWORDS': ''}, } test_cases = ( ResolverPlaygroundTestCase( ['app-misc/A'], success = True, mergelist = ['app-misc/A-1']), ResolverPlaygroundTestCase( ['app-misc/B'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/B-1',), mergelist = ['app-misc/B-1']), ResolverPlaygroundTestCase( ['app-misc/C'], success = True, mergelist = ['app-misc/C-1']), ResolverPlaygroundTestCase( ['app-misc/D'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/D-1',), mergelist = ['app-misc/D-1']), ResolverPlaygroundTestCase( ['app-misc/E'], success = True, mergelist = ['app-misc/E-1']), ResolverPlaygroundTestCase( ['app-misc/F'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/F-1',), mergelist = ['app-misc/F-1']), ResolverPlaygroundTestCase( ['app-misc/G'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/G-1',), mergelist = ['app-misc/G-1']), ) playground = ResolverPlayground(ebuilds=ebuilds, user_config=user_config) try: for test_case in test_cases: playground.run_TestCase(test_case) self.assertEqual(test_case.test_success, True, test_case.fail_msg) finally: playground.cleanup() def testUnstableConfig(self): # Accept stable and unstable keywords for a particular ARCH. user_config = { 'package.accept_keywords': ( '*/* -* x86 ~x86', ), } ebuilds = { 'app-misc/A-1': {'KEYWORDS': 'x86'}, 'app-misc/B-1': {'KEYWORDS': '~x86'}, 'app-misc/C-1': {'KEYWORDS': '*'}, 'app-misc/D-1': {'KEYWORDS': '~*'}, 'app-misc/E-1': {'KEYWORDS': 'arm'}, 'app-misc/F-1': {'KEYWORDS': '~arm'}, 'app-misc/G-1': {'KEYWORDS': ''}, } test_cases = ( ResolverPlaygroundTestCase( ['app-misc/A'], success = True, mergelist = ['app-misc/A-1']), ResolverPlaygroundTestCase( ['app-misc/B'], success = True, mergelist = ['app-misc/B-1']), ResolverPlaygroundTestCase( ['app-misc/C'], success = True, mergelist = ['app-misc/C-1']), ResolverPlaygroundTestCase( ['app-misc/D'], success = True, mergelist = ['app-misc/D-1']), ResolverPlaygroundTestCase( ['app-misc/E'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/E-1',), mergelist = ['app-misc/E-1']), ResolverPlaygroundTestCase( ['app-misc/F'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/F-1',), mergelist = ['app-misc/F-1']), ResolverPlaygroundTestCase( ['app-misc/G'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/G-1',), mergelist = ['app-misc/G-1']), ) playground = ResolverPlayground(ebuilds=ebuilds, user_config=user_config) try: for test_case in test_cases: playground.run_TestCase(test_case) self.assertEqual(test_case.test_success, True, test_case.fail_msg) finally: playground.cleanup() def testAnyUnstableConfig(self): # Accept unstable keywords for any ARCH. user_config = { 'package.accept_keywords': ( '*/* -* * ~*', ), } ebuilds = { 'app-misc/A-1': {'KEYWORDS': 'x86'}, 'app-misc/B-1': {'KEYWORDS': '~x86'}, 'app-misc/C-1': {'KEYWORDS': '*'}, 'app-misc/D-1': {'KEYWORDS': '~*'}, 'app-misc/E-1': {'KEYWORDS': 'arm'}, 'app-misc/F-1': {'KEYWORDS': '~arm'}, 'app-misc/G-1': {'KEYWORDS': ''}, } test_cases = ( ResolverPlaygroundTestCase( ['app-misc/A'], success = True, mergelist = ['app-misc/A-1']), ResolverPlaygroundTestCase( ['app-misc/B'], success = True, mergelist = ['app-misc/B-1']), ResolverPlaygroundTestCase( ['app-misc/C'], success = True, mergelist = ['app-misc/C-1']), ResolverPlaygroundTestCase( ['app-misc/D'], success = True, mergelist = ['app-misc/D-1']), ResolverPlaygroundTestCase( ['app-misc/E'], success = True, mergelist = ['app-misc/E-1']), ResolverPlaygroundTestCase( ['app-misc/F'], success = True, mergelist = ['app-misc/F-1']), ResolverPlaygroundTestCase( ['app-misc/G'], success = False, options={'--autounmask': True}, unstable_keywords = ('app-misc/G-1',), mergelist = ['app-misc/G-1']), ) playground = ResolverPlayground(ebuilds=ebuilds, user_config=user_config) try: for test_case in test_cases: playground.run_TestCase(test_case) self.assertEqual(test_case.test_success, True, test_case.fail_msg) finally: playground.cleanup() def testIgnoreKeywordsConfig(self): # Ignore keywords entirely (accept **) user_config = { 'package.accept_keywords': ( '*/* -* **', ), } ebuilds = { 'app-misc/A-1': {'KEYWORDS': 'x86'}, 'app-misc/B-1': {'KEYWORDS': '~x86'}, 'app-misc/C-1': {'KEYWORDS': '*'}, 'app-misc/D-1': {'KEYWORDS': '~*'}, 'app-misc/E-1': {'KEYWORDS': 'arm'}, 'app-misc/F-1': {'KEYWORDS': '~arm'}, 'app-misc/G-1': {'KEYWORDS': ''}, } test_cases = ( ResolverPlaygroundTestCase( ['app-misc/A'], success = True, mergelist = ['app-misc/A-1']), ResolverPlaygroundTestCase( ['app-misc/B'], success = True, mergelist = ['app-misc/B-1']), ResolverPlaygroundTestCase( ['app-misc/C'], success = True, mergelist = ['app-misc/C-1']), ResolverPlaygroundTestCase( ['app-misc/D'], success = True, mergelist = ['app-misc/D-1']), ResolverPlaygroundTestCase( ['app-misc/E'], success = True, mergelist = ['app-misc/E-1']), ResolverPlaygroundTestCase( ['app-misc/F'], success = True, mergelist = ['app-misc/F-1']), ResolverPlaygroundTestCase( ['app-misc/G'], success = True, mergelist = ['app-misc/G-1']), ) playground = ResolverPlayground(ebuilds=ebuilds, user_config=user_config) try: for test_case in test_cases: playground.run_TestCase(test_case) self.assertEqual(test_case.test_success, True, test_case.fail_msg) finally: playground.cleanup()