# Copyright 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 ResolverDepthTestCase(TestCase):

	def testResolverDepth(self):

		ebuilds = {
			"dev-libs/A-1": {"RDEPEND" : "dev-libs/B"},
			"dev-libs/A-2": {"RDEPEND" : "dev-libs/B"},
			"dev-libs/B-1": {"RDEPEND" : "dev-libs/C"},
			"dev-libs/B-2": {"RDEPEND" : "dev-libs/C"},
			"dev-libs/C-1": {},
			"dev-libs/C-2": {},

			"virtual/libusb-0"         : {"EAPI" :"2", "SLOT" : "0", "RDEPEND" : "|| ( >=dev-libs/libusb-0.1.12-r1:0 dev-libs/libusb-compat >=sys-freebsd/freebsd-lib-8.0[usb] )"},
			"virtual/libusb-1"         : {"EAPI" :"2", "SLOT" : "1", "RDEPEND" : ">=dev-libs/libusb-1.0.4:1"},
			"dev-libs/libusb-0.1.13"   : {},
			"dev-libs/libusb-1.0.5"    : {"SLOT":"1"},
			"dev-libs/libusb-compat-1" : {},
			"sys-freebsd/freebsd-lib-8": {"IUSE" : "+usb"},

			"sys-fs/udev-164"          : {"EAPI" : "1", "RDEPEND" : "virtual/libusb:0"},

			"virtual/jre-1.5.0"        : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.5.0* =virtual/jdk-1.5.0* )"},
			"virtual/jre-1.5.0-r1"     : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.5.0* =virtual/jdk-1.5.0* )"},
			"virtual/jre-1.6.0"        : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.6.0* =virtual/jdk-1.6.0* )"},
			"virtual/jre-1.6.0-r1"     : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/sun-jre-bin-1.6.0* =virtual/jdk-1.6.0* )"},
			"virtual/jdk-1.5.0"        : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
			"virtual/jdk-1.5.0-r1"     : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
			"virtual/jdk-1.6.0"        : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
			"virtual/jdk-1.6.0-r1"     : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
			"dev-java/gcj-jdk-4.5"     : {},
			"dev-java/gcj-jdk-4.5-r1"  : {},
			"dev-java/icedtea-6.1"     : {},
			"dev-java/icedtea-6.1-r1"  : {},
			"dev-java/sun-jdk-1.5"     : {"SLOT" : "1.5"},
			"dev-java/sun-jdk-1.6"     : {"SLOT" : "1.6"},
			"dev-java/sun-jre-bin-1.5" : {"SLOT" : "1.5"},
			"dev-java/sun-jre-bin-1.6" : {"SLOT" : "1.6"},

			"dev-java/ant-core-1.8"   : {"DEPEND"  : ">=virtual/jdk-1.4"},
			"dev-db/hsqldb-1.8"       : {"RDEPEND" : ">=virtual/jre-1.6"},
			}

		installed = {
			"dev-libs/A-1": {"RDEPEND" : "dev-libs/B"},
			"dev-libs/B-1": {"RDEPEND" : "dev-libs/C"},
			"dev-libs/C-1": {},

			"virtual/jre-1.5.0"       : {"SLOT" : "1.5", "RDEPEND" : "|| ( =virtual/jdk-1.5.0* =dev-java/sun-jre-bin-1.5.0* )"},
			"virtual/jre-1.6.0"       : {"SLOT" : "1.6", "RDEPEND" : "|| ( =virtual/jdk-1.6.0* =dev-java/sun-jre-bin-1.6.0* )"},
			"virtual/jdk-1.5.0"       : {"SLOT" : "1.5", "RDEPEND" : "|| ( =dev-java/sun-jdk-1.5.0* dev-java/gcj-jdk )"},
			"virtual/jdk-1.6.0"       : {"SLOT" : "1.6", "RDEPEND" : "|| ( =dev-java/icedtea-6* =dev-java/sun-jdk-1.6.0* )"},
			"dev-java/gcj-jdk-4.5"    : {},
			"dev-java/icedtea-6.1"    : {},

			"virtual/libusb-0"         : {"EAPI" :"2", "SLOT" : "0", "RDEPEND" : "|| ( >=dev-libs/libusb-0.1.12-r1:0 dev-libs/libusb-compat >=sys-freebsd/freebsd-lib-8.0[usb] )"},
			}

		world = ["dev-libs/A"]

		test_cases = (
			ResolverPlaygroundTestCase(
				["dev-libs/A"],
				options = {"--update": True, "--deep": 0},
				success = True,
				mergelist = ["dev-libs/A-2"]),

			ResolverPlaygroundTestCase(
				["dev-libs/A"],
				options = {"--update": True, "--deep": 1},
				success = True,
				mergelist = ["dev-libs/B-2", "dev-libs/A-2"]),

			ResolverPlaygroundTestCase(
				["dev-libs/A"],
				options = {"--update": True, "--deep": 2},
				success = True,
				mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),

			ResolverPlaygroundTestCase(
				["@world"],
				options = {"--update": True, "--deep": True},
				success = True,
				mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),

			ResolverPlaygroundTestCase(
				["@world"],
				options = {"--emptytree": True},
				success = True,
				mergelist = ["dev-libs/C-2", "dev-libs/B-2", "dev-libs/A-2"]),

			ResolverPlaygroundTestCase(
				["@world"],
				options = {"--selective": True, "--deep": True},
				success = True,
				mergelist = []),

			ResolverPlaygroundTestCase(
				["dev-libs/A"],
				options = {"--deep": 2},
				success = True,
				mergelist = ["dev-libs/A-2"]),

			ResolverPlaygroundTestCase(
				["virtual/jre"],
				options = {},
				success = True,
				mergelist = ['virtual/jre-1.6.0-r1']),

			ResolverPlaygroundTestCase(
				["virtual/jre"],
				options = {"--deep" : True},
				success = True,
				mergelist = ['virtual/jre-1.6.0-r1']),

			# Test bug #141118, where we avoid pulling in
			# redundant deps, satisfying nested virtuals
			# as efficiently as possible.
			ResolverPlaygroundTestCase(
				["virtual/jre"],
				options = {"--selective" : True, "--deep" : True},
				success = True,
				mergelist = []),

			# Test bug #150361, where depgraph._greedy_slots()
			# is triggered by --update with AtomArg.
			ResolverPlaygroundTestCase(
				["virtual/jre"],
				options = {"--update" : True},
				success = True,
				ambiguous_merge_order = True,
				mergelist = [('virtual/jre-1.6.0-r1', 'virtual/jre-1.5.0-r1')]),

			# Recursively traversed virtual dependencies, and their
			# direct dependencies, are considered to have the same
			# depth as direct dependencies.
			ResolverPlaygroundTestCase(
				["virtual/jre"],
				options = {"--update" : True, "--deep" : 1},
				success = True,
				ambiguous_merge_order = True,
				merge_order_assertions=(('dev-java/icedtea-6.1-r1', 'virtual/jdk-1.6.0-r1'), ('virtual/jdk-1.6.0-r1', 'virtual/jre-1.6.0-r1'),
					('dev-java/gcj-jdk-4.5-r1', 'virtual/jdk-1.5.0-r1'), ('virtual/jdk-1.5.0-r1', 'virtual/jre-1.5.0-r1')),
				mergelist = [('dev-java/icedtea-6.1-r1', 'dev-java/gcj-jdk-4.5-r1', 'virtual/jdk-1.6.0-r1', 'virtual/jdk-1.5.0-r1', 'virtual/jre-1.6.0-r1', 'virtual/jre-1.5.0-r1')]),

			ResolverPlaygroundTestCase(
				["virtual/jre:1.5"],
				options = {"--update" : True},
				success = True,
				mergelist = ['virtual/jre-1.5.0-r1']),

			ResolverPlaygroundTestCase(
				["virtual/jre:1.6"],
				options = {"--update" : True},
				success = True,
				mergelist = ['virtual/jre-1.6.0-r1']),

			# Test that we don't pull in any unnecessary updates
			# when --update is not specified, even though we
			# specified --deep.
			ResolverPlaygroundTestCase(
				["dev-java/ant-core"],
				options = {"--deep" : True},
				success = True,
				mergelist = ["dev-java/ant-core-1.8"]),

			ResolverPlaygroundTestCase(
				["dev-java/ant-core"],
				options = {"--update" : True},
				success = True,
				mergelist = ["dev-java/ant-core-1.8"]),

			# Recursively traversed virtual dependencies, and their
			# direct dependencies, are considered to have the same
			# depth as direct dependencies.
			ResolverPlaygroundTestCase(
				["dev-java/ant-core"],
				options = {"--update" : True, "--deep" : 1},
				success = True,
				mergelist = ['dev-java/icedtea-6.1-r1', 'virtual/jdk-1.6.0-r1', 'dev-java/ant-core-1.8']),

			ResolverPlaygroundTestCase(
				["dev-db/hsqldb"],
				options = {"--deep" : True},
				success = True,
				mergelist = ["dev-db/hsqldb-1.8"]),

			# Don't traverse deps of an installed package with --deep=0,
			# even if it's a virtual.
			ResolverPlaygroundTestCase(
				["virtual/libusb:0"],
				options = {"--selective" : True, "--deep" : 0},
				success = True,
				mergelist = []),

			# Satisfy unsatisfied dep of installed package with --deep=1.
			ResolverPlaygroundTestCase(
				["virtual/libusb:0"],
				options = {"--selective" : True, "--deep" : 1},
				success = True,
				mergelist = ['dev-libs/libusb-0.1.13']),

			# Pull in direct dep of virtual, even with --deep=0.
			ResolverPlaygroundTestCase(
				["sys-fs/udev"],
				options = {"--deep" : 0},
				success = True,
				mergelist = ['dev-libs/libusb-0.1.13', 'sys-fs/udev-164']),

			# Test --nodeps with direct virtual deps.
			ResolverPlaygroundTestCase(
				["sys-fs/udev"],
				options = {"--nodeps" : True},
				success = True,
				mergelist = ["sys-fs/udev-164"]),

			# Test that --nodeps overrides --deep.
			ResolverPlaygroundTestCase(
				["sys-fs/udev"],
				options = {"--nodeps" : True, "--deep" : True},
				success = True,
				mergelist = ["sys-fs/udev-164"]),

			# Test that --nodeps overrides --emptytree.
			ResolverPlaygroundTestCase(
				["sys-fs/udev"],
				options = {"--nodeps" : True, "--emptytree" : True},
				success = True,
				mergelist = ["sys-fs/udev-164"]),

			# Test --emptytree with virtuals.
			ResolverPlaygroundTestCase(
				["sys-fs/udev"],
				options = {"--emptytree" : True},
				success = True,
				mergelist = ['dev-libs/libusb-0.1.13', 'virtual/libusb-0', 'sys-fs/udev-164']),
			)

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