1"""Tests for scripts in the Tools directory.
2
3This file contains extremely basic regression tests for the scripts found in
4the Tools directory of a Python checkout or tarball which don't have separate
5tests of their own.
6"""
7
8import os
9import sys
10import unittest
11from test.support import import_helper
12
13from test.test_tools import scriptsdir, import_tool, skip_if_missing
14
15skip_if_missing()
16
17class TestSundryScripts(unittest.TestCase):
18    # At least make sure the rest don't have syntax errors.  When tests are
19    # added for a script it should be added to the allowlist below.
20
21    # scripts that have independent tests.
22    allowlist = ['reindent', 'pdeps', 'gprof2html', 'md5sum']
23    # scripts that can't be imported without running
24    denylist = ['make_ctype']
25    # scripts that use windows-only modules
26    windows_only = ['win_add2path']
27    # denylisted for other reasons
28    other = ['analyze_dxp', '2to3']
29
30    skiplist = denylist + allowlist + windows_only + other
31
32    def test_sundry(self):
33        old_modules = import_helper.modules_setup()
34        try:
35            for fn in os.listdir(scriptsdir):
36                if not fn.endswith('.py'):
37                    continue
38
39                name = fn[:-3]
40                if name in self.skiplist:
41                    continue
42
43                import_tool(name)
44        finally:
45            # Unload all modules loaded in this test
46            import_helper.modules_cleanup(*old_modules)
47
48    @unittest.skipIf(sys.platform != "win32", "Windows-only test")
49    def test_sundry_windows(self):
50        for name in self.windows_only:
51            import_tool(name)
52
53    def test_analyze_dxp_import(self):
54        if hasattr(sys, 'getdxp'):
55            import_tool('analyze_dxp')
56        else:
57            with self.assertRaises(RuntimeError):
58                import_tool('analyze_dxp')
59
60
61if __name__ == '__main__':
62    unittest.main()
63