1"""Tests for distutils.command.config."""
2import unittest
3import os
4import sys
5from test.support import run_unittest, missing_compiler_executable
6
7from distutils.command.config import dump_file, config
8from distutils.tests import support
9from distutils import log
10
11class ConfigTestCase(support.LoggingSilencer,
12                     support.TempdirManager,
13                     unittest.TestCase):
14
15    def _info(self, msg, *args):
16        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')
38        self.assertEqual(len(self._logs), numlines+1)
39
40    @unittest.skipIf(sys.platform == 'win32', "can't test on Windows")
41    def test_search_cpp(self):
42        cmd = missing_compiler_executable(['preprocessor'])
43        if cmd is not None:
44            self.skipTest('The %r command is not found' % cmd)
45        pkg_dir, dist = self.create_dist()
46        cmd = config(dist)
47
48        # simple pattern searches
49        match = cmd.search_cpp(pattern='xxx', body='/* xxx */')
50        self.assertEqual(match, 0)
51
52        match = cmd.search_cpp(pattern='_configtest', body='/* xxx */')
53        self.assertEqual(match, 1)
54
55    def test_finalize_options(self):
56        # finalize_options does a bit of transformation
57        # on options
58        pkg_dir, dist = self.create_dist()
59        cmd = config(dist)
60        cmd.include_dirs = 'one%stwo' % os.pathsep
61        cmd.libraries = 'one'
62        cmd.library_dirs = 'three%sfour' % os.pathsep
63        cmd.ensure_finalized()
64
65        self.assertEqual(cmd.include_dirs, ['one', 'two'])
66        self.assertEqual(cmd.libraries, ['one'])
67        self.assertEqual(cmd.library_dirs, ['three', 'four'])
68
69    def test_clean(self):
70        # _clean removes files
71        tmp_dir = self.mkdtemp()
72        f1 = os.path.join(tmp_dir, 'one')
73        f2 = os.path.join(tmp_dir, 'two')
74
75        self.write_file(f1, 'xxx')
76        self.write_file(f2, 'xxx')
77
78        for f in (f1, f2):
79            self.assertTrue(os.path.exists(f))
80
81        pkg_dir, dist = self.create_dist()
82        cmd = config(dist)
83        cmd._clean(f1, f2)
84
85        for f in (f1, f2):
86            self.assertFalse(os.path.exists(f))
87
88def test_suite():
89    return unittest.makeSuite(ConfigTestCase)
90
91if __name__ == "__main__":
92    run_unittest(test_suite())
93