symbian-qemu-0.9.1-12/python-2.6.1/Lib/distutils/tests/test_build_ext.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 import sys
       
     2 import os
       
     3 import tempfile
       
     4 import shutil
       
     5 from StringIO import StringIO
       
     6 
       
     7 from distutils.core import Extension, Distribution
       
     8 from distutils.command.build_ext import build_ext
       
     9 from distutils import sysconfig
       
    10 
       
    11 import unittest
       
    12 from test import test_support
       
    13 
       
    14 class BuildExtTestCase(unittest.TestCase):
       
    15     def setUp(self):
       
    16         # Create a simple test environment
       
    17         # Note that we're making changes to sys.path
       
    18         self.tmp_dir = tempfile.mkdtemp(prefix="pythontest_")
       
    19         self.sys_path = sys.path[:]
       
    20         sys.path.append(self.tmp_dir)
       
    21 
       
    22         xx_c = os.path.join(sysconfig.project_base, 'Modules', 'xxmodule.c')
       
    23         shutil.copy(xx_c, self.tmp_dir)
       
    24 
       
    25     def test_build_ext(self):
       
    26         xx_c = os.path.join(self.tmp_dir, 'xxmodule.c')
       
    27         xx_ext = Extension('xx', [xx_c])
       
    28         dist = Distribution({'name': 'xx', 'ext_modules': [xx_ext]})
       
    29         dist.package_dir = self.tmp_dir
       
    30         cmd = build_ext(dist)
       
    31         if os.name == "nt":
       
    32             # On Windows, we must build a debug version iff running
       
    33             # a debug build of Python
       
    34             cmd.debug = sys.executable.endswith("_d.exe")
       
    35         cmd.build_lib = self.tmp_dir
       
    36         cmd.build_temp = self.tmp_dir
       
    37 
       
    38         old_stdout = sys.stdout
       
    39         if not test_support.verbose:
       
    40             # silence compiler output
       
    41             sys.stdout = StringIO()
       
    42         try:
       
    43             cmd.ensure_finalized()
       
    44             cmd.run()
       
    45         finally:
       
    46             sys.stdout = old_stdout
       
    47 
       
    48         import xx
       
    49 
       
    50         for attr in ('error', 'foo', 'new', 'roj'):
       
    51             self.assert_(hasattr(xx, attr))
       
    52 
       
    53         self.assertEquals(xx.foo(2, 5), 7)
       
    54         self.assertEquals(xx.foo(13,15), 28)
       
    55         self.assertEquals(xx.new().demo(), None)
       
    56         doc = 'This is a template module just for instruction.'
       
    57         self.assertEquals(xx.__doc__, doc)
       
    58         self.assert_(isinstance(xx.Null(), xx.Null))
       
    59         self.assert_(isinstance(xx.Str(), xx.Str))
       
    60 
       
    61     def tearDown(self):
       
    62         # Get everything back to normal
       
    63         test_support.unload('xx')
       
    64         sys.path = self.sys_path
       
    65         # XXX on Windows the test leaves a directory with xx module in TEMP
       
    66         shutil.rmtree(self.tmp_dir, os.name == 'nt' or sys.platform == 'cygwin')
       
    67 
       
    68 def test_suite():
       
    69     if not sysconfig.python_build:
       
    70         if test_support.verbose:
       
    71             print 'test_build_ext: The test must be run in a python build dir'
       
    72         return unittest.TestSuite()
       
    73     else: return unittest.makeSuite(BuildExtTestCase)
       
    74 
       
    75 if __name__ == '__main__':
       
    76     test_support.run_unittest(test_suite())