# Copyright 2006-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from portage.tests import TestCase
from portage.dep import Atom
from portage.exception import InvalidAtom

class TestAtom(TestCase):

	def testAtom(self):

		tests = (
			( "=sys-apps/portage-2.1-r1:0[doc,a=,!b=,c?,!d?,-e]",
				('=',  'sys-apps/portage', '2.1-r1', '0', '[doc,a=,!b=,c?,!d?,-e]', None), False, False ),
			( "=sys-apps/portage-2.1-r1*:0[doc]",
				('=*',  'sys-apps/portage', '2.1-r1', '0', '[doc]', None), False, False ),
			( "sys-apps/portage:0[doc]",
				(None,  'sys-apps/portage', None, '0', '[doc]', None), False, False ),
			( "sys-apps/portage:0[doc]",
				(None,  'sys-apps/portage', None, '0', '[doc]', None), False, False ),
			( "*/*",
				(None,  '*/*', None, None, None, None), True, False ),
			( "=*/*-*9999*",
				('=*',  '*/*', '*9999*', None, None, None), True, False ),
			( "=*/*-*9999*:0::repo_name",
				('=*',  '*/*', '*9999*', '0', None, 'repo_name'), True, True ),
			( "=*/*-*_beta*",
				('=*',  '*/*', '*_beta*', None, None, None), True, False ),
			( "=*/*-*_beta*:0::repo_name",
				('=*',  '*/*', '*_beta*', '0', None, 'repo_name'), True, True ),
			( "sys-apps/*",
				(None,  'sys-apps/*', None, None, None, None), True, False ),
			( "*/portage",
				(None,  '*/portage', None, None, None, None), True, False ),
			( "s*s-*/portage:1",
				(None,  's*s-*/portage', None, '1', None, None), True, False ),
			( "*/po*ge:2",
				(None,  '*/po*ge', None, '2', None, None), True, False ),
			( "!dev-libs/A",
				(None,  'dev-libs/A', None, None, None, None), True, True ),
			( "!!dev-libs/A",
				(None,  'dev-libs/A', None, None, None, None), True, True ),
			( "!!dev-libs/A",
				(None,  'dev-libs/A', None, None, None, None), True, True ),
			( "dev-libs/A[foo(+)]",
				(None,  'dev-libs/A', None, None, "[foo(+)]", None), True, True ),
			( "dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]",
				(None,  'dev-libs/A', None, None, "[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", None), True, True ),
			( "dev-libs/A:2[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]",
				(None,  'dev-libs/A', None, "2", "[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", None), True, True ),

			( "=sys-apps/portage-2.1-r1:0::repo_name[doc,a=,!b=,c?,!d?,-e]",
				('=',  'sys-apps/portage', '2.1-r1', '0', '[doc,a=,!b=,c?,!d?,-e]', 'repo_name'), False, True ),
			( "=sys-apps/portage-2.1-r1*:0::repo_name[doc]",
				('=*',  'sys-apps/portage', '2.1-r1', '0', '[doc]', 'repo_name'), False, True ),
			( "sys-apps/portage:0::repo_name[doc]",
				(None,  'sys-apps/portage', None, '0', '[doc]', 'repo_name'), False, True ),

			( "*/*::repo_name",
				(None,  '*/*', None, None, None, 'repo_name'), True, True ),
			( "sys-apps/*::repo_name",
				(None,  'sys-apps/*', None, None, None, 'repo_name'), True, True ),
			( "*/portage::repo_name",
				(None,  '*/portage', None, None, None, 'repo_name'), True, True ),
			( "s*s-*/portage:1::repo_name",
				(None,  's*s-*/portage', None, '1', None, 'repo_name'), True, True ),
		)
		
		tests_xfail = (
			( Atom("sys-apps/portage"), False, False ),
			( "cat/pkg[a!]", False, False ),
			( "cat/pkg[!a]", False, False ),
			( "cat/pkg[!a!]", False, False ),
			( "cat/pkg[!a-]", False, False ),
			( "cat/pkg[-a=]", False, False ),
			( "cat/pkg[-a?]", False, False ),
			( "cat/pkg[-a!]", False, False ),
			( "cat/pkg[=a]", False, False ),
			( "cat/pkg[=a=]", False, False ),
			( "cat/pkg[=a?]", False, False ),
			( "cat/pkg[=a!]", False, False ),
			( "cat/pkg[=a-]", False, False ),
			( "cat/pkg[?a]", False, False ),
			( "cat/pkg[?a=]", False, False ),
			( "cat/pkg[?a?]", False, False ),
			( "cat/pkg[?a!]", False, False ),
			( "cat/pkg[?a-]", False, False ),
			( "sys-apps/portage[doc]:0", False, False ),
			( "*/*", False, False ),
			( "sys-apps/*", False, False ),
			( "*/portage", False, False ),
			( "*/**", True, False ),
			( "*/portage[use]", True, False ),
			( "cat/pkg[a()]", False, False ),
			( "cat/pkg[a(]", False, False ),
			( "cat/pkg[a)]", False, False ),
			( "cat/pkg[a(,b]", False, False ),
			( "cat/pkg[a),b]", False, False ),
			( "cat/pkg[a(*)]", False, False ),
			( "cat/pkg[a(*)]", True, False ),
			( "cat/pkg[a(+-)]", False, False ),
			( "cat/pkg[a()]", False, False ),
			( "cat/pkg[(+)a]", False, False ),
			( "cat/pkg[a=(+)]", False, False ),
			( "cat/pkg[!(+)a=]", False, False ),
			( "cat/pkg[!a=(+)]", False, False ),
			( "cat/pkg[a?(+)]", False, False ),
			( "cat/pkg[!a?(+)]", False, False ),
			( "cat/pkg[!(+)a?]", False, False ),
			( "cat/pkg[-(+)a]", False, False ),
			( "cat/pkg[a(+),-a]", False, False ),
			( "cat/pkg[a(-),-a]", False, False ),
			( "cat/pkg[-a,a(+)]", False, False ),
			( "cat/pkg[-a,a(-)]", False, False ),
			( "cat/pkg[-a(+),a(-)]", False, False ),
			( "cat/pkg[-a(-),a(+)]", False, False ),
			( "sys-apps/portage[doc]::repo_name", False, False ),
			( "sys-apps/portage:0[doc]::repo_name", False, False ),
			( "sys-apps/portage[doc]:0::repo_name", False, False ),
			( "=sys-apps/portage-2.1-r1:0::repo_name[doc,a=,!b=,c?,!d?,-e]", False, False ),
			( "=sys-apps/portage-2.1-r1*:0::repo_name[doc]", False, False ),
			( "sys-apps/portage:0::repo_name[doc]", False, False ),
			( "*/*::repo_name", True, False ),
		)

		for atom, parts, allow_wildcard, allow_repo in tests:
			a = Atom(atom, allow_wildcard=allow_wildcard, allow_repo=allow_repo)
			op, cp, ver, slot, use, repo = parts
			self.assertEqual( op, a.operator,
				msg="Atom('%s').operator = %s == '%s'" % ( atom, a.operator, op ) )
			self.assertEqual( cp, a.cp,
				msg="Atom('%s').cp = %s == '%s'" % ( atom, a.cp, cp ) )
			if ver is not None:
				cpv = "%s-%s" % (cp, ver)
			else:
				cpv = cp
			self.assertEqual( cpv, a.cpv,
				msg="Atom('%s').cpv = %s == '%s'" % ( atom, a.cpv, cpv ) )
			self.assertEqual( slot, a.slot,
				msg="Atom('%s').slot = %s == '%s'" % ( atom, a.slot, slot ) )
			self.assertEqual( repo, a.repo,
				msg="Atom('%s').repo == %s == '%s'" % ( atom, a.repo, repo ) )

			if a.use:
				returned_use = str(a.use)
			else:
				returned_use = None
			self.assertEqual( use, returned_use,
				msg="Atom('%s').use = %s == '%s'" % ( atom, returned_use, use ) )

		for atom, allow_wildcard, allow_repo in tests_xfail:
			self.assertRaisesMsg(atom, (InvalidAtom, TypeError), Atom, atom, \
				allow_wildcard=allow_wildcard, allow_repo=allow_repo)

	def testSlotAbiAtom(self):
		tests = (
			("virtual/ffmpeg:0/53", "4-slot-abi", {"slot": "0", "sub_slot": "53", "slot_operator": None}),
			("virtual/ffmpeg:0/53=", "4-slot-abi", {"slot": "0", "sub_slot": "53", "slot_operator": "="}),
			("virtual/ffmpeg:=", "4-slot-abi", {"slot": None, "sub_slot": None, "slot_operator": "="}),
			("virtual/ffmpeg:0=", "4-slot-abi", {"slot": "0", "sub_slot": None, "slot_operator": "="}),
			("virtual/ffmpeg:*", "4-slot-abi", {"slot": None, "sub_slot": None, "slot_operator": "*"}),
			("virtual/ffmpeg:0", "4-slot-abi", {"slot": "0", "sub_slot": None, "slot_operator": None}),
			("virtual/ffmpeg", "4-slot-abi", {"slot": None, "sub_slot": None, "slot_operator": None}),
		)

		for atom, eapi, parts in tests:
			a = Atom(atom, eapi=eapi)
			for k, v in parts.items():
				self.assertEqual(v, getattr(a, k),
					msg="Atom('%s').%s = %s == '%s'" %
					(atom, k, getattr(a, k), v ))

	def test_intersects(self):
		test_cases = (
			("dev-libs/A", "dev-libs/A", True),
			("dev-libs/A", "dev-libs/B", False),
			("dev-libs/A", "sci-libs/A", False),
			("dev-libs/A[foo]", "sci-libs/A[bar]", False),
			("dev-libs/A[foo(+)]", "sci-libs/A[foo(-)]", False),
			("=dev-libs/A-1", "=dev-libs/A-1-r1", False),
			("~dev-libs/A-1", "=dev-libs/A-1", False),
			("=dev-libs/A-1:1", "=dev-libs/A-1", True),
			("=dev-libs/A-1:1", "=dev-libs/A-1:1", True),
			("=dev-libs/A-1:1", "=dev-libs/A-1:2", False),
		)

		for atom, other, expected_result in test_cases:
			self.assertEqual(Atom(atom).intersects(Atom(other)), expected_result, \
				"%s and %s should intersect: %s" % (atom, other, expected_result))

	def test_violated_conditionals(self):
		test_cases = (
			("dev-libs/A", ["foo"], ["foo"], None, "dev-libs/A"),
			("dev-libs/A[foo]", [], ["foo"], None, "dev-libs/A[foo]"),
			("dev-libs/A[foo]", ["foo"], ["foo"], None, "dev-libs/A"),
			("dev-libs/A[foo]", [], ["foo"], [], "dev-libs/A[foo]"),
			("dev-libs/A[foo]", ["foo"], ["foo"], [], "dev-libs/A"),

			("dev-libs/A:0[foo]", ["foo"], ["foo"], [], "dev-libs/A:0"),

			("dev-libs/A[foo,-bar]", [], ["foo", "bar"], None, "dev-libs/A[foo]"),
			("dev-libs/A[-foo,bar]", [], ["foo", "bar"], None, "dev-libs/A[bar]"),

			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", [], ["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[a,!c=]"),

			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["a"], ["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["b"], ["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[a,b=,!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["c"], ["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[a]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["d"], ["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[a,!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["e"], ["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[a,!c=,!e?]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["f"], ["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[a,!c=,-f]"),

			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["a"], ["a", "b", "c", "d", "e", "f"], ["a"], "dev-libs/A[!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["b"], ["a", "b", "c", "d", "e", "f"], ["b"], "dev-libs/A[a,!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["c"], ["a", "b", "c", "d", "e", "f"], ["c"], "dev-libs/A[a,!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["d"], ["a", "b", "c", "d", "e", "f"], ["d"], "dev-libs/A[a,!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["e"], ["a", "b", "c", "d", "e", "f"], ["e"], "dev-libs/A[a,!c=]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["f"], ["a", "b", "c", "d", "e", "f"], ["f"], "dev-libs/A[a,!c=,-f]"),

			("dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", ["a"], ["a", "b", "c", "d", "e", "f"], ["a"], "dev-libs/A[!c(+)=]"),
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", ["b"], ["a", "b", "c", "d", "e", "f"], ["b"], "dev-libs/A[a(-),!c(-)=]"),
			("dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", ["c"], ["a", "b", "c", "d", "e", "f"], ["c"], "dev-libs/A[a(+),!c(+)=]"),
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", ["d"], ["a", "b", "c", "d", "e", "f"], ["d"], "dev-libs/A[a(-),!c(-)=]"),
			("dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", ["e"], ["a", "b", "c", "d", "e", "f"], ["e"], "dev-libs/A[a(+),!c(+)=]"),
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", ["f"], ["a", "b", "c", "d", "e", "f"], ["f"], "dev-libs/A[a(-),!c(-)=,-f(+)]"),

			("dev-libs/A[a(+),b(+)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", ["a"], ["a"], ["a"], "dev-libs/A[b(+)=,!e(+)?]"),
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", ["b"], ["b"], ["b"], "dev-libs/A[a(-),!c(-)=,-f(+)]"),
			("dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", ["c"], ["c"], ["c"], "dev-libs/A[!c(+)=,!e(+)?]"),
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", ["d"], ["d"], ["d"], "dev-libs/A[a(-),b(+)=,!c(-)=,-f(+)]"),
			("dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", ["e"], ["e"], ["e"], "dev-libs/A"),
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", ["f"], ["f"], ["f"], "dev-libs/A[a(-),b(+)=,!c(-)=,-f(+)]"),

			#Some more test cases to trigger all remaining code paths
			("dev-libs/B[x?]", [], ["x"], ["x"], "dev-libs/B[x?]"),
			("dev-libs/B[x(+)?]", [], [], ["x"], "dev-libs/B"),
			("dev-libs/B[x(-)?]", [], [], ["x"], "dev-libs/B[x(-)?]"),

			("dev-libs/C[x=]", [], ["x"], ["x"], "dev-libs/C[x=]"),
			("dev-libs/C[x(+)=]", [], [], ["x"], "dev-libs/C"),
			("dev-libs/C[x(-)=]", [], [], ["x"], "dev-libs/C[x(-)=]"),

			("dev-libs/D[!x=]", [], ["x"], ["x"], "dev-libs/D"),
			("dev-libs/D[!x(+)=]", [], [], ["x"], "dev-libs/D[!x(+)=]"),
			("dev-libs/D[!x(-)=]", [], [], ["x"], "dev-libs/D"),

			#Missing IUSE test cases
			("dev-libs/B[x]", [], [], [], "dev-libs/B[x]"),
			("dev-libs/B[-x]", [], [], [], "dev-libs/B[-x]"),
			("dev-libs/B[x?]", [], [], [], "dev-libs/B[x?]"),
			("dev-libs/B[x=]", [], [], [], "dev-libs/B[x=]"),
			("dev-libs/B[!x=]", [], [], ["x"], "dev-libs/B[!x=]"),
			("dev-libs/B[!x?]", [], [], ["x"], "dev-libs/B[!x?]"),
		)
		
		test_cases_xfail = (
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", [], ["a", "b", "c", "d", "e", "f"], None),
		)

		class use_flag_validator(object):
			def __init__(self, iuse):
				self.iuse = iuse

			def is_valid_flag(self, flag):
				return flag in iuse

		for atom, other_use, iuse, parent_use, expected_violated_atom in test_cases:
			a = Atom(atom)
			validator = use_flag_validator(iuse)
			violated_atom = a.violated_conditionals(other_use, validator.is_valid_flag, parent_use)
			if parent_use is None:
				fail_msg = "Atom: %s, other_use: %s, iuse: %s, parent_use: %s, got: %s, expected: %s" % \
					(atom, " ".join(other_use), " ".join(iuse), "None", str(violated_atom), expected_violated_atom)
			else:
				fail_msg = "Atom: %s, other_use: %s, iuse: %s, parent_use: %s, got: %s, expected: %s" % \
					(atom, " ".join(other_use), " ".join(iuse), " ".join(parent_use), str(violated_atom), expected_violated_atom)
			self.assertEqual(str(violated_atom), expected_violated_atom, fail_msg)

		for atom, other_use, iuse, parent_use in test_cases_xfail:
			a = Atom(atom)
			validator = use_flag_validator(iuse)
			self.assertRaisesMsg(atom, InvalidAtom, \
				a.violated_conditionals, other_use, validator.is_valid_flag, parent_use)

	def test_evaluate_conditionals(self):
		test_cases = (
			("dev-libs/A[foo]", [], "dev-libs/A[foo]"),
			("dev-libs/A[foo]", ["foo"], "dev-libs/A[foo]"),

			("dev-libs/A:0[foo=]", ["foo"], "dev-libs/A:0[foo]"),

			("dev-libs/A[foo,-bar]", [], "dev-libs/A[foo,-bar]"),
			("dev-libs/A[-foo,bar]", [], "dev-libs/A[-foo,bar]"),

			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", [], "dev-libs/A[a,-b,c,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["a"], "dev-libs/A[a,-b,c,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["b"], "dev-libs/A[a,b,c,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["c"], "dev-libs/A[a,-b,-c,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["d"], "dev-libs/A[a,-b,c,d,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["e"], "dev-libs/A[a,-b,c,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["f"], "dev-libs/A[a,-b,c,-e,-f]"),
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", ["d"], "dev-libs/A[a(-),-b(+),c(-),d(+),-e(-),-f(+)]"),
			("dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", ["f"], "dev-libs/A[a(+),-b(-),c(+),-e(+),-f(-)]"),
		)

		for atom, use, expected_atom in test_cases:
			a = Atom(atom)
			b = a.evaluate_conditionals(use)
			self.assertEqual(str(b), expected_atom)
			self.assertEqual(str(b.unevaluated_atom), atom)

	def test__eval_qa_conditionals(self):
		test_cases = (
			("dev-libs/A[foo]", [], [], "dev-libs/A[foo]"),
			("dev-libs/A[foo]", ["foo"], [], "dev-libs/A[foo]"),
			("dev-libs/A[foo]", [], ["foo"], "dev-libs/A[foo]"),

			("dev-libs/A:0[foo]", [], [], "dev-libs/A:0[foo]"),
			("dev-libs/A:0[foo]", ["foo"], [], "dev-libs/A:0[foo]"),
			("dev-libs/A:0[foo]", [], ["foo"], "dev-libs/A:0[foo]"),
			("dev-libs/A:0[foo=]", [], ["foo"], "dev-libs/A:0[foo]"),

			("dev-libs/A[foo,-bar]", ["foo"], ["bar"], "dev-libs/A[foo,-bar]"),
			("dev-libs/A[-foo,bar]", ["foo", "bar"], [], "dev-libs/A[-foo,bar]"),

			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["a", "b", "c"], [], "dev-libs/A[a,-b,c,d,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", [], ["a", "b", "c"], "dev-libs/A[a,b,-c,d,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", ["d", "e", "f"], [], "dev-libs/A[a,b,-b,c,-c,-e,-f]"),
			("dev-libs/A[a,b=,!c=,d?,!e?,-f]", [], ["d", "e", "f"], "dev-libs/A[a,b,-b,c,-c,d,-f]"),
			
			("dev-libs/A[a(-),b(+)=,!c(-)=,d(+)?,!e(-)?,-f(+)]", \
				["a", "b", "c", "d", "e", "f"], [], "dev-libs/A[a(-),-b(+),c(-),-e(-),-f(+)]"),
			("dev-libs/A[a(+),b(-)=,!c(+)=,d(-)?,!e(+)?,-f(-)]", \
				[], ["a", "b", "c", "d", "e", "f"], "dev-libs/A[a(+),b(-),-c(+),d(-),-f(-)]"),
		)

		for atom, use_mask, use_force, expected_atom in test_cases:
			a = Atom(atom)
			b = a._eval_qa_conditionals(use_mask, use_force)
			self.assertEqual(str(b), expected_atom)
			self.assertEqual(str(b.unevaluated_atom), atom)
