]> granicus.if.org Git - python/commitdiff
Added a test and cleaned check_library_list to be ready to fix #5940
authorTarek Ziadé <ziade.tarek@gmail.com>
Wed, 6 May 2009 07:17:52 +0000 (07:17 +0000)
committerTarek Ziadé <ziade.tarek@gmail.com>
Wed, 6 May 2009 07:17:52 +0000 (07:17 +0000)
Lib/distutils/command/build_clib.py
Lib/distutils/tests/test_build_clib.py [new file with mode: 0644]

index fe921fb88b5026bb1e8b4211e0158700d982b6a2..1d8cd8c3faa125f044ab694b63ebd5772e86ce1c 100644 (file)
@@ -127,43 +127,41 @@ class build_clib (Command):
     # run()
 
 
-    def check_library_list (self, libraries):
-        """Ensure that the list of libraries (presumably provided as a
-           command option 'libraries') is valid, i.e. it is a list of
-           2-tuples, where the tuples are (library_name, build_info_dict).
-           Raise DistutilsSetupError if the structure is invalid anywhere;
-           just returns otherwise."""
+    def check_library_list(self, libraries):
+        """Ensure that the list of libraries is valid.
 
-        # Yechh, blecch, ackk: this is ripped straight out of build_ext.py,
-        # with only names changed to protect the innocent!
+        `library` is presumably provided as a command option 'libraries'.
+        This method checks that it is a list of 2-tuples, where the tuples
+        are (library_name, build_info_dict).
 
-        if type(libraries) is not ListType:
+        Raise DistutilsSetupError if the structure is invalid anywhere;
+        just returns otherwise.
+        """
+        if not isinstance(libraries, list):
             raise DistutilsSetupError, \
                   "'libraries' option must be a list of tuples"
 
         for lib in libraries:
-            if type(lib) is not TupleType and len(lib) != 2:
+            if not isinstance(lib, tuple) and len(lib) != 2:
                 raise DistutilsSetupError, \
                       "each element of 'libraries' must a 2-tuple"
 
-            if type(lib[0]) is not StringType:
+            name, build_info = lib
+
+            if not isinstance(name, str):
                 raise DistutilsSetupError, \
                       "first element of each tuple in 'libraries' " + \
                       "must be a string (the library name)"
-            if '/' in lib[0] or (os.sep != '/' and os.sep in lib[0]):
+            if '/' in name or (os.sep != '/' and os.sep in name):
                 raise DistutilsSetupError, \
                       ("bad library name '%s': " +
                        "may not contain directory separators") % \
                       lib[0]
 
-            if type(lib[1]) is not DictionaryType:
+            if not isinstance(build_info, dict):
                 raise DistutilsSetupError, \
                       "second element of each tuple in 'libraries' " + \
                       "must be a dictionary (build info)"
-        # for lib
-
-    # check_library_list ()
-
 
     def get_library_names (self):
         # Assume the library list is valid -- 'check_library_list()' is
diff --git a/Lib/distutils/tests/test_build_clib.py b/Lib/distutils/tests/test_build_clib.py
new file mode 100644 (file)
index 0000000..36c07b7
--- /dev/null
@@ -0,0 +1,47 @@
+"""Tests for distutils.command.build_clib."""
+import unittest
+
+from distutils.command.build_clib import build_clib
+from distutils.errors import DistutilsSetupError
+from distutils.tests import support
+
+class BuildCLibTestCase(support.TempdirManager,
+                        support.LoggingSilencer,
+                        unittest.TestCase):
+
+    def test_check_library_dist(self):
+        pkg_dir, dist = self.create_dist()
+        cmd = build_clib(dist)
+
+        # 'libraries' option must be a list
+        self.assertRaises(DistutilsSetupError, cmd.check_library_list, 'foo')
+
+        # each element of 'libraries' must a 2-tuple
+        self.assertRaises(DistutilsSetupError, cmd.check_library_list,
+                          ['foo1', 'foo2'])
+
+        # first element of each tuple in 'libraries'
+        # must be a string (the library name)
+        self.assertRaises(DistutilsSetupError, cmd.check_library_list,
+                          [(1, 'foo1'), ('name', 'foo2')])
+
+        # library name may not contain directory separators
+        self.assertRaises(DistutilsSetupError, cmd.check_library_list,
+                          [('name', 'foo1'),
+                           ('another/name', 'foo2')])
+
+        # second element of each tuple must be a dictionary (build info)
+        self.assertRaises(DistutilsSetupError, cmd.check_library_list,
+                          [('name', {}),
+                           ('another', 'foo2')])
+
+        # those work
+        libs = [('name', {}), ('name', {'ok': 'good'})]
+        cmd.check_library_list(libs)
+
+
+def test_suite():
+    return unittest.makeSuite(BuildCLibTestCase)
+
+if __name__ == "__main__":
+    unittest.main(defaultTest="test_suite")