diff options
Diffstat (limited to 'src/engine/SCons/Tool/MSCommon/vcTests.py')
| -rw-r--r-- | src/engine/SCons/Tool/MSCommon/vcTests.py | 180 | 
1 files changed, 180 insertions, 0 deletions
diff --git a/src/engine/SCons/Tool/MSCommon/vcTests.py b/src/engine/SCons/Tool/MSCommon/vcTests.py new file mode 100644 index 0000000..25537f3 --- /dev/null +++ b/src/engine/SCons/Tool/MSCommon/vcTests.py @@ -0,0 +1,180 @@ +# +# 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 +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# from typing import Dict, Any + +__revision__ = "src/engine/SCons/Tool/MSCommon/vcTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan" + +import os +import os.path +import unittest + +import SCons.Node.FS +import SCons.Warnings +import SCons.Tool.MSCommon.vc + +import TestCmd + +original = os.getcwd() + +test = TestCmd.TestCmd(workdir='') + +os.chdir(test.workpath('')) + +MSVCUnsupportedHostArch = SCons.Tool.MSCommon.vc.MSVCUnsupportedHostArch +MSVCUnsupportedTargetArch = SCons.Tool.MSCommon.vc.MSVCUnsupportedTargetArch + +MS_TOOLS_VERSION='1.1.1' + +class MSVcTestCase(unittest.TestCase): + +    @staticmethod +    def _createDummyCl(path, add_bin=True): +        """ +        Creates a dummy cl.ex in the correct directory.  +        It will create all missing parent directories as well + +        Args: +            path: Relative path to cl.exe for the version about to be tested. +        """ + +        # print("PATH:%s"%path) + +        path = path.replace('\\', os.sep) +        if add_bin: +            create_path = os.path.join(path,'bin') +        else: +            create_path = path +        if create_path and not os.path.isdir(create_path): +            os.makedirs(create_path) +         +        create_this = os.path.join(create_path,'cl.exe') + +        # print("Creating: %s"%create_this) +        with open(create_this,'w') as ct: +            ct.write('created') + +         + + +    def runTest(self): +        """ +        Check that all proper HOST_PLATFORM and TARGET_PLATFORM are handled. +        Verify that improper HOST_PLATFORM and/or TARGET_PLATFORM are properly handled. +        by SCons.Tool.MSCommon.vc._check_cl_exists_in_vc_dir() +        """ + +        check = SCons.Tool.MSCommon.vc._check_cl_exists_in_vc_dir + +        env={'TARGET_ARCH':'x86'} +        p = SCons.Tool.MSCommon.vc._HOST_TARGET_TO_CL_DIR[('x86','x86')] +        MSVcTestCase._createDummyCl(p) +  +        # print("retval:%s"%check(env, '.', '8.0')) + + +        # Setup for VC 14+ tests + +        # Create the VC minor/major version file +        tools_version_file = SCons.Tool.MSCommon.vc._VC_TOOLS_VERSION_FILE +        tools_dir = os.path.dirname(tools_version_file) +        if not os.path.isdir(tools_dir): +            os.makedirs(tools_dir) +        try: +            with open(tools_version_file, 'w') as tf: +                tf.write(MS_TOOLS_VERSION) +        except IOError as e: +            print("Failed trying to write :%s :%s"%(tools_version_file, e)) + + +        # Now walk all the valid combinations of host/target for VC 14 + +        vc_gt_14_map = SCons.Tool.MSCommon.vc._HOST_TARGET_TO_CL_DIR_GREATER_THAN_14 + +        for key, value in vc_gt_14_map.items(): +            # print("GT 14 Got: %s -> %s"%(key,value)) + +            env={'TARGET_ARCH':key[1], 'HOST_ARCH':key[0]} +            path = os.path.join('.','Tools','MSVC', MS_TOOLS_VERSION, 'bin', value[0], value[1]) +            MSVcTestCase._createDummyCl(path, add_bin=False) +            result=check(env, '.', '14.1') +            # print("for:%s got :%s"%(key[1], result)) +            self.assertTrue(result, "Checking host: %s target: %s"%(value[0], value[1])) + +        # Now test bogus value for HOST_ARCH +        env={'TARGET_ARCH':'x86', 'HOST_ARCH':'GARBAGE'} +        try: +            result=check(env, '.', '14.1') +            # print("for:%s got :%s"%(env, result)) +            self.assertFalse(result, "Did not fail with bogus HOST_ARCH host: %s target: %s"%(value[0], value[1])) +        except MSVCUnsupportedHostArch: +            pass +        else: +            self.fail('Did not fail when HOST_ARCH specified as: %s'%env['HOST_ARCH']) + +        # Now test bogus value for TARGET_ARCH +        env={'TARGET_ARCH':'GARBAGE', 'HOST_ARCH':'x86'} +        try: +            result=check(env, '.', '14.1') +            # print("for:%s got :%s"%(env, result)) +            self.assertFalse(result, "Did not fail with bogus TARGET_ARCH host: %s target: %s"%(value[0], value[1])) +        except MSVCUnsupportedTargetArch: +            pass +        else: +            self.fail('Did not fail when HOST_ARCH specified as: %s'%env['TARGET_ARCH']) + +        # Test >8 < 14 VC versions +        vc_map = SCons.Tool.MSCommon.vc._HOST_TARGET_TO_CL_DIR +        for key,value in vc_map.items(): +            # print("LT 14 Got: %s -> %s"%(key,value)) +            env={'TARGET_ARCH':key[1], 'HOST_ARCH':key[0]} +            path = os.path.join('.', 'bin', value ) +            MSVcTestCase._createDummyCl(path, add_bin=False) +            result=check(env, '.', '9.0') +            # print("for:%s got :%s"%(key[1], result)) +            self.assertTrue(result, "Checking host: %s target: %s"%(key[0], key[1])) + +        # Now test bogus value for HOST_ARCH +        env={'TARGET_ARCH':'x86', 'HOST_ARCH':'GARBAGE'} +        try: +            result=check(env, '.', '9.0') +            # print("for:%s got :%s"%(env, result)) +            self.assertFalse(result, "Did not fail with bogus HOST_ARCH host: %s target: %s"%(env['HOST_ARCH'], env['TARGET_ARCH'])) +        except MSVCUnsupportedHostArch: +            pass +        else: +            self.fail('Did not fail when HOST_ARCH specified as: %s'%env['HOST_ARCH']) + +        # Now test bogus value for TARGET_ARCH +        env={'TARGET_ARCH':'GARBAGE', 'HOST_ARCH':'x86'} +        try: +            result=check(env, '.', '9.0') +            # print("for:%s got :%s"%(env, result)) +            self.assertFalse(result, "Did not fail with bogus TARGET_ARCH host: %s target: %s"%(env['HOST_ARCH'], env['TARGET_ARCH'])) +        except MSVCUnsupportedTargetArch: +            pass +        else: +            self.fail('Did not fail when HOST_ARCH specified as: %s'%env['TARGET_ARCH']) + + + +if __name__ == "__main__": +    unittest.main()  | 
