blob: 7b528d6dbf32b52de2c81a5eaeb33e31d01403dc [file] [log] [blame]
# 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 ) )