blob: e35f2738b6a21966e862cb0bbecbe92f6b0d60ef [file] [log] [blame]
Tarek Ziadée6ed2f92009-06-03 10:31:15 +00001"""Tests for distutils.extension."""
2import unittest
3import os
Tarek Ziadé68407212009-06-03 11:17:15 +00004import warnings
Tarek Ziadée6ed2f92009-06-03 10:31:15 +00005
Éric Araujob344dd02011-02-02 21:38:37 +00006from test.support import check_warnings, run_unittest
Tarek Ziadé68407212009-06-03 11:17:15 +00007from distutils.extension import read_setup_file, Extension
Tarek Ziadée6ed2f92009-06-03 10:31:15 +00008
9class ExtensionTestCase(unittest.TestCase):
10
11 def test_read_setup_file(self):
12 # trying to read a Setup file
13 # (sample extracted from the PyGame project)
14 setup = os.path.join(os.path.dirname(__file__), 'Setup.sample')
15
16 exts = read_setup_file(setup)
17 names = [ext.name for ext in exts]
18 names.sort()
19
20 # here are the extensions read_setup_file should have created
21 # out of the file
22 wanted = ['_arraysurfarray', '_camera', '_numericsndarray',
23 '_numericsurfarray', 'base', 'bufferproxy', 'cdrom',
24 'color', 'constants', 'display', 'draw', 'event',
25 'fastevent', 'font', 'gfxdraw', 'image', 'imageext',
26 'joystick', 'key', 'mask', 'mixer', 'mixer_music',
27 'mouse', 'movie', 'overlay', 'pixelarray', 'pypm',
28 'rect', 'rwobject', 'scrap', 'surface', 'surflock',
29 'time', 'transform']
30
Ezio Melotti19f2aeb2010-11-21 01:30:29 +000031 self.assertEqual(names, wanted)
Tarek Ziadée6ed2f92009-06-03 10:31:15 +000032
Tarek Ziadé68407212009-06-03 11:17:15 +000033 def test_extension_init(self):
34 # the first argument, which is the name, must be a string
35 self.assertRaises(AssertionError, Extension, 1, [])
36 ext = Extension('name', [])
Ezio Melotti19f2aeb2010-11-21 01:30:29 +000037 self.assertEqual(ext.name, 'name')
Tarek Ziadé68407212009-06-03 11:17:15 +000038
39 # the second argument, which is the list of files, must
40 # be a list of strings
41 self.assertRaises(AssertionError, Extension, 'name', 'file')
42 self.assertRaises(AssertionError, Extension, 'name', ['file', 1])
43 ext = Extension('name', ['file1', 'file2'])
Ezio Melotti19f2aeb2010-11-21 01:30:29 +000044 self.assertEqual(ext.sources, ['file1', 'file2'])
Tarek Ziadé68407212009-06-03 11:17:15 +000045
46 # others arguments have defaults
47 for attr in ('include_dirs', 'define_macros', 'undef_macros',
48 'library_dirs', 'libraries', 'runtime_library_dirs',
49 'extra_objects', 'extra_compile_args', 'extra_link_args',
50 'export_symbols', 'swig_opts', 'depends'):
Ezio Melotti19f2aeb2010-11-21 01:30:29 +000051 self.assertEqual(getattr(ext, attr), [])
Tarek Ziadé68407212009-06-03 11:17:15 +000052
Ezio Melotti19f2aeb2010-11-21 01:30:29 +000053 self.assertEqual(ext.language, None)
54 self.assertEqual(ext.optional, None)
Tarek Ziadé68407212009-06-03 11:17:15 +000055
56 # if there are unknown keyword options, warn about them
57 with check_warnings() as w:
58 warnings.simplefilter('always')
59 ext = Extension('name', ['file1', 'file2'], chic=True)
60
Ezio Melotti19f2aeb2010-11-21 01:30:29 +000061 self.assertEqual(len(w.warnings), 1)
62 self.assertEqual(str(w.warnings[0].message),
Tarek Ziadé68407212009-06-03 11:17:15 +000063 "Unknown Extension options: 'chic'")
Tarek Ziadée6ed2f92009-06-03 10:31:15 +000064
65def test_suite():
66 return unittest.makeSuite(ExtensionTestCase)
67
68if __name__ == "__main__":
Éric Araujob344dd02011-02-02 21:38:37 +000069 run_unittest(test_suite())