summaryrefslogtreecommitdiff
path: root/src/engine/SCons/UtilTests.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/SCons/UtilTests.py')
-rw-r--r--src/engine/SCons/UtilTests.py99
1 files changed, 75 insertions, 24 deletions
diff --git a/src/engine/SCons/UtilTests.py b/src/engine/SCons/UtilTests.py
index cf584ed..6601c99 100644
--- a/src/engine/SCons/UtilTests.py
+++ b/src/engine/SCons/UtilTests.py
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2001 - 2015 The SCons Foundation
+# Copyright (c) 2001 - 2016 The SCons Foundation
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/UtilTests.py rel_2.4.1:3453:73fefd3ea0b0 2015/11/09 03:25:05 bdbaddog"
+__revision__ = "src/engine/SCons/UtilTests.py rel_2.5.0:3543:937e55cd78f7 2016/04/09 11:29:54 bdbaddog"
import SCons.compat
@@ -124,7 +124,9 @@ class UtilTestCase(unittest.TestCase):
def tree_case_2(self, prune=1):
"""Fixture for the render_tree() and print_tree() tests."""
- stdlib_h = self.Node("stdlib.h")
+ types_h = self.Node('types.h')
+ malloc_h = self.Node('malloc.h')
+ stdlib_h = self.Node('stdlib.h', [types_h, malloc_h])
bar_h = self.Node('bar.h', [stdlib_h])
blat_h = self.Node('blat.h', [stdlib_h])
blat_c = self.Node('blat.c', [blat_h, bar_h])
@@ -135,13 +137,18 @@ class UtilTestCase(unittest.TestCase):
+-blat.c
+-blat.h
| +-stdlib.h
+ | +-types.h
+ | +-malloc.h
+-bar.h
- +-[stdlib.h]
"""
-
- if not prune:
- expect = expect.replace('[', '')
- expect = expect.replace(']', '')
+ if prune:
+ expect += """ +-[stdlib.h]
+"""
+ else:
+ expect += """ +-stdlib.h
+ +-types.h
+ +-malloc.h
+"""
lines = expect.split('\n')[:-1]
lines = ['[E BSPACN ]'+l for l in lines]
@@ -162,6 +169,13 @@ class UtilTestCase(unittest.TestCase):
actual = render_tree(node, get_children, 1)
assert expect == actual, (expect, actual)
+ # Ensure that we can call render_tree on the same Node
+ # again. This wasn't possible in version 2.4.1 and earlier
+ # due to a bug in render_tree (visited was set to {} as default
+ # parameter)
+ actual = render_tree(node, get_children, 1)
+ assert expect == actual, (expect, actual)
+
def test_print_tree(self):
"""Test the print_tree() function"""
def get_children(node):
@@ -181,25 +195,40 @@ class UtilTestCase(unittest.TestCase):
print_tree(node, get_children, showtags=1)
actual = sys.stdout.getvalue()
assert withtags == actual, (withtags, actual)
-
+
+ # Test that explicitly setting prune to zero works
+ # the same as the default (see above)
node, expect, withtags = self.tree_case_2(prune=0)
+
+ sys.stdout = io.StringIO()
+ print_tree(node, get_children, 0)
+ actual = sys.stdout.getvalue()
+ assert expect == actual, (expect, actual)
+
+ sys.stdout = io.StringIO()
+ print_tree(node, get_children, 0, showtags=1)
+ actual = sys.stdout.getvalue()
+ assert withtags == actual, (withtags, actual)
+
+ # Test output with prune=1
+ node, expect, withtags = self.tree_case_2(prune=1)
+
+ sys.stdout = io.StringIO()
+ print_tree(node, get_children, 1)
+ actual = sys.stdout.getvalue()
+ assert expect == actual, (expect, actual)
+ # Ensure that we can call print_tree on the same Node
+ # again. This wasn't possible in version 2.4.1 and earlier
+ # due to a bug in print_tree (visited was set to {} as default
+ # parameter)
sys.stdout = io.StringIO()
print_tree(node, get_children, 1)
actual = sys.stdout.getvalue()
assert expect == actual, (expect, actual)
sys.stdout = io.StringIO()
- # The following call should work here:
- # print_tree(node, get_children, 1, showtags=1)
- # For some reason I don't understand, though, *this*
- # time that we call print_tree, the visited dictionary
- # is still populated with the values from the last call!
- # I can't see why this would be, short of a bug in Python,
- # and rather than continue banging my head against the
- # brick wall for a *test*, we're going to going with
- # the cheap, easy workaround:
- print_tree(node, get_children, 1, showtags=1, visited={})
+ print_tree(node, get_children, 1, showtags=1)
actual = sys.stdout.getvalue()
assert withtags == actual, (withtags, actual)
finally:
@@ -487,6 +516,30 @@ class UtilTestCase(unittest.TestCase):
p1 = AppendPath(p1,r'C:\dir\num\three',sep = ';')
assert(p1 == r'C:\dir\num\one;C:\dir\num\two;C:\dir\num\three')
+ def test_addPathIfNotExists(self):
+ """Test the AddPathIfNotExists() function"""
+ env_dict = { 'FOO' : os.path.normpath('/foo/bar') + os.pathsep + \
+ os.path.normpath('/baz/blat'),
+ 'BAR' : os.path.normpath('/foo/bar') + os.pathsep + \
+ os.path.normpath('/baz/blat'),
+ 'BLAT' : [ os.path.normpath('/foo/bar'),
+ os.path.normpath('/baz/blat') ] }
+ AddPathIfNotExists(env_dict, 'FOO', os.path.normpath('/foo/bar'))
+ AddPathIfNotExists(env_dict, 'BAR', os.path.normpath('/bar/foo'))
+ AddPathIfNotExists(env_dict, 'BAZ', os.path.normpath('/foo/baz'))
+ AddPathIfNotExists(env_dict, 'BLAT', os.path.normpath('/baz/blat'))
+ AddPathIfNotExists(env_dict, 'BLAT', os.path.normpath('/baz/foo'))
+
+ assert env_dict['FOO'] == os.path.normpath('/foo/bar') + os.pathsep + \
+ os.path.normpath('/baz/blat'), env_dict['FOO']
+ assert env_dict['BAR'] == os.path.normpath('/bar/foo') + os.pathsep + \
+ os.path.normpath('/foo/bar') + os.pathsep + \
+ os.path.normpath('/baz/blat'), env_dict['BAR']
+ assert env_dict['BAZ'] == os.path.normpath('/foo/baz'), env_dict['BAZ']
+ assert env_dict['BLAT'] == [ os.path.normpath('/baz/foo'),
+ os.path.normpath('/foo/bar'),
+ os.path.normpath('/baz/blat') ], env_dict['BLAT' ]
+
def test_CLVar(self):
"""Test the command-line construction variable class"""
f = SCons.Util.CLVar('a b')
@@ -679,11 +732,8 @@ bling \
bling \ bling
bling
"""
- try:
- fobj = io.StringIO(content)
- except TypeError:
- # Python 2.7 and beyond require unicode strings.
- fobj = io.StringIO(unicode(content))
+ # Python 2.7 and beyond require unicode strings.
+ fobj = io.StringIO(unicode(content))
lines = LogicalLines(fobj).readlines()
assert lines == [
@@ -780,6 +830,7 @@ class flattenTestCase(unittest.TestCase):
result = flatten('xyz')
assert result == ['xyz'], result
+
if __name__ == "__main__":
suite = unittest.TestSuite()
tclasses = [ dictifyTestCase,