17db96d56Sopenharmony_ci# Tests that the crashers in the Lib/test/crashers directory actually
27db96d56Sopenharmony_ci# do crash the interpreter as expected
37db96d56Sopenharmony_ci#
47db96d56Sopenharmony_ci# If a crasher is fixed, it should be moved elsewhere in the test suite to
57db96d56Sopenharmony_ci# ensure it continues to work correctly.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ciimport unittest
87db96d56Sopenharmony_ciimport glob
97db96d56Sopenharmony_ciimport os.path
107db96d56Sopenharmony_ciimport test.support
117db96d56Sopenharmony_cifrom test.support.script_helper import assert_python_failure
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciCRASHER_DIR = os.path.join(os.path.dirname(__file__), "crashers")
147db96d56Sopenharmony_ciCRASHER_FILES = os.path.join(glob.escape(CRASHER_DIR), "*.py")
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ciinfinite_loops = ["infinite_loop_re.py", "nasty_eq_vs_dict.py"]
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciclass CrasherTest(unittest.TestCase):
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci    @unittest.skip("these tests are too fragile")
217db96d56Sopenharmony_ci    @test.support.cpython_only
227db96d56Sopenharmony_ci    def test_crashers_crash(self):
237db96d56Sopenharmony_ci        for fname in glob.glob(CRASHER_FILES):
247db96d56Sopenharmony_ci            if os.path.basename(fname) in infinite_loops:
257db96d56Sopenharmony_ci                continue
267db96d56Sopenharmony_ci            # Some "crashers" only trigger an exception rather than a
277db96d56Sopenharmony_ci            # segfault. Consider that an acceptable outcome.
287db96d56Sopenharmony_ci            if test.support.verbose:
297db96d56Sopenharmony_ci                print("Checking crasher:", fname)
307db96d56Sopenharmony_ci            assert_python_failure(fname)
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_cidef tearDownModule():
347db96d56Sopenharmony_ci    test.support.reap_children()
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ciif __name__ == "__main__":
377db96d56Sopenharmony_ci    unittest.main()
38