# Copyright 2014 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from __future__ import unicode_literals import io from portage import os, _encodings from portage.tests import TestCase from portage.tests.resolver.ResolverPlayground import ( ResolverPlayground, ResolverPlaygroundTestCase) from portage.util import ensure_dirs class ProfilePackageSetTestCase(TestCase): def testProfilePackageSet(self): repo_configs = { "test_repo": { "layout.conf": ("profile-formats = profile-set",), } } profiles = ( ( 'default/linux', { "eapi": ("5",), "packages": ( "*sys-libs/A", "app-misc/A", "app-misc/B", "app-misc/C", ), } ), ( 'default/linux/x86', { "eapi": ("5",), "packages": ( "-app-misc/B", ), "parent": ("..",) } ), ) ebuilds = { "sys-libs/A-1": { "EAPI": "5", }, "app-misc/A-1": { "EAPI": "5", }, "app-misc/B-1": { "EAPI": "5", }, "app-misc/C-1": { "EAPI": "5", }, } installed = { "sys-libs/A-1": { "EAPI": "5", }, "app-misc/A-1": { "EAPI": "5", }, "app-misc/B-1": { "EAPI": "5", }, "app-misc/C-1": { "EAPI": "5", }, } test_cases = ( ResolverPlaygroundTestCase( ["@world"], options={"--update": True, "--deep": True}, mergelist = [], success = True, ), ResolverPlaygroundTestCase( [], options={"--depclean": True}, success=True, cleanlist=["app-misc/B-1"] ), ) playground = ResolverPlayground(debug=False, ebuilds=ebuilds, installed=installed, repo_configs=repo_configs) try: repo_dir = (playground.settings.repositories. get_location_for_name("test_repo")) profile_root = os.path.join(repo_dir, "profiles") for p, data in profiles: prof_path = os.path.join(profile_root, p) ensure_dirs(prof_path) for k, v in data.items(): with io.open(os.path.join(prof_path, k), mode="w", encoding=_encodings["repo.content"]) as f: for line in v: f.write("%s\n" % line) # The config must be reloaded in order to account # for the above profile customizations. playground.reload_config() 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()