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

from portage.tests import TestCase
from portage.util import varexpand

class VarExpandTestCase(TestCase):

	def testVarExpandPass(self):

		varDict = {"a": "5", "b": "7", "c": "-5"}
		for key in varDict:
			result = varexpand("$%s" % key, varDict)

			self.assertFalse(result != varDict[key],
				msg="Got %s != %s, from varexpand(%s, %s)" %
					(result, varDict[key], "$%s" % key, varDict))
			result = varexpand("${%s}" % key, varDict)
			self.assertFalse(result != varDict[key],
				msg="Got %s != %s, from varexpand(%s, %s)" %
					(result, varDict[key], "${%s}" % key, varDict))

	def testVarExpandBackslashes(self):
		"""
		We want to behave like bash does when expanding a variable
		assignment in a sourced file, in which case it performs
		backslash removal for \\ and \$ but nothing more. It also
		removes escaped newline characters. Note that we don't
		handle escaped quotes here, since getconfig() uses shlex
		to handle that earlier.
		"""

		varDict = {}
		tests = [
			("\\", "\\"),
			("\\\\", "\\"),
			("\\\\\\", "\\\\"),
			("\\\\\\\\", "\\\\"),
			("\\$", "$"),
			("\\\\$", "\\$"),
			("\\a", "\\a"),
			("\\b", "\\b"),
			("\\n", "\\n"),
			("\\r", "\\r"),
			("\\t", "\\t"),
			("\\\n", ""),
			("\\\"", "\\\""),
			("\\'", "\\'"),
		]
		for test in tests:
			result = varexpand(test[0], varDict)
			self.assertFalse(result != test[1],
				msg="Got %s != %s from varexpand(%s, %s)"
				% (result, test[1], test[0], varDict))

	def testVarExpandDoubleQuotes(self):

		varDict = {"a": "5"}
		tests = [("\"${a}\"", "\"5\"")]
		for test in tests:
			result = varexpand(test[0], varDict)
			self.assertFalse(result != test[1],
				msg="Got %s != %s from varexpand(%s, %s)"
				% (result, test[1], test[0], varDict))

	def testVarExpandSingleQuotes(self):

		varDict = {"a": "5"}
		tests = [("\'${a}\'", "\'${a}\'")]
		for test in tests:
			result = varexpand(test[0], varDict)
			self.assertFalse(result != test[1],
				msg="Got %s != %s from varexpand(%s, %s)"
				% (result, test[1], test[0], varDict))

	def testVarExpandFail(self):

		varDict = {"a": "5", "b": "7", "c": "15"}

		testVars = ["fail"]

		for var in testVars:
			result = varexpand("$%s" % var, varDict)
			self.assertFalse(len(result),
				msg="Got %s == %s, from varexpand(%s, %s)"
					% (result, var, "$%s" % var, varDict))

			result = varexpand("${%s}" % var, varDict)
			self.assertFalse(len(result),
				msg="Got %s == %s, from varexpand(%s, %s)"
					% (result, var, "${%s}" % var, varDict))
