1 # Copyright 2011 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
4 from portage.tests import TestCase
5 from portage.tests.resolver.ResolverPlayground import (ResolverPlayground,
6 ResolverPlaygroundTestCase)
8 class MergeOrderTestCase(TestCase):
10 def testMergeOrder(self):
12 "app-misc/blocker-buildtime-a-1" : {},
13 "app-misc/blocker-runtime-a-1" : {},
14 "app-misc/blocker-runtime-hard-a-1" : {},
15 "app-misc/circ-post-runtime-a-1": {
16 "PDEPEND": "app-misc/circ-post-runtime-b",
18 "app-misc/circ-post-runtime-b-1": {
19 "RDEPEND": "app-misc/circ-post-runtime-a",
21 "app-misc/circ-runtime-a-1": {
22 "RDEPEND": "app-misc/circ-runtime-b",
24 "app-misc/circ-runtime-b-1": {
25 "RDEPEND": "app-misc/circ-runtime-a",
27 "app-misc/installed-blocker-a-1" : {
29 "DEPEND" : "!app-misc/blocker-buildtime-a",
30 "RDEPEND" : "!app-misc/blocker-runtime-a !!app-misc/blocker-runtime-hard-a",
32 "app-misc/some-app-a-1": {
33 "RDEPEND": "app-misc/circ-runtime-a app-misc/circ-runtime-b",
35 "app-misc/some-app-b-1": {
36 "RDEPEND": "app-misc/circ-post-runtime-a app-misc/circ-post-runtime-b",
41 "app-misc/installed-blocker-a-1" : {
43 "DEPEND" : "!app-misc/blocker-buildtime-a",
44 "RDEPEND" : "!app-misc/blocker-runtime-a !!app-misc/blocker-runtime-hard-a",
49 ResolverPlaygroundTestCase(
50 ["app-misc/some-app-a"],
52 ambigous_merge_order = True,
53 mergelist = [("app-misc/circ-runtime-a-1", "app-misc/circ-runtime-b-1"), "app-misc/some-app-a-1"]),
54 ResolverPlaygroundTestCase(
55 ["app-misc/some-app-a"],
57 ambigous_merge_order = True,
58 mergelist = [("app-misc/circ-runtime-b-1", "app-misc/circ-runtime-a-1"), "app-misc/some-app-a-1"]),
59 # Test optimal merge order for a circular dep that is
60 # RDEPEND in one direction and PDEPEND in the other.
61 ResolverPlaygroundTestCase(
62 ["app-misc/some-app-b"],
64 mergelist = ["app-misc/circ-post-runtime-a-1", "app-misc/circ-post-runtime-b-1", "app-misc/some-app-b-1"]),
65 # installed package has buildtime-only blocker
66 # that should be ignored
67 ResolverPlaygroundTestCase(
68 ["app-misc/blocker-buildtime-a"],
70 mergelist = ["app-misc/blocker-buildtime-a-1"]),
71 # installed package has runtime blocker that
72 # should cause it to be uninstalled
73 # TODO: distinguish between install/uninstall tasks in mergelist
74 ResolverPlaygroundTestCase(
75 ["app-misc/blocker-runtime-a"],
77 mergelist = ["app-misc/blocker-runtime-a-1", "app-misc/installed-blocker-a-1", "!app-misc/blocker-runtime-a"]),
78 # An installed package has a hard runtime blocker that
79 # will not resolve automatically (unless the option
80 # requested in bug 250286 is implemented).
81 ResolverPlaygroundTestCase(
82 ["app-misc/blocker-runtime-hard-a"],
84 mergelist = ['app-misc/blocker-runtime-hard-a-1', '!!app-misc/blocker-runtime-hard-a']),
87 playground = ResolverPlayground(ebuilds=ebuilds, installed=installed)
89 for test_case in test_cases:
90 playground.run_TestCase(test_case)
91 self.assertEqual(test_case.test_success, True, test_case.fail_msg)