17db96d56Sopenharmony_ci"""Tests for distutils.cmd."""
27db96d56Sopenharmony_ciimport unittest
37db96d56Sopenharmony_ciimport os
47db96d56Sopenharmony_cifrom test.support import captured_stdout, run_unittest
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_cifrom distutils.cmd import Command
77db96d56Sopenharmony_cifrom distutils.dist import Distribution
87db96d56Sopenharmony_cifrom distutils.errors import DistutilsOptionError
97db96d56Sopenharmony_cifrom distutils import debug
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ciclass MyCmd(Command):
127db96d56Sopenharmony_ci    def initialize_options(self):
137db96d56Sopenharmony_ci        pass
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciclass CommandTestCase(unittest.TestCase):
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci    def setUp(self):
187db96d56Sopenharmony_ci        dist = Distribution()
197db96d56Sopenharmony_ci        self.cmd = MyCmd(dist)
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci    def test_ensure_string_list(self):
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci        cmd = self.cmd
247db96d56Sopenharmony_ci        cmd.not_string_list = ['one', 2, 'three']
257db96d56Sopenharmony_ci        cmd.yes_string_list = ['one', 'two', 'three']
267db96d56Sopenharmony_ci        cmd.not_string_list2 = object()
277db96d56Sopenharmony_ci        cmd.yes_string_list2 = 'ok'
287db96d56Sopenharmony_ci        cmd.ensure_string_list('yes_string_list')
297db96d56Sopenharmony_ci        cmd.ensure_string_list('yes_string_list2')
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci        self.assertRaises(DistutilsOptionError,
327db96d56Sopenharmony_ci                          cmd.ensure_string_list, 'not_string_list')
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci        self.assertRaises(DistutilsOptionError,
357db96d56Sopenharmony_ci                          cmd.ensure_string_list, 'not_string_list2')
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci        cmd.option1 = 'ok,dok'
387db96d56Sopenharmony_ci        cmd.ensure_string_list('option1')
397db96d56Sopenharmony_ci        self.assertEqual(cmd.option1, ['ok', 'dok'])
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci        cmd.option2 = ['xxx', 'www']
427db96d56Sopenharmony_ci        cmd.ensure_string_list('option2')
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci        cmd.option3 = ['ok', 2]
457db96d56Sopenharmony_ci        self.assertRaises(DistutilsOptionError, cmd.ensure_string_list,
467db96d56Sopenharmony_ci                          'option3')
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci    def test_make_file(self):
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci        cmd = self.cmd
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci        # making sure it raises when infiles is not a string or a list/tuple
547db96d56Sopenharmony_ci        self.assertRaises(TypeError, cmd.make_file,
557db96d56Sopenharmony_ci                          infiles=1, outfile='', func='func', args=())
567db96d56Sopenharmony_ci
577db96d56Sopenharmony_ci        # making sure execute gets called properly
587db96d56Sopenharmony_ci        def _execute(func, args, exec_msg, level):
597db96d56Sopenharmony_ci            self.assertEqual(exec_msg, 'generating out from in')
607db96d56Sopenharmony_ci        cmd.force = True
617db96d56Sopenharmony_ci        cmd.execute = _execute
627db96d56Sopenharmony_ci        cmd.make_file(infiles='in', outfile='out', func='func', args=())
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ci    def test_dump_options(self):
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci        msgs = []
677db96d56Sopenharmony_ci        def _announce(msg, level):
687db96d56Sopenharmony_ci            msgs.append(msg)
697db96d56Sopenharmony_ci        cmd = self.cmd
707db96d56Sopenharmony_ci        cmd.announce = _announce
717db96d56Sopenharmony_ci        cmd.option1 = 1
727db96d56Sopenharmony_ci        cmd.option2 = 1
737db96d56Sopenharmony_ci        cmd.user_options = [('option1', '', ''), ('option2', '', '')]
747db96d56Sopenharmony_ci        cmd.dump_options()
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci        wanted = ["command options for 'MyCmd':", '  option1 = 1',
777db96d56Sopenharmony_ci                  '  option2 = 1']
787db96d56Sopenharmony_ci        self.assertEqual(msgs, wanted)
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci    def test_ensure_string(self):
817db96d56Sopenharmony_ci        cmd = self.cmd
827db96d56Sopenharmony_ci        cmd.option1 = 'ok'
837db96d56Sopenharmony_ci        cmd.ensure_string('option1')
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci        cmd.option2 = None
867db96d56Sopenharmony_ci        cmd.ensure_string('option2', 'xxx')
877db96d56Sopenharmony_ci        self.assertTrue(hasattr(cmd, 'option2'))
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci        cmd.option3 = 1
907db96d56Sopenharmony_ci        self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3')
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci    def test_ensure_filename(self):
937db96d56Sopenharmony_ci        cmd = self.cmd
947db96d56Sopenharmony_ci        cmd.option1 = __file__
957db96d56Sopenharmony_ci        cmd.ensure_filename('option1')
967db96d56Sopenharmony_ci        cmd.option2 = 'xxx'
977db96d56Sopenharmony_ci        self.assertRaises(DistutilsOptionError, cmd.ensure_filename, 'option2')
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci    def test_ensure_dirname(self):
1007db96d56Sopenharmony_ci        cmd = self.cmd
1017db96d56Sopenharmony_ci        cmd.option1 = os.path.dirname(__file__) or os.curdir
1027db96d56Sopenharmony_ci        cmd.ensure_dirname('option1')
1037db96d56Sopenharmony_ci        cmd.option2 = 'xxx'
1047db96d56Sopenharmony_ci        self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2')
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci    def test_debug_print(self):
1077db96d56Sopenharmony_ci        cmd = self.cmd
1087db96d56Sopenharmony_ci        with captured_stdout() as stdout:
1097db96d56Sopenharmony_ci            cmd.debug_print('xxx')
1107db96d56Sopenharmony_ci        stdout.seek(0)
1117db96d56Sopenharmony_ci        self.assertEqual(stdout.read(), '')
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci        debug.DEBUG = True
1147db96d56Sopenharmony_ci        try:
1157db96d56Sopenharmony_ci            with captured_stdout() as stdout:
1167db96d56Sopenharmony_ci                cmd.debug_print('xxx')
1177db96d56Sopenharmony_ci            stdout.seek(0)
1187db96d56Sopenharmony_ci            self.assertEqual(stdout.read(), 'xxx\n')
1197db96d56Sopenharmony_ci        finally:
1207db96d56Sopenharmony_ci            debug.DEBUG = False
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_cidef test_suite():
1237db96d56Sopenharmony_ci    return unittest.TestLoader().loadTestsFromTestCase(CommandTestCase)
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ciif __name__ == '__main__':
1267db96d56Sopenharmony_ci    run_unittest(test_suite())
127