summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2011-03-16 19:52:14 -0400
committerNick Coghlan <ncoghlan@gmail.com>2011-03-16 19:52:14 -0400
commitc95ec3d560dd21e678958016aa46313f619b83e7 (patch)
treeea840e87f5324667b97552f3bc62b2c78b466de0
parentcfec350e63ee601ce5f777d0780355b06410ccf9 (diff)
downloadcpython-git-c95ec3d560dd21e678958016aa46313f619b83e7.tar.gz
Exercise crashers to ensure they are still covering known error cases
-rw-r--r--Lib/test/crashers/README4
-rw-r--r--Lib/test/test_crashers.py35
2 files changed, 39 insertions, 0 deletions
diff --git a/Lib/test/crashers/README b/Lib/test/crashers/README
index 2a73e1bbd9..0259a0688c 100644
--- a/Lib/test/crashers/README
+++ b/Lib/test/crashers/README
@@ -14,3 +14,7 @@ note if the cause is system or environment dependent and what the variables are.
Once the crash is fixed, the test case should be moved into an appropriate test
(even if it was originally from the test suite). This ensures the regression
doesn't happen again. And if it does, it should be easier to track down.
+
+Also see Lib/test_crashers.py which exercises the crashers in this directory.
+In particular, make sure to add any new infinite loop crashers to the black
+list so it doesn't try to run them.
diff --git a/Lib/test/test_crashers.py b/Lib/test/test_crashers.py
new file mode 100644
index 0000000000..ee612c2bc9
--- /dev/null
+++ b/Lib/test/test_crashers.py
@@ -0,0 +1,35 @@
+# Tests that the crashers in the Lib/test/crashers directory actually
+# do crash the interpreter as expected
+#
+# If a crasher is fixed, it should be moved elsewhere in the test suite to
+# ensure it continues to work correctly.
+
+import unittest
+import glob
+import os.path
+import test.support
+from test.script_helper import assert_python_failure
+
+CRASHER_DIR = os.path.join(os.path.dirname(__file__), "crashers")
+CRASHER_FILES = os.path.join(CRASHER_DIR, "*.py")
+
+infinite_loops = ["infinite_loop_re.py", "nasty_eq_vs_dict.py"]
+
+class CrasherTest(unittest.TestCase):
+
+ @test.support.cpython_only
+ def test_crashers_crash(self):
+ for fname in glob.glob(CRASHER_FILES):
+ if os.path.basename(fname) in infinite_loops:
+ continue
+ # Some "crashers" only trigger an exception rather than a
+ # segfault. Consider that an acceptable outcome.
+ assert_python_failure(fname)
+
+
+def test_main():
+ test.support.run_unittest(CrasherTest)
+ test.support.reap_children()
+
+if __name__ == "__main__":
+ test_main()