diff options
Diffstat (limited to 'lib/portage/tests/util/test_varExpand.py')
-rw-r--r-- | lib/portage/tests/util/test_varExpand.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/portage/tests/util/test_varExpand.py b/lib/portage/tests/util/test_varExpand.py new file mode 100644 index 000000000..d8addf2de --- /dev/null +++ b/lib/portage/tests/util/test_varExpand.py @@ -0,0 +1,92 @@ +# test_varExpand.py -- Portage Unit Testing Functionality +# Copyright 2006-2017 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): + r""" + 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)) |