diff options
Diffstat (limited to 'src/engine/SCons/Tool/ToolTests.py')
| -rw-r--r-- | src/engine/SCons/Tool/ToolTests.py | 88 | 
1 files changed, 63 insertions, 25 deletions
diff --git a/src/engine/SCons/Tool/ToolTests.py b/src/engine/SCons/Tool/ToolTests.py index f5678c1..25e9b2d 100644 --- a/src/engine/SCons/Tool/ToolTests.py +++ b/src/engine/SCons/Tool/ToolTests.py @@ -1,5 +1,5 @@  # -# Copyright (c) 2001 - 2017 The SCons Foundation +# Copyright (c) 2001 - 2019 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,8 +21,9 @@  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  # -__revision__ = "src/engine/SCons/Tool/ToolTests.py rel_3.0.0:4395:8972f6a2f699 2017/09/18 12:59:24 bdbaddog" +__revision__ = "src/engine/SCons/Tool/ToolTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan" +import os  import sys  import unittest @@ -31,29 +32,49 @@ import TestUnit  import SCons.Errors  import SCons.Tool + +class DummyEnvironment(object): +    def __init__(self): +        self.dict = {} +    def Detect(self, progs): +        if not SCons.Util.is_List(progs): +            progs = [ progs ] +        return progs[0] +    def Append(self, **kw): +        self.dict.update(kw) +    def __getitem__(self, key): +        return self.dict[key] +    def __setitem__(self, key, val): +        self.dict[key] = val +    def __contains__(self, key): +        return self.dict.__contains__(key) +    def has_key(self, key): +        return key in self.dict +    def subst(self, string, *args, **kwargs): +        return string + +    PHONY_PATH = "/usr/phony/bin" +    def WhereIs(self, key_program): +        # for pathfind test for Issue #3336: +        # need to fake the case where extra paths are searched, and +        # if one has a "hit" after some fails, the fails are left in +        # the environment's PATH. So construct a positive answer if +        # we see a magic known path component in PATH; answer in +        # the negative otherwise. +        paths = self['ENV']['PATH'] +        if self.PHONY_PATH in paths: +            return os.path.join(self.PHONY_PATH, key_program) +        return None +    def AppendENVPath(self, pathvar, path): +        # signature matches how called from find_program_path() +        self['ENV'][pathvar] = self['ENV'][pathvar] + os.pathsep + path + +  class ToolTestCase(unittest.TestCase):      def test_Tool(self):          """Test the Tool() function""" -        class Environment(object): -            def __init__(self): -                self.dict = {} -            def Detect(self, progs): -                if not SCons.Util.is_List(progs): -                    progs = [ progs ] -                return progs[0] -            def Append(self, **kw): -                self.dict.update(kw) -            def __getitem__(self, key): -                return self.dict[key] -            def __setitem__(self, key, val): -                self.dict[key] = val -            def __contains__(self, key): -                return self.dict.__contains__(key) -            def has_key(self, key): -                return key in self.dict -            def subst(self, string, *args, **kwargs): -                return string -        env = Environment() + +        env = DummyEnvironment()          env['BUILDERS'] = {}          env['ENV'] = {}          env['PLATFORM'] = 'test' @@ -67,17 +88,34 @@ class ToolTestCase(unittest.TestCase):              SCons.Tool.Tool()          except TypeError:              pass -        else: +        else:   # TODO pylint E0704: bare raise not inside except              raise          try:              p = SCons.Tool.Tool('_does_not_exist_') -        except SCons.Errors.EnvironmentError: +        except SCons.Errors.SConsEnvironmentError:              pass -        else: +        else:   # TODO pylint E0704: bare raise not inside except              raise +    def test_pathfind(self): +        """Test that find_program_path() does not alter PATH""" + +        env = DummyEnvironment() +        PHONY_PATHS = [ +            r'C:\cygwin64\bin', +            r'C:\cygwin\bin', +            '/usr/local/dummy/bin', +            env.PHONY_PATH,     # will be recognized by dummy WhereIs +        ] +        env['ENV'] = {} +        env['ENV']['PATH'] = '/usr/local/bin:/opt/bin:/bin:/usr/bin' +        pre_path = env['ENV']['PATH'] +        _ = SCons.Tool.find_program_path(env, 'no_tool', default_paths=PHONY_PATHS) +        assert env['ENV']['PATH'] == pre_path, env['ENV']['PATH'] + +  if __name__ == "__main__":      suite = unittest.makeSuite(ToolTestCase, 'test_')      TestUnit.run(suite)  | 
