more cleanup and test coverage for distutils.extension
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 @@
 
 __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 @@
                   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 @@
         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 @@
             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 @@
 
         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)