summaryrefslogtreecommitdiffstats
path: root/Lib/distutils/tests/test_build_ext.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/distutils/tests/test_build_ext.py')
-rw-r--r--Lib/distutils/tests/test_build_ext.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py
new file mode 100644
index 0000000..96c0a23
--- /dev/null
+++ b/Lib/distutils/tests/test_build_ext.py
@@ -0,0 +1,72 @@
+import sys
+import os
+import tempfile
+import shutil
+from io import StringIO
+
+from distutils.core import Extension, Distribution
+from distutils.command.build_ext import build_ext
+from distutils import sysconfig
+
+import unittest
+from test import support
+
+class BuildExtTestCase(unittest.TestCase):
+ def setUp(self):
+ # Create a simple test environment
+ # Note that we're making changes to sys.path
+ self.tmp_dir = tempfile.mkdtemp(prefix="pythontest_")
+ self.sys_path = sys.path[:]
+ sys.path.append(self.tmp_dir)
+
+ xx_c = os.path.join(sysconfig.project_base, 'Modules', 'xxmodule.c')
+ shutil.copy(xx_c, self.tmp_dir)
+
+ def test_build_ext(self):
+ xx_c = os.path.join(self.tmp_dir, 'xxmodule.c')
+ xx_ext = Extension('xx', [xx_c])
+ dist = Distribution({'name': 'xx', 'ext_modules': [xx_ext]})
+ dist.package_dir = self.tmp_dir
+ cmd = build_ext(dist)
+ cmd.build_lib = self.tmp_dir
+ cmd.build_temp = self.tmp_dir
+
+ old_stdout = sys.stdout
+ if not support.verbose:
+ # silence compiler output
+ sys.stdout = StringIO()
+ try:
+ cmd.ensure_finalized()
+ cmd.run()
+ finally:
+ sys.stdout = old_stdout
+
+ import xx
+
+ for attr in ('error', 'foo', 'new', 'roj'):
+ self.assert_(hasattr(xx, attr))
+
+ self.assertEquals(xx.foo(2, 5), 7)
+ self.assertEquals(xx.foo(13,15), 28)
+ self.assertEquals(xx.new().demo(), None)
+ doc = 'This is a template module just for instruction.'
+ self.assertEquals(xx.__doc__, doc)
+ self.assert_(isinstance(xx.Null(), xx.Null))
+ self.assert_(isinstance(xx.Str(), xx.Str))
+
+ def tearDown(self):
+ # Get everything back to normal
+ support.unload('xx')
+ sys.path = self.sys_path
+ # XXX on Windows the test leaves a directory with xx.pyd in TEMP
+ shutil.rmtree(self.tmp_dir, False if os.name != "nt" else True)
+
+def test_suite():
+ if not sysconfig.python_build:
+ if support.verbose:
+ print('test_build_ext: The test must be run in a python build dir')
+ return unittest.TestSuite()
+ else: return unittest.makeSuite(BuildExtTestCase)
+
+if __name__ == '__main__':
+ support.run_unittest(test_suite())