17db96d56Sopenharmony_ci"""Tests for scripts in the Tools directory.
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciThis file contains extremely basic regression tests for the scripts found in
47db96d56Sopenharmony_cithe Tools directory of a Python checkout or tarball which don't have separate
57db96d56Sopenharmony_citests of their own.
67db96d56Sopenharmony_ci"""
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ciimport os
97db96d56Sopenharmony_ciimport sys
107db96d56Sopenharmony_ciimport unittest
117db96d56Sopenharmony_cifrom test.support import import_helper
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_cifrom test.test_tools import scriptsdir, import_tool, skip_if_missing
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciskip_if_missing()
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciclass TestSundryScripts(unittest.TestCase):
187db96d56Sopenharmony_ci    # At least make sure the rest don't have syntax errors.  When tests are
197db96d56Sopenharmony_ci    # added for a script it should be added to the allowlist below.
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci    # scripts that have independent tests.
227db96d56Sopenharmony_ci    allowlist = ['reindent', 'pdeps', 'gprof2html', 'md5sum']
237db96d56Sopenharmony_ci    # scripts that can't be imported without running
247db96d56Sopenharmony_ci    denylist = ['make_ctype']
257db96d56Sopenharmony_ci    # scripts that use windows-only modules
267db96d56Sopenharmony_ci    windows_only = ['win_add2path']
277db96d56Sopenharmony_ci    # denylisted for other reasons
287db96d56Sopenharmony_ci    other = ['analyze_dxp', '2to3']
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci    skiplist = denylist + allowlist + windows_only + other
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci    def test_sundry(self):
337db96d56Sopenharmony_ci        old_modules = import_helper.modules_setup()
347db96d56Sopenharmony_ci        try:
357db96d56Sopenharmony_ci            for fn in os.listdir(scriptsdir):
367db96d56Sopenharmony_ci                if not fn.endswith('.py'):
377db96d56Sopenharmony_ci                    continue
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci                name = fn[:-3]
407db96d56Sopenharmony_ci                if name in self.skiplist:
417db96d56Sopenharmony_ci                    continue
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci                import_tool(name)
447db96d56Sopenharmony_ci        finally:
457db96d56Sopenharmony_ci            # Unload all modules loaded in this test
467db96d56Sopenharmony_ci            import_helper.modules_cleanup(*old_modules)
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    @unittest.skipIf(sys.platform != "win32", "Windows-only test")
497db96d56Sopenharmony_ci    def test_sundry_windows(self):
507db96d56Sopenharmony_ci        for name in self.windows_only:
517db96d56Sopenharmony_ci            import_tool(name)
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci    def test_analyze_dxp_import(self):
547db96d56Sopenharmony_ci        if hasattr(sys, 'getdxp'):
557db96d56Sopenharmony_ci            import_tool('analyze_dxp')
567db96d56Sopenharmony_ci        else:
577db96d56Sopenharmony_ci            with self.assertRaises(RuntimeError):
587db96d56Sopenharmony_ci                import_tool('analyze_dxp')
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ciif __name__ == '__main__':
627db96d56Sopenharmony_ci    unittest.main()
63