| # 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 ) ) |