14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm"""Tests for distutils.command.config."""
24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest
34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os
44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport sys
54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import run_unittest
64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.command.config import dump_file, config
84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils.tests import support
94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom distutils import log
104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass ConfigTestCase(support.LoggingSilencer,
124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                     support.TempdirManager,
134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm                     unittest.TestCase):
144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def _info(self, msg, *args):
164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for line in msg.splitlines():
174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self._logs.append(line)
184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def setUp(self):
204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        super(ConfigTestCase, self).setUp()
214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self._logs = []
224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.old_log = log.info
234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        log.info = self._info
244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def tearDown(self):
264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        log.info = self.old_log
274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        super(ConfigTestCase, self).tearDown()
284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_dump_file(self):
304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        this_file = os.path.splitext(__file__)[0] + '.py'
314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        f = open(this_file)
324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            numlines = len(f.readlines())
344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        finally:
354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            f.close()
364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        dump_file(this_file, 'I am the header')
384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(len(self._logs), numlines+1)
394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_search_cpp(self):
414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        if sys.platform == 'win32':
424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            return
434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        pkg_dir, dist = self.create_dist()
444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd = config(dist)
454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # simple pattern searches
474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        match = cmd.search_cpp(pattern='xxx', body='// xxx')
484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(match, 0)
494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        match = cmd.search_cpp(pattern='_configtest', body='// xxx')
514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(match, 1)
524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_finalize_options(self):
544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # finalize_options does a bit of transformation
554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # on options
564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        pkg_dir, dist = self.create_dist()
574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd = config(dist)
584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd.include_dirs = 'one%stwo' % os.pathsep
594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd.libraries = 'one'
604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd.library_dirs = 'three%sfour' % os.pathsep
614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd.ensure_finalized()
624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(cmd.include_dirs, ['one', 'two'])
644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(cmd.libraries, ['one'])
654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(cmd.library_dirs, ['three', 'four'])
664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_clean(self):
684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        # _clean removes files
694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        tmp_dir = self.mkdtemp()
704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        f1 = os.path.join(tmp_dir, 'one')
714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        f2 = os.path.join(tmp_dir, 'two')
724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.write_file(f1, 'xxx')
744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.write_file(f2, 'xxx')
754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for f in (f1, f2):
774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertTrue(os.path.exists(f))
784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        pkg_dir, dist = self.create_dist()
804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd = config(dist)
814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        cmd._clean(f1, f2)
824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        for f in (f1, f2):
844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            self.assertTrue(not os.path.exists(f))
854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_suite():
874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    return unittest.makeSuite(ConfigTestCase)
884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == "__main__":
904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    run_unittest(test_suite())
91