mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Added a test and cleaned check_library_list to be ready to fix #5940
This commit is contained in:
parent
041f465cbd
commit
d2bb1a5377
2 changed files with 62 additions and 17 deletions
|
@ -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
|
||||
|
|
47
Lib/distutils/tests/test_build_clib.py
Normal file
47
Lib/distutils/tests/test_build_clib.py
Normal file
|
@ -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")
|
Loading…
Add table
Add a link
Reference in a new issue