diff options
author | Tarek Ziadé <ziade.tarek@gmail.com> | 2009-06-03 11:12:08 (GMT) |
---|---|---|
committer | Tarek Ziadé <ziade.tarek@gmail.com> | 2009-06-03 11:12:08 (GMT) |
commit | fe327b97d2d797158e71d24a6918c8f57f3d65fd (patch) | |
tree | 208afa9ca8dd512ff33c83bc64c605edbdeada46 | |
parent | c6709978acf6b580af8ad2dfa3ff7b0d3d919f19 (diff) | |
download | cpython-fe327b97d2d797158e71d24a6918c8f57f3d65fd.zip cpython-fe327b97d2d797158e71d24a6918c8f57f3d65fd.tar.gz cpython-fe327b97d2d797158e71d24a6918c8f57f3d65fd.tar.bz2 |
more cleanup and test coverage for distutils.extension
-rw-r--r-- | Lib/distutils/extension.py | 33 | ||||
-rwxr-xr-x | Lib/distutils/tests/test_extension.py | 35 |
2 files changed, 46 insertions, 22 deletions
diff --git a/Lib/distutils/extension.py b/Lib/distutils/extension.py index 4d72c40..98b841f 100644 --- a/Lib/distutils/extension.py +++ b/Lib/distutils/extension.py @@ -5,13 +5,9 @@ modules in setup scripts.""" __revision__ = "$Id$" -import os, string, sys -from types import * - -try: - import warnings -except ImportError: - warnings = None +import os +import sys +import warnings # This class is really only used by the "build_ext" command, so it might # make sense to put it in distutils.command.build_ext. However, that @@ -107,9 +103,9 @@ class Extension: optional=None, **kw # To catch unknown keywords ): - assert type(name) is StringType, "'name' must be a string" - assert (type(sources) is ListType and - map(type, sources) == [StringType]*len(sources)), \ + assert isinstance(name, str) + assert (isinstance(sources, list) and + all(isinstance(v, str) for v in sources)), \ "'sources' must be a list of strings" self.name = name @@ -130,16 +126,11 @@ class Extension: self.optional = optional # If there are unknown keyword options, warn about them - if len(kw): - L = kw.keys() ; L.sort() - L = map(repr, L) - msg = "Unknown Extension options: " + string.join(L, ', ') - if warnings is not None: - warnings.warn(msg) - else: - sys.stderr.write(msg + '\n') -# class Extension - + if len(kw) > 0: + options = [repr(option) for option in kw] + options = ', '.join(sorted(options)) + msg = "Unknown Extension options: %s" % options + warnings.warn(msg) def read_setup_file(filename): """Reads a Setup file and returns Extension instances.""" @@ -200,7 +191,7 @@ def read_setup_file(filename): elif switch == "-I": ext.include_dirs.append(value) elif switch == "-D": - equals = string.find(value, "=") + equals = value.find("=") if equals == -1: # bare "-DFOO" -- no value ext.define_macros.append((value, None)) else: # "-DFOO=blah" diff --git a/Lib/distutils/tests/test_extension.py b/Lib/distutils/tests/test_extension.py index 1fcf0f5..159ac2b 100755 --- a/Lib/distutils/tests/test_extension.py +++ b/Lib/distutils/tests/test_extension.py @@ -1,8 +1,10 @@ """Tests for distutils.extension.""" import unittest import os +import warnings -from distutils.extension import read_setup_file +from test.test_support import check_warnings +from distutils.extension import read_setup_file, Extension class ExtensionTestCase(unittest.TestCase): @@ -28,6 +30,37 @@ class ExtensionTestCase(unittest.TestCase): self.assertEquals(names, wanted) + def test_extension_init(self): + # the first argument, which is the name, must be a string + self.assertRaises(AssertionError, Extension, 1, []) + ext = Extension('name', []) + self.assertEquals(ext.name, 'name') + + # the second argument, which is the list of files, must + # be a list of strings + self.assertRaises(AssertionError, Extension, 'name', 'file') + self.assertRaises(AssertionError, Extension, 'name', ['file', 1]) + ext = Extension('name', ['file1', 'file2']) + self.assertEquals(ext.sources, ['file1', 'file2']) + + # others arguments have defaults + for attr in ('include_dirs', 'define_macros', 'undef_macros', + 'library_dirs', 'libraries', 'runtime_library_dirs', + 'extra_objects', 'extra_compile_args', 'extra_link_args', + 'export_symbols', 'swig_opts', 'depends'): + self.assertEquals(getattr(ext, attr), []) + + self.assertEquals(ext.language, None) + self.assertEquals(ext.optional, None) + + # if there are unknown keyword options, warn about them + with check_warnings() as w: + warnings.simplefilter('always') + ext = Extension('name', ['file1', 'file2'], chic=True) + + self.assertEquals(len(w.warnings), 1) + self.assertEquals(str(w.warnings[0].message), + "Unknown Extension options: 'chic'") def test_suite(): return unittest.makeSuite(ExtensionTestCase) |