blob: b2a418e0367c34bc332c54c1515a0b252232fdcb [file] [log] [blame]
Tarek Ziadéaa487982009-04-12 14:53:51 +00001"""Tests for distutils.command.config."""
2import unittest
3import os
Tarek Ziadé710fbc32009-04-13 12:42:26 +00004import sys
Éric Araujo54274ad2011-02-03 00:12:18 +00005from test.test_support import run_unittest
Tarek Ziadéaa487982009-04-12 14:53:51 +00006
Tarek Ziadéf6f4b302009-04-12 16:31:24 +00007from distutils.command.config import dump_file, config
Tarek Ziadéaa487982009-04-12 14:53:51 +00008from distutils.tests import support
9from distutils import log
10
11class ConfigTestCase(support.LoggingSilencer,
12 support.TempdirManager,
13 unittest.TestCase):
14
Tarek Ziadéf6f4b302009-04-12 16:31:24 +000015 def _info(self, msg, *args):
Tarek Ziadéaa487982009-04-12 14:53:51 +000016 for line in msg.splitlines():
17 self._logs.append(line)
18
19 def setUp(self):
20 super(ConfigTestCase, self).setUp()
21 self._logs = []
22 self.old_log = log.info
23 log.info = self._info
24
25 def tearDown(self):
26 log.info = self.old_log
27 super(ConfigTestCase, self).tearDown()
28
29 def test_dump_file(self):
30 this_file = os.path.splitext(__file__)[0] + '.py'
31 f = open(this_file)
32 try:
33 numlines = len(f.readlines())
34 finally:
35 f.close()
36
37 dump_file(this_file, 'I am the header')
Ezio Melotti2623a372010-11-21 13:34:58 +000038 self.assertEqual(len(self._logs), numlines+1)
Tarek Ziadéaa487982009-04-12 14:53:51 +000039
Serhiy Storchaka57bc6da2013-12-18 16:45:37 +020040 @unittest.skipIf(sys.platform == 'win32', "can't test on Windows")
Tarek Ziadéf6f4b302009-04-12 16:31:24 +000041 def test_search_cpp(self):
42 pkg_dir, dist = self.create_dist()
43 cmd = config(dist)
44
45 # simple pattern searches
Éric Araujo5fb16cd2011-10-08 02:15:55 +020046 match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
Ezio Melotti2623a372010-11-21 13:34:58 +000047 self.assertEqual(match, 0)
Tarek Ziadéf6f4b302009-04-12 16:31:24 +000048
Éric Araujo5fb16cd2011-10-08 02:15:55 +020049 match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
Ezio Melotti2623a372010-11-21 13:34:58 +000050 self.assertEqual(match, 1)
Tarek Ziadéf6f4b302009-04-12 16:31:24 +000051
Tarek Ziadée643bed2009-04-12 16:45:32 +000052 def test_finalize_options(self):
53 # finalize_options does a bit of transformation
54 # on options
55 pkg_dir, dist = self.create_dist()
56 cmd = config(dist)
57 cmd.include_dirs = 'one%stwo' % os.pathsep
58 cmd.libraries = 'one'
59 cmd.library_dirs = 'three%sfour' % os.pathsep
60 cmd.ensure_finalized()
61
Ezio Melotti2623a372010-11-21 13:34:58 +000062 self.assertEqual(cmd.include_dirs, ['one', 'two'])
63 self.assertEqual(cmd.libraries, ['one'])
64 self.assertEqual(cmd.library_dirs, ['three', 'four'])
Tarek Ziadée643bed2009-04-12 16:45:32 +000065
Tarek Ziadé3295eed2009-04-12 17:02:08 +000066 def test_clean(self):
67 # _clean removes files
68 tmp_dir = self.mkdtemp()
69 f1 = os.path.join(tmp_dir, 'one')
70 f2 = os.path.join(tmp_dir, 'two')
71
72 self.write_file(f1, 'xxx')
73 self.write_file(f2, 'xxx')
74
75 for f in (f1, f2):
Benjamin Peterson5c8da862009-06-30 22:57:08 +000076 self.assertTrue(os.path.exists(f))
Tarek Ziadé3295eed2009-04-12 17:02:08 +000077
78 pkg_dir, dist = self.create_dist()
79 cmd = config(dist)
80 cmd._clean(f1, f2)
81
82 for f in (f1, f2):
Serhiy Storchaka25a23ef2013-11-17 00:29:27 +020083 self.assertFalse(os.path.exists(f))
Tarek Ziadée643bed2009-04-12 16:45:32 +000084
Tarek Ziadéaa487982009-04-12 14:53:51 +000085def test_suite():
86 return unittest.makeSuite(ConfigTestCase)
87
88if __name__ == "__main__":
Éric Araujo54274ad2011-02-03 00:12:18 +000089 run_unittest(test_suite())