blob: 498b50eada03193dc36e80be633aa25cb565fe42 [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))