From 7214b3d0a99f7a1e0072a4a8e94e2816e26d2cbe Mon Sep 17 00:00:00 2001 From: Mats Wichmann Date: Wed, 12 Jan 2022 11:35:50 -0700 Subject: Add unittests for unclear Path append operations Verifies what happens if added paths include duplicates Signed-off-by: Mats Wichmann --- SCons/EnvironmentTests.py | 70 +++++++++++++++++++++++++++++------------------ SCons/UtilTests.py | 24 ++++++++++++---- 2 files changed, 62 insertions(+), 32 deletions(-) diff --git a/SCons/EnvironmentTests.py b/SCons/EnvironmentTests.py index cd36fd2..c505422 100644 --- a/SCons/EnvironmentTests.py +++ b/SCons/EnvironmentTests.py @@ -1696,23 +1696,32 @@ def exists(env): def test_AppendENVPath(self): """Test appending to an ENV path.""" - env1 = self.TestEnvironment(ENV = {'PATH': r'C:\dir\num\one;C:\dir\num\two'}, - MYENV = {'MYPATH': r'C:\mydir\num\one;C:\mydir\num\two'}) + env1 = self.TestEnvironment( + ENV={'PATH': r'C:\dir\num\one;C:\dir\num\two'}, + MYENV={'MYPATH': r'C:\mydir\num\one;C:\mydir\num\two'}, + ) # have to include the pathsep here so that the test will work on UNIX too. - env1.AppendENVPath('PATH',r'C:\dir\num\two', sep = ';') - env1.AppendENVPath('PATH',r'C:\dir\num\three', sep = ';') - env1.AppendENVPath('MYPATH',r'C:\mydir\num\three','MYENV', sep = ';') - env1.AppendENVPath('MYPATH',r'C:\mydir\num\one','MYENV', sep = ';', delete_existing=1) + env1.AppendENVPath('PATH', r'C:\dir\num\two', sep=';') + env1.AppendENVPath('PATH', r'C:\dir\num\three', sep=';') + env1.AppendENVPath('MYPATH', r'C:\mydir\num\three', 'MYENV', sep=';') + assert ( + env1['ENV']['PATH'] == r'C:\dir\num\one;C:\dir\num\two;C:\dir\num\three' + ), env1['ENV']['PATH'] + + env1.AppendENVPath('MYPATH', r'C:\mydir\num\three', 'MYENV', sep=';') + env1.AppendENVPath( + 'MYPATH', r'C:\mydir\num\one', 'MYENV', sep=';', delete_existing=1 + ) # this should do nothing since delete_existing is 0 - env1.AppendENVPath('MYPATH',r'C:\mydir\num\three','MYENV', sep = ';') - assert(env1['ENV']['PATH'] == r'C:\dir\num\one;C:\dir\num\two;C:\dir\num\three') - assert(env1['MYENV']['MYPATH'] == r'C:\mydir\num\two;C:\mydir\num\three;C:\mydir\num\one') + assert ( + env1['MYENV']['MYPATH'] == r'C:\mydir\num\two;C:\mydir\num\three;C:\mydir\num\one' + ), env1['MYENV']['MYPATH'] - test = TestCmd.TestCmd(workdir = '') + test = TestCmd.TestCmd(workdir='') test.subdir('sub1', 'sub2') - p=env1['ENV']['PATH'] - env1.AppendENVPath('PATH','#sub1', sep = ';') - env1.AppendENVPath('PATH',env1.fs.Dir('sub2'), sep = ';') + p = env1['ENV']['PATH'] + env1.AppendENVPath('PATH', '#sub1', sep=';') + env1.AppendENVPath('PATH', env1.fs.Dir('sub2'), sep=';') assert env1['ENV']['PATH'] == p + ';sub1;sub2', env1['ENV']['PATH'] def test_AppendUnique(self): @@ -2357,23 +2366,32 @@ f5: \ def test_PrependENVPath(self): """Test prepending to an ENV path.""" - env1 = self.TestEnvironment(ENV = {'PATH': r'C:\dir\num\one;C:\dir\num\two'}, - MYENV = {'MYPATH': r'C:\mydir\num\one;C:\mydir\num\two'}) + env1 = self.TestEnvironment( + ENV={'PATH': r'C:\dir\num\one;C:\dir\num\two'}, + MYENV={'MYPATH': r'C:\mydir\num\one;C:\mydir\num\two'}, + ) # have to include the pathsep here so that the test will work on UNIX too. - env1.PrependENVPath('PATH',r'C:\dir\num\two',sep = ';') - env1.PrependENVPath('PATH',r'C:\dir\num\three',sep = ';') - env1.PrependENVPath('MYPATH',r'C:\mydir\num\three','MYENV',sep = ';') - env1.PrependENVPath('MYPATH',r'C:\mydir\num\one','MYENV',sep = ';') + env1.PrependENVPath('PATH', r'C:\dir\num\two', sep=';') + env1.PrependENVPath('PATH', r'C:\dir\num\three', sep=';') + assert ( + env1['ENV']['PATH'] == r'C:\dir\num\three;C:\dir\num\two;C:\dir\num\one' + ), env1['ENV']['PATH'] + + env1.PrependENVPath('MYPATH', r'C:\mydir\num\three', 'MYENV', sep=';') + env1.PrependENVPath('MYPATH', r'C:\mydir\num\one', 'MYENV', sep=';') # this should do nothing since delete_existing is 0 - env1.PrependENVPath('MYPATH',r'C:\mydir\num\three','MYENV', sep = ';', delete_existing=0) - assert(env1['ENV']['PATH'] == r'C:\dir\num\three;C:\dir\num\two;C:\dir\num\one') - assert(env1['MYENV']['MYPATH'] == r'C:\mydir\num\one;C:\mydir\num\three;C:\mydir\num\two') + env1.PrependENVPath( + 'MYPATH', r'C:\mydir\num\three', 'MYENV', sep=';', delete_existing=0 + ) + assert ( + env1['MYENV']['MYPATH'] == r'C:\mydir\num\one;C:\mydir\num\three;C:\mydir\num\two' + ), env1['MYENV']['MYPATH'] - test = TestCmd.TestCmd(workdir = '') + test = TestCmd.TestCmd(workdir='') test.subdir('sub1', 'sub2') - p=env1['ENV']['PATH'] - env1.PrependENVPath('PATH','#sub1', sep = ';') - env1.PrependENVPath('PATH',env1.fs.Dir('sub2'), sep = ';') + p = env1['ENV']['PATH'] + env1.PrependENVPath('PATH', '#sub1', sep=';') + env1.PrependENVPath('PATH', env1.fs.Dir('sub2'), sep=';') assert env1['ENV']['PATH'] == 'sub2;sub1;' + p, env1['ENV']['PATH'] def test_PrependUnique(self): diff --git a/SCons/UtilTests.py b/SCons/UtilTests.py index 8001d2e..5ed31cb 100644 --- a/SCons/UtilTests.py +++ b/SCons/UtilTests.py @@ -534,10 +534,16 @@ class UtilTestCase(unittest.TestCase): # have to include the pathsep here so that the test will work on UNIX too. p1 = PrependPath(p1, r'C:\dir\num\two', sep=';') p1 = PrependPath(p1, r'C:\dir\num\three', sep=';') + assert p1 == r'C:\dir\num\three;C:\dir\num\two;C:\dir\num\one', p1 + p2 = PrependPath(p2, r'C:\mydir\num\three', sep=';') p2 = PrependPath(p2, r'C:\mydir\num\one', sep=';') - assert (p1 == r'C:\dir\num\three;C:\dir\num\two;C:\dir\num\one') - assert (p2 == r'C:\mydir\num\one;C:\mydir\num\three;C:\mydir\num\two') + assert p2 == r'C:\mydir\num\one;C:\mydir\num\three;C:\mydir\num\two', p2 + + # check (only) first one is kept if there are dupes in new + p3 = r'C:\dir\num\one' + p3 = PrependPath(p3, r'C:\dir\num\two;C:\dir\num\three;C:\dir\num\two', sep=';') + assert p3 == r'C:\dir\num\two;C:\dir\num\three;C:\dir\num\one', p3 def test_AppendPath(self): """Test appending to a path.""" @@ -546,10 +552,16 @@ class UtilTestCase(unittest.TestCase): # have to include the pathsep here so that the test will work on UNIX too. p1 = AppendPath(p1, r'C:\dir\num\two', sep=';') p1 = AppendPath(p1, r'C:\dir\num\three', sep=';') + assert p1 == r'C:\dir\num\one;C:\dir\num\two;C:\dir\num\three', p1 + p2 = AppendPath(p2, r'C:\mydir\num\three', sep=';') p2 = AppendPath(p2, r'C:\mydir\num\one', sep=';') - assert (p1 == r'C:\dir\num\one;C:\dir\num\two;C:\dir\num\three') - assert (p2 == r'C:\mydir\num\two;C:\mydir\num\three;C:\mydir\num\one') + assert p2 == r'C:\mydir\num\two;C:\mydir\num\three;C:\mydir\num\one', p2 + + # check (only) last one is kept if there are dupes in new + p3 = r'C:\dir\num\one' + p3 = AppendPath(p3, r'C:\dir\num\two;C:\dir\num\three;C:\dir\num\two', sep=';') + assert p3 == r'C:\dir\num\one;C:\dir\num\three;C:\dir\num\two', p3 def test_PrependPathPreserveOld(self): """Test prepending to a path while preserving old paths""" @@ -557,7 +569,7 @@ class UtilTestCase(unittest.TestCase): # have to include the pathsep here so that the test will work on UNIX too. p1 = PrependPath(p1, r'C:\dir\num\two', sep=';', delete_existing=0) p1 = PrependPath(p1, r'C:\dir\num\three', sep=';') - assert (p1 == r'C:\dir\num\three;C:\dir\num\one;C:\dir\num\two') + assert p1 == r'C:\dir\num\three;C:\dir\num\one;C:\dir\num\two', p1 def test_AppendPathPreserveOld(self): """Test appending to a path while preserving old paths""" @@ -565,7 +577,7 @@ class UtilTestCase(unittest.TestCase): # have to include the pathsep here so that the test will work on UNIX too. p1 = AppendPath(p1, r'C:\dir\num\one', sep=';', delete_existing=0) p1 = AppendPath(p1, r'C:\dir\num\three', sep=';') - assert (p1 == r'C:\dir\num\one;C:\dir\num\two;C:\dir\num\three') + assert p1 == r'C:\dir\num\one;C:\dir\num\two;C:\dir\num\three', p1 def test_addPathIfNotExists(self): """Test the AddPathIfNotExists() function""" -- cgit v0.12