diff options
Diffstat (limited to 'src/engine/SCons')
| -rw-r--r-- | src/engine/SCons/Util.py | 34 | ||||
| -rw-r--r-- | src/engine/SCons/UtilTests.py | 15 |
2 files changed, 44 insertions, 5 deletions
diff --git a/src/engine/SCons/Util.py b/src/engine/SCons/Util.py index e2399a8..998a01b 100644 --- a/src/engine/SCons/Util.py +++ b/src/engine/SCons/Util.py @@ -98,15 +98,39 @@ _altsep = os.altsep if _altsep is None and sys.platform == 'win32': # My ActivePython 2.0.1 doesn't set os.altsep! What gives? _altsep = '/' +if _altsep: + def rightmost_separator(path, sep, _altsep=_altsep): + rfind = string.rfind + return max(rfind(path, sep), rfind(path, _altsep)) +else: + rightmost_separator = string.rfind + +# First two from the Python Cookbook, just for completeness. +# (Yeah, yeah, YAGNI...) +def containsAny(str, set): + """Check whether sequence str contains ANY of the items in set.""" + for c in set: + if c in str: return 1 + return 0 + +def containsAll(str, set): + """Check whether sequence str contains ALL of the items in set.""" + for c in set: + if c not in str: return 0 + return 1 + +def containsOnly(str, set): + """Check whether sequence str contains ONLY items in set.""" + for c in str: + if c not in set: return 0 + return 1 def splitext(path): "Same as os.path.splitext() but faster." - if _altsep: - sep = max(string.rfind(path, os.sep), string.rfind(path, _altsep)) - else: - sep = string.rfind(path, os.sep) + sep = rightmost_separator(path, os.sep) dot = string.rfind(path, '.') - if dot > sep: + # An ext is only real if it has at least one non-digit char + if dot > sep and not containsOnly(path[dot:], "0123456789."): return path[:dot],path[dot:] else: return path,"" diff --git a/src/engine/SCons/UtilTests.py b/src/engine/SCons/UtilTests.py index 713f522..1bce1af 100644 --- a/src/engine/SCons/UtilTests.py +++ b/src/engine/SCons/UtilTests.py @@ -1509,6 +1509,21 @@ class UtilTestCase(unittest.TestCase): r = adjustixes('dir/file', 'pre-', '-suf') assert r == os.path.join('dir', 'pre-file-suf'), r + def test_containsAny(self): + """Test the containsAny() function""" + assert containsAny('*.py', '*?[]') + assert not containsAny('file.txt', '*?[]') + + def test_containsAll(self): + """Test the containsAll() function""" + assert containsAll('43221', '123') + assert not containsAll('134', '123') + + def test_containsOnly(self): + """Test the containsOnly() function""" + assert containsOnly('.83', '0123456789.') + assert not containsOnly('43221', '123') + if __name__ == "__main__": suite = unittest.makeSuite(UtilTestCase, 'test_') if not unittest.TextTestRunner().run(suite).wasSuccessful(): |
