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