# Copyright 2010-2011 Gentoo Foundation
# 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 MultirepoTestCase(TestCase):

	def testMultirepo(self):
		ebuilds = {
			#Simple repo selection
			"dev-libs/A-1": { },
			"dev-libs/A-1::repo1": { },
			"dev-libs/A-2::repo1": { },
			"dev-libs/A-1::repo2": { },

			#Packages in exactly one repo
			"dev-libs/B-1": { },
			"dev-libs/C-1::repo1": { },

			#Package in repository 1 and 2, but 1 must be used
			"dev-libs/D-1::repo1": { },
			"dev-libs/D-1::repo2": { },

			"dev-libs/E-1": { },
			"dev-libs/E-1::repo1": { },
			"dev-libs/E-1::repo2": { "SLOT": "1" },

			"dev-libs/F-1::repo1": { "SLOT": "1" },
			"dev-libs/F-1::repo2": { "SLOT": "1" },

			"dev-libs/G-1::repo1": { "EAPI" : "4", "IUSE":"+x +y", "REQUIRED_USE" : "" },
			"dev-libs/G-1::repo2": { "EAPI" : "4", "IUSE":"+x +y", "REQUIRED_USE" : "^^ ( x y )" },

			"dev-libs/H-1": {	"KEYWORDS": "x86", "EAPI" : "3",
								"RDEPEND" : "|| ( dev-libs/I:2 dev-libs/I:1 )" },

			"dev-libs/I-1::repo2": { "SLOT" : "1"},
			"dev-libs/I-2::repo2": { "SLOT" : "2"},
			}

		installed = {
			"dev-libs/H-1": { "RDEPEND" : "|| ( dev-libs/I:2 dev-libs/I:1 )"},
			"dev-libs/I-2::repo1": {"SLOT" : "2"},
			}

		sets = {
			"multirepotest":
				("dev-libs/A::test_repo",)
		}

		test_cases = (
			#Simple repo selection
			ResolverPlaygroundTestCase(
				["dev-libs/A"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/A-2::repo1"]),
			ResolverPlaygroundTestCase(
				["dev-libs/A::test_repo"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/A-1"]),
			ResolverPlaygroundTestCase(
				["dev-libs/A::repo2"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/A-1::repo2"]),
			ResolverPlaygroundTestCase(
				["=dev-libs/A-1::repo1"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/A-1::repo1"]),
			ResolverPlaygroundTestCase(
				["@multirepotest"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/A-1"]),

			#Packages in exactly one repo
			ResolverPlaygroundTestCase(
				["dev-libs/B"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/B-1"]),
			ResolverPlaygroundTestCase(
				["dev-libs/C"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/C-1::repo1"]),

			#Package in repository 1 and 2, but 2 must be used
			ResolverPlaygroundTestCase(
				["dev-libs/D"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/D-1::repo2"]),

			#Atoms with slots
			ResolverPlaygroundTestCase(
				["dev-libs/E"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/E-1::repo2"]),
			ResolverPlaygroundTestCase(
				["dev-libs/E:1::repo2"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/E-1::repo2"]),
			ResolverPlaygroundTestCase(
				["dev-libs/E:1"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/E-1::repo2"]),
			ResolverPlaygroundTestCase(
				["dev-libs/F:1"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/F-1::repo2"]),
			ResolverPlaygroundTestCase(
				["=dev-libs/F-1:1"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/F-1::repo2"]),
			ResolverPlaygroundTestCase(
				["=dev-libs/F-1:1::repo1"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/F-1::repo1"]),

			# Dependency on installed dev-libs/C-2 ebuild for which ebuild is
			# not available from the same repo should not unnecessarily
			# reinstall the same version from a different repo.
			ResolverPlaygroundTestCase(
				["dev-libs/H"],
				options = {"--update": True, "--deep": True},
				success = True,
				mergelist = []),

			# Check interaction between repo priority and unsatisfied
			# REQUIRED_USE, for bug #350254.
			ResolverPlaygroundTestCase(
				["=dev-libs/G-1"],
				check_repo_names = True,
				success = False),

			)

		playground = ResolverPlayground(ebuilds=ebuilds,
			installed=installed, sets=sets)
		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 testMultirepoUserConfig(self):
		ebuilds = {
			#package.use test
			"dev-libs/A-1": { "IUSE": "foo" },
			"dev-libs/A-2::repo1": { "IUSE": "foo" },
			"dev-libs/A-3::repo2": { },
			"dev-libs/B-1": { "DEPEND": "dev-libs/A", "EAPI": 2 },
			"dev-libs/B-2": { "DEPEND": "dev-libs/A[foo]", "EAPI": 2 },
			"dev-libs/B-3": { "DEPEND": "dev-libs/A[-foo]", "EAPI": 2 },

			#package.keywords test
			"dev-libs/C-1": { "KEYWORDS": "~x86" },
			"dev-libs/C-1::repo1": { "KEYWORDS": "~x86" },

			#package.license
			"dev-libs/D-1": { "LICENSE": "TEST" },
			"dev-libs/D-1::repo1": { "LICENSE": "TEST" },

			#package.mask
			"dev-libs/E-1": { },
			"dev-libs/E-1::repo1": { },
			"dev-libs/H-1": { },
			"dev-libs/H-1::repo1": { },
			"dev-libs/I-1::repo2": { "SLOT" : "1"},
			"dev-libs/I-2::repo2": { "SLOT" : "2"},
			"dev-libs/J-1": {	"KEYWORDS": "x86", "EAPI" : "3",
								"RDEPEND" : "|| ( dev-libs/I:2 dev-libs/I:1 )" },

			#package.properties
			"dev-libs/F-1": { "PROPERTIES": "bar"},
			"dev-libs/F-1::repo1": { "PROPERTIES": "bar"},

			#package.unmask
			"dev-libs/G-1": { },
			"dev-libs/G-1::repo1": { },

			#package.mask with wildcards
			"dev-libs/Z-1::repo3": { },
			}

		installed = {
			"dev-libs/J-1": { "RDEPEND" : "|| ( dev-libs/I:2 dev-libs/I:1 )"},
			"dev-libs/I-2::repo1": {"SLOT" : "2"},
			}

		user_config = {
			"package.use":
				(
					"dev-libs/A::repo1 foo",
				),
			"package.keywords":
				(
					"=dev-libs/C-1::test_repo",
				),
			"package.license":
				(
					"=dev-libs/D-1::test_repo TEST",
				),
			"package.mask":
				(
					"dev-libs/E::repo1",
					"dev-libs/H",
					"dev-libs/I::repo1",
					#needed for package.unmask test
					"dev-libs/G",
					#wildcard test
					"*/*::repo3",
				),
			"package.properties":
				(
					"dev-libs/F::repo1 -bar",
				),
			"package.unmask":
				(
					"dev-libs/G::test_repo",
				),
			}

		test_cases = (
			#package.use test
			ResolverPlaygroundTestCase(
				["=dev-libs/B-1"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/A-3::repo2", "dev-libs/B-1"]),
			ResolverPlaygroundTestCase(
				["=dev-libs/B-2"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/A-2::repo1", "dev-libs/B-2"]),
			ResolverPlaygroundTestCase(
				["=dev-libs/B-3"],
				options = { "--autounmask": 'n' },
				success = False,
				check_repo_names = True),

			#package.keywords test
			ResolverPlaygroundTestCase(
				["dev-libs/C"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/C-1"]),

			#package.license test
			ResolverPlaygroundTestCase(
				["dev-libs/D"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/D-1"]),

			#package.mask test
			ResolverPlaygroundTestCase(
				["dev-libs/E"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/E-1"]),

			# Dependency on installed dev-libs/C-2 ebuild for which ebuild is
			# masked from the same repo should not unnecessarily pull
			# in a different slot. It should just pull in the same slot from
			# a different repo (bug #351828).
			ResolverPlaygroundTestCase(
				["dev-libs/J"],
				options = {"--update": True, "--deep": True},
				success = True,
				mergelist = ["dev-libs/I-2"]),

			#package.properties test
			ResolverPlaygroundTestCase(
				["dev-libs/F"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/F-1"]),

			#package.mask test
			ResolverPlaygroundTestCase(
				["dev-libs/G"],
				success = True,
				check_repo_names = True,
				mergelist = ["dev-libs/G-1"]),
			ResolverPlaygroundTestCase(
				["dev-libs/H"],
				options = { "--autounmask": 'n' },
				success = False),

			#package.mask with wildcards
			ResolverPlaygroundTestCase(
				["dev-libs/Z"],
				options = { "--autounmask": 'n' },
				success = False),
			)

		playground = ResolverPlayground(ebuilds=ebuilds,
			installed=installed, 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()
