# test_stackDicts.py -- Portage Unit Testing Functionality
# Copyright 2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from portage.tests import TestCase
from portage.util import stack_dicts


class StackDictsTestCase(TestCase):
	
	def testStackDictsPass(self):
		
		tests = [ ( [ { "a":"b" }, { "b":"c" } ], { "a":"b", "b":"c" },
			  False, [], False ),
			  ( [ { "a":"b" }, { "a":"c" } ], { "a":"b c" },
			  True, [], False ),
			  ( [ { "a":"b" }, { "a":"c" } ], { "a":"b c" },
			  False, ["a"], False ),
			  ( [ { "a":"b" }, None ], { "a":"b" },
			  False, [], True ),
			  ( [ None ], {}, False, [], False ),
			  ( [ None, {}], {}, False, [], True ) ]


		for test in tests:
			result = stack_dicts( test[0], test[2], test[3], test[4] )
			self.assertEqual( result, test[1] )
	
	def testStackDictsFail(self):
		
		tests = [ ( [ None, {} ], None, False, [], True ),
			  ( [ { "a":"b"}, {"a":"c" } ], { "a":"b c" },
				False, [], False ) ]
		for test in tests:
			result = stack_dicts( test[0], test[2], test[3], test[4] )
			self.assertNotEqual( result , test[1] )
