blob: 0c8dbd8269bed59925301f8d6e72dc2a7e2a5268 [file] [log] [blame]
Tarek Ziadé0eb13042009-04-12 14:57:46 +00001"""Tests for distutils.command.config."""
2import unittest
3import os
Tarek Ziadéf1f003c2009-04-13 12:59:03 +00004import sys
Éric Araujo70ec44a2010-11-06 02:44:43 +00005from test.support import run_unittest
Tarek Ziadé0eb13042009-04-12 14:57:46 +00006
Tarek Ziadéfd39b7a2009-04-12 16:34:34 +00007from distutils.command.config import dump_file, config
Tarek Ziadé0eb13042009-04-12 14:57:46 +00008from distutils.tests import support
9from distutils import log
10
11class ConfigTestCase(support.LoggingSilencer,
12 support.TempdirManager,
13 unittest.TestCase):
14
Tarek Ziadéfd39b7a2009-04-12 16:34:34 +000015 def _info(self, msg, *args):
Tarek Ziadé0eb13042009-04-12 14:57:46 +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 Melottib3aedd42010-11-20 19:04:17 +000038 self.assertEqual(len(self._logs), numlines+1)
Tarek Ziadé0eb13042009-04-12 14:57:46 +000039
Serhiy Storchaka3c02ece2013-12-18 16:41:01 +020040 @unittest.skipIf(sys.platform == 'win32', "can't test on Windows")
Tarek Ziadéfd39b7a2009-04-12 16:34:34 +000041 def test_search_cpp(self):
42 pkg_dir, dist = self.create_dist()
43 cmd = config(dist)
44
45 # simple pattern searches
Éric Araujodb95c7a2011-10-07 23:13:45 +020046 match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
Ezio Melottib3aedd42010-11-20 19:04:17 +000047 self.assertEqual(match, 0)
Tarek Ziadéfd39b7a2009-04-12 16:34:34 +000048
Éric Araujodb95c7a2011-10-07 23:13:45 +020049 match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
Ezio Melottib3aedd42010-11-20 19:04:17 +000050 self.assertEqual(match, 1)
Tarek Ziadéfd39b7a2009-04-12 16:34:34 +000051
Tarek Ziadébccb0c92009-04-12 16:49:20 +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 Melottib3aedd42010-11-20 19:04:17 +000062 self.assertEqual(cmd.include_dirs, ['one', 'two'])
63 self.assertEqual(cmd.libraries, ['one'])
64 self.assertEqual(cmd.library_dirs, ['three', 'four'])
Tarek Ziadébccb0c92009-04-12 16:49:20 +000065
Tarek Ziadé865a7142009-04-12 17:04:39 +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 Petersonc9c0f202009-06-30 23:06:06 +000076 self.assertTrue(os.path.exists(f))
Tarek Ziadé865a7142009-04-12 17:04:39 +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 Storchaka39989152013-11-17 00:17:46 +020083 self.assertFalse(os.path.exists(f))
Tarek Ziadébccb0c92009-04-12 16:49:20 +000084
Tarek Ziadé0eb13042009-04-12 14:57:46 +000085def test_suite():
86 return unittest.makeSuite(ConfigTestCase)
87
88if __name__ == "__main__":
Éric Araujo70ec44a2010-11-06 02:44:43 +000089 run_unittest(test_suite())