Commit d2bb1a53 authored by Tarek Ziadé's avatar Tarek Ziadé

Added a test and cleaned check_library_list to be ready to fix #5940

parent 041f465c
...@@ -127,43 +127,41 @@ class build_clib (Command): ...@@ -127,43 +127,41 @@ class build_clib (Command):
# run() # run()
def check_library_list (self, libraries): def check_library_list(self, libraries):
"""Ensure that the list of libraries (presumably provided as a """Ensure that the list of libraries is valid.
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."""
# Yechh, blecch, ackk: this is ripped straight out of build_ext.py, `library` is presumably provided as a command option 'libraries'.
# with only names changed to protect the innocent! 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, \ raise DistutilsSetupError, \
"'libraries' option must be a list of tuples" "'libraries' option must be a list of tuples"
for lib in libraries: 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, \ raise DistutilsSetupError, \
"each element of 'libraries' must a 2-tuple" "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, \ raise DistutilsSetupError, \
"first element of each tuple in 'libraries' " + \ "first element of each tuple in 'libraries' " + \
"must be a string (the library name)" "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, \ raise DistutilsSetupError, \
("bad library name '%s': " + ("bad library name '%s': " +
"may not contain directory separators") % \ "may not contain directory separators") % \
lib[0] lib[0]
if type(lib[1]) is not DictionaryType: if not isinstance(build_info, dict):
raise DistutilsSetupError, \ raise DistutilsSetupError, \
"second element of each tuple in 'libraries' " + \ "second element of each tuple in 'libraries' " + \
"must be a dictionary (build info)" "must be a dictionary (build info)"
# for lib
# check_library_list ()
def get_library_names (self): def get_library_names (self):
# Assume the library list is valid -- 'check_library_list()' is # Assume the library list is valid -- 'check_library_list()' is
......
"""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")
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment