Home | History | Annotate | Download | only in tests
      1 """Tests for distutils.ccompiler."""
      2 import os
      3 import unittest
      4 from test.test_support import captured_stdout
      5 
      6 from distutils.ccompiler import (gen_lib_options, CCompiler,
      7                                  get_default_compiler, customize_compiler)
      8 from distutils import debug
      9 from distutils.tests import support
     10 
     11 class FakeCompiler(object):
     12     def library_dir_option(self, dir):
     13         return "-L" + dir
     14 
     15     def runtime_library_dir_option(self, dir):
     16         return ["-cool", "-R" + dir]
     17 
     18     def find_library_file(self, dirs, lib, debug=0):
     19         return 'found'
     20 
     21     def library_option(self, lib):
     22         return "-l" + lib
     23 
     24 class CCompilerTestCase(support.EnvironGuard, unittest.TestCase):
     25 
     26     def test_gen_lib_options(self):
     27         compiler = FakeCompiler()
     28         libdirs = ['lib1', 'lib2']
     29         runlibdirs = ['runlib1']
     30         libs = [os.path.join('dir', 'name'), 'name2']
     31 
     32         opts = gen_lib_options(compiler, libdirs, runlibdirs, libs)
     33         wanted = ['-Llib1', '-Llib2', '-cool', '-Rrunlib1', 'found',
     34                   '-lname2']
     35         self.assertEqual(opts, wanted)
     36 
     37     def test_debug_print(self):
     38 
     39         class MyCCompiler(CCompiler):
     40             executables = {}
     41 
     42         compiler = MyCCompiler()
     43         with captured_stdout() as stdout:
     44             compiler.debug_print('xxx')
     45         stdout.seek(0)
     46         self.assertEqual(stdout.read(), '')
     47 
     48         debug.DEBUG = True
     49         try:
     50             with captured_stdout() as stdout:
     51                 compiler.debug_print('xxx')
     52             stdout.seek(0)
     53             self.assertEqual(stdout.read(), 'xxx\n')
     54         finally:
     55             debug.DEBUG = False
     56 
     57     def test_customize_compiler(self):
     58 
     59         # not testing if default compiler is not unix

     60         if get_default_compiler() != 'unix':
     61             return
     62 
     63         os.environ['AR'] = 'my_ar'
     64         os.environ['ARFLAGS'] = '-arflags'
     65 
     66         # make sure AR gets caught

     67         class compiler:
     68             compiler_type = 'unix'
     69 
     70             def set_executables(self, **kw):
     71                 self.exes = kw
     72 
     73         comp = compiler()
     74         customize_compiler(comp)
     75         self.assertEqual(comp.exes['archiver'], 'my_ar -arflags')
     76 
     77 def test_suite():
     78     return unittest.makeSuite(CCompilerTestCase)
     79 
     80 if __name__ == "__main__":
     81     unittest.main(defaultTest="test_suite")
     82