summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorCollin Winter <collinw@gmail.com>2007-08-31 00:04:24 (GMT)
committerCollin Winter <collinw@gmail.com>2007-08-31 00:04:24 (GMT)
commit828f04ac3f0dd3b68b4dbf42a79ebb846d1de568 (patch)
tree21e25d3d969ce636c32539e4d4b5255dc4c85702 /Lib/test
parent150b7d7d02eca6970d792f3e6887f957a36b6ca2 (diff)
downloadcpython-828f04ac3f0dd3b68b4dbf42a79ebb846d1de568.zip
cpython-828f04ac3f0dd3b68b4dbf42a79ebb846d1de568.tar.gz
cpython-828f04ac3f0dd3b68b4dbf42a79ebb846d1de568.tar.bz2
Issue #1066: implement PEP 3109, 2/3 of PEP 3134.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_ast.py4
-rw-r--r--Lib/test/test_exceptions.py60
-rw-r--r--Lib/test/test_grammar.py2
-rw-r--r--Lib/test/test_opcodes.py12
-rw-r--r--Lib/test/test_raise.py417
-rw-r--r--Lib/test/test_syntax.py10
-rw-r--r--Lib/test/test_sys.py5
-rw-r--r--Lib/test/test_with.py2
-rw-r--r--Lib/test/test_zipimport.py2
9 files changed, 494 insertions, 20 deletions
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index b8c1ed9..6299123 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -37,7 +37,7 @@ exec_tests = [
# If
"if v:pass",
# Raise
- "raise Exception, 'string'",
+ "raise Exception('string')",
# TryExcept
"try:\n pass\nexcept Exception:\n pass",
# TryFinally
@@ -160,7 +160,7 @@ exec_results = [
('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [])]),
('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])]),
('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])]),
-('Module', [('Raise', (1, 0), ('Name', (1, 6), 'Exception', ('Load',)), ('Str', (1, 17), 'string'), None)]),
+('Module', [('Raise', (1, 0), ('Call', (1, 6), ('Name', (1, 6), 'Exception', ('Load',)), [('Str', (1, 16), 'string')], [], None, None), None)]),
('Module', [('TryExcept', (1, 0), [('Pass', (2, 2))], [('excepthandler', (3, 0), ('Name', (3, 7), 'Exception', ('Load',)), None, [('Pass', (4, 2))], 3, 0)], [])]),
('Module', [('TryFinally', (1, 0), [('Pass', (2, 2))], [('Pass', (4, 2))])]),
('Module', [('Assert', (1, 0), ('Name', (1, 7), 'v', ('Load',)), None)]),
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index 90f6ae7..d2a2191 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -13,7 +13,7 @@ class ExceptionTests(unittest.TestCase):
def raise_catch(self, exc, excname):
try:
- raise exc, "spam"
+ raise exc("spam")
except exc as err:
buf1 = str(err)
try:
@@ -141,7 +141,7 @@ class ExceptionTests(unittest.TestCase):
class BadException(Exception):
def __init__(self_):
- raise RuntimeError, "can't instantiate BadException"
+ raise RuntimeError("can't instantiate BadException")
class InvalidException:
pass
@@ -305,6 +305,62 @@ class ExceptionTests(unittest.TestCase):
'pickled "%r", attribute "%s' %
(e, checkArgName))
+ def testWithTraceback(self):
+ try:
+ raise IndexError(4)
+ except:
+ tb = sys.exc_info()[2]
+
+ e = BaseException().with_traceback(tb)
+ self.failUnless(isinstance(e, BaseException))
+ self.assertEqual(e.__traceback__, tb)
+
+ e = IndexError(5).with_traceback(tb)
+ self.failUnless(isinstance(e, IndexError))
+ self.assertEqual(e.__traceback__, tb)
+
+ class MyException(Exception):
+ pass
+
+ e = MyException().with_traceback(tb)
+ self.failUnless(isinstance(e, MyException))
+ self.assertEqual(e.__traceback__, tb)
+
+ def testInvalidTraceback(self):
+ try:
+ Exception().__traceback__ = 5
+ except TypeError as e:
+ self.failUnless("__traceback__ must be a traceback" in str(e))
+ else:
+ self.fail("No exception raised")
+
+ def testNoneClearsTracebackAttr(self):
+ try:
+ raise IndexError(4)
+ except:
+ tb = sys.exc_info()[2]
+
+ e = Exception()
+ e.__traceback__ = tb
+ e.__traceback__ = None
+ self.assertEqual(e.__traceback__, None)
+
+ def testChainingAttrs(self):
+ e = Exception()
+ self.assertEqual(e.__context__, None)
+ self.assertEqual(e.__cause__, None)
+
+ e = TypeError()
+ self.assertEqual(e.__context__, None)
+ self.assertEqual(e.__cause__, None)
+
+ class MyException(EnvironmentError):
+ pass
+
+ e = MyException()
+ self.assertEqual(e.__context__, None)
+ self.assertEqual(e.__cause__, None)
+
def testKeywordArgs(self):
# test that builtin exception don't take keyword args,
# but user-defined subclasses can if they want
diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py
index bfc77fe..ee3ffc7 100644
--- a/Lib/test/test_grammar.py
+++ b/Lib/test/test_grammar.py
@@ -438,7 +438,7 @@ class GrammarTests(unittest.TestCase):
def testRaise(self):
# 'raise' test [',' test]
- try: raise RuntimeError, 'just testing'
+ try: raise RuntimeError('just testing')
except RuntimeError: pass
try: raise KeyboardInterrupt
except KeyboardInterrupt: pass
diff --git a/Lib/test/test_opcodes.py b/Lib/test/test_opcodes.py
index 0ee51a8..d65c5cc 100644
--- a/Lib/test/test_opcodes.py
+++ b/Lib/test/test_opcodes.py
@@ -46,14 +46,10 @@ class OpcodeTest(unittest.TestCase):
a = AClass()
b = BClass()
- try: raise AClass, b
- except BClass as v:
- if v != b: self.fail("v!=b")
- else: self.fail("no exception")
-
- try: raise b
+ try:
+ raise b
except AClass as v:
- if v != b: self.fail("v!=b AClass")
+ self.assertEqual(v, b)
else:
self.fail("no exception")
@@ -62,7 +58,7 @@ class OpcodeTest(unittest.TestCase):
##except TypeError: pass
##else: self.fail("no exception")
- try: raise DClass, a
+ try: raise DClass(a)
except DClass as v:
self.assert_(isinstance(v, DClass))
else:
diff --git a/Lib/test/test_raise.py b/Lib/test/test_raise.py
new file mode 100644
index 0000000..ac0a32b
--- /dev/null
+++ b/Lib/test/test_raise.py
@@ -0,0 +1,417 @@
+# Copyright 2007 Google, Inc. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+"""Tests for the raise statement."""
+
+from test import test_support
+import sys
+import types
+import unittest
+
+
+def get_tb():
+ try:
+ raise OSError()
+ except:
+ return sys.exc_info()[2]
+
+
+class TestRaise(unittest.TestCase):
+ def test_invalid_reraise(self):
+ try:
+ raise
+ except RuntimeError as e:
+ self.failUnless("No active exception" in str(e))
+ else:
+ self.fail("No exception raised")
+
+ def test_reraise(self):
+ try:
+ try:
+ raise IndexError()
+ except IndexError as e:
+ exc1 = e
+ raise
+ except IndexError as exc2:
+ self.failUnless(exc1 is exc2)
+ else:
+ self.fail("No exception raised")
+
+
+class TestCause(unittest.TestCase):
+ def test_invalid_cause(self):
+ try:
+ raise IndexError from 5
+ except TypeError as e:
+ self.failUnless("exception cause" in str(e))
+ else:
+ self.fail("No exception raised")
+
+ def test_class_cause(self):
+ try:
+ raise IndexError from KeyError
+ except IndexError as e:
+ self.failUnless(isinstance(e.__cause__, KeyError))
+ else:
+ self.fail("No exception raised")
+
+ def test_instance_cause(self):
+ cause = KeyError()
+ try:
+ raise IndexError from cause
+ except IndexError as e:
+ self.failUnless(e.__cause__ is cause)
+ else:
+ self.fail("No exception raised")
+
+
+class TestTraceback(unittest.TestCase):
+ def test_sets_traceback(self):
+ try:
+ raise IndexError()
+ except IndexError as e:
+ self.failUnless(isinstance(e.__traceback__, types.TracebackType))
+ else:
+ self.fail("No exception raised")
+
+ def test_accepts_traceback(self):
+ tb = get_tb()
+ try:
+ raise IndexError().with_traceback(tb)
+ except IndexError as e:
+ self.assertNotEqual(e.__traceback__, tb)
+ self.assertEqual(e.__traceback__.tb_next, tb)
+ else:
+ self.fail("No exception raised")
+
+
+# Disabled until context is implemented
+# class TestContext(object):
+# def test_instance_context_bare_raise(self):
+# context = IndexError()
+# try:
+# try:
+# raise context
+# except:
+# raise OSError()
+# except OSError as e:
+# self.assertEqual(e.__context__, context)
+# else:
+# self.fail("No exception raised")
+#
+# def test_class_context_bare_raise(self):
+# context = IndexError
+# try:
+# try:
+# raise context
+# except:
+# raise OSError()
+# except OSError as e:
+# self.assertNotEqual(e.__context__, context)
+# self.failUnless(isinstance(e.__context__, context))
+# else:
+# self.fail("No exception raised")
+
+
+class TestRemovedFunctionality(unittest.TestCase):
+ def test_tuples(self):
+ try:
+ raise (IndexError, KeyError) # This should be a tuple!
+ except TypeError:
+ pass
+ else:
+ self.fail("No exception raised")
+
+ def test_strings(self):
+ try:
+ raise "foo"
+ except TypeError:
+ pass
+ else:
+ self.fail("No exception raised")
+
+
+def test_main():
+ test_support.run_unittest(__name__)
+
+
+if __name__ == "__main__":
+ unittest.main()
+# Copyright 2007 Google, Inc. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+"""Tests for the raise statement."""
+
+from test import test_support
+import sys
+import types
+import unittest
+
+
+def get_tb():
+ try:
+ raise OSError()
+ except:
+ return sys.exc_info()[2]
+
+
+class TestRaise(unittest.TestCase):
+ def test_invalid_reraise(self):
+ try:
+ raise
+ except RuntimeError as e:
+ self.failUnless("No active exception" in str(e))
+ else:
+ self.fail("No exception raised")
+
+ def test_reraise(self):
+ try:
+ try:
+ raise IndexError()
+ except IndexError as e:
+ exc1 = e
+ raise
+ except IndexError as exc2:
+ self.failUnless(exc1 is exc2)
+ else:
+ self.fail("No exception raised")
+
+
+class TestCause(unittest.TestCase):
+ def test_invalid_cause(self):
+ try:
+ raise IndexError from 5
+ except TypeError as e:
+ self.failUnless("exception cause" in str(e))
+ else:
+ self.fail("No exception raised")
+
+ def test_class_cause(self):
+ try:
+ raise IndexError from KeyError
+ except IndexError as e:
+ self.failUnless(isinstance(e.__cause__, KeyError))
+ else:
+ self.fail("No exception raised")
+
+ def test_instance_cause(self):
+ cause = KeyError()
+ try:
+ raise IndexError from cause
+ except IndexError as e:
+ self.failUnless(e.__cause__ is cause)
+ else:
+ self.fail("No exception raised")
+
+
+class TestTraceback(unittest.TestCase):
+ def test_sets_traceback(self):
+ try:
+ raise IndexError()
+ except IndexError as e:
+ self.failUnless(isinstance(e.__traceback__, types.TracebackType))
+ else:
+ self.fail("No exception raised")
+
+ def test_accepts_traceback(self):
+ tb = get_tb()
+ try:
+ raise IndexError().with_traceback(tb)
+ except IndexError as e:
+ self.assertNotEqual(e.__traceback__, tb)
+ self.assertEqual(e.__traceback__.tb_next, tb)
+ else:
+ self.fail("No exception raised")
+
+
+# Disabled until context is implemented
+# class TestContext(object):
+# def test_instance_context_bare_raise(self):
+# context = IndexError()
+# try:
+# try:
+# raise context
+# except:
+# raise OSError()
+# except OSError as e:
+# self.assertEqual(e.__context__, context)
+# else:
+# self.fail("No exception raised")
+#
+# def test_class_context_bare_raise(self):
+# context = IndexError
+# try:
+# try:
+# raise context
+# except:
+# raise OSError()
+# except OSError as e:
+# self.assertNotEqual(e.__context__, context)
+# self.failUnless(isinstance(e.__context__, context))
+# else:
+# self.fail("No exception raised")
+
+
+class TestRemovedFunctionality(unittest.TestCase):
+ def test_tuples(self):
+ try:
+ raise (IndexError, KeyError) # This should be a tuple!
+ except TypeError:
+ pass
+ else:
+ self.fail("No exception raised")
+
+ def test_strings(self):
+ try:
+ raise "foo"
+ except TypeError:
+ pass
+ else:
+ self.fail("No exception raised")
+
+
+def test_main():
+ test_support.run_unittest(__name__)
+
+
+if __name__ == "__main__":
+ unittest.main()
+# Copyright 2007 Google, Inc. All Rights Reserved.
+# Licensed to PSF under a Contributor Agreement.
+
+"""Tests for the raise statement."""
+
+from test import test_support
+import sys
+import types
+import unittest
+
+
+def get_tb():
+ try:
+ raise OSError()
+ except:
+ return sys.exc_info()[2]
+
+
+class TestRaise(unittest.TestCase):
+ def test_invalid_reraise(self):
+ try:
+ raise
+ except RuntimeError as e:
+ self.failUnless("No active exception" in str(e))
+ else:
+ self.fail("No exception raised")
+
+ def test_reraise(self):
+ try:
+ try:
+ raise IndexError()
+ except IndexError as e:
+ exc1 = e
+ raise
+ except IndexError as exc2:
+ self.failUnless(exc1 is exc2)
+ else:
+ self.fail("No exception raised")
+
+
+class TestCause(unittest.TestCase):
+ def test_invalid_cause(self):
+ try:
+ raise IndexError from 5
+ except TypeError as e:
+ self.failUnless("exception cause" in str(e))
+ else:
+ self.fail("No exception raised")
+
+ def test_class_cause(self):
+ try:
+ raise IndexError from KeyError
+ except IndexError as e:
+ self.failUnless(isinstance(e.__cause__, KeyError))
+ else:
+ self.fail("No exception raised")
+
+ def test_instance_cause(self):
+ cause = KeyError()
+ try:
+ raise IndexError from cause
+ except IndexError as e:
+ self.failUnless(e.__cause__ is cause)
+ else:
+ self.fail("No exception raised")
+
+
+class TestTraceback(unittest.TestCase):
+ def test_sets_traceback(self):
+ try:
+ raise IndexError()
+ except IndexError as e:
+ self.failUnless(isinstance(e.__traceback__, types.TracebackType))
+ else:
+ self.fail("No exception raised")
+
+ def test_accepts_traceback(self):
+ tb = get_tb()
+ try:
+ raise IndexError().with_traceback(tb)
+ except IndexError as e:
+ self.assertNotEqual(e.__traceback__, tb)
+ self.assertEqual(e.__traceback__.tb_next, tb)
+ else:
+ self.fail("No exception raised")
+
+
+# Disabled until context is implemented
+# class TestContext(object):
+# def test_instance_context_bare_raise(self):
+# context = IndexError()
+# try:
+# try:
+# raise context
+# except:
+# raise OSError()
+# except OSError as e:
+# self.assertEqual(e.__context__, context)
+# else:
+# self.fail("No exception raised")
+#
+# def test_class_context_bare_raise(self):
+# context = IndexError
+# try:
+# try:
+# raise context
+# except:
+# raise OSError()
+# except OSError as e:
+# self.assertNotEqual(e.__context__, context)
+# self.failUnless(isinstance(e.__context__, context))
+# else:
+# self.fail("No exception raised")
+
+
+class TestRemovedFunctionality(unittest.TestCase):
+ def test_tuples(self):
+ try:
+ raise (IndexError, KeyError) # This should be a tuple!
+ except TypeError:
+ pass
+ else:
+ self.fail("No exception raised")
+
+ def test_strings(self):
+ try:
+ raise "foo"
+ except TypeError:
+ pass
+ else:
+ self.fail("No exception raised")
+
+
+def test_main():
+ test_support.run_unittest(__name__)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index 4297d22..546f7a8 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -460,6 +460,16 @@ leading to spurious errors.
...
SyntaxError: can't assign to function call
+Make sure that the old "raise X, Y[, Z]" form is gone:
+ >>> raise X, Y
+ Traceback (most recent call last):
+ ...
+ SyntaxError: invalid syntax
+ >>> raise X, Y, Z
+ Traceback (most recent call last):
+ ...
+ SyntaxError: invalid syntax
+
"""
import re
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index d9adf02..e737047 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -119,11 +119,6 @@ class SysModuleTest(unittest.TestCase):
# test that the exit machinery handles SystemExits properly
import subprocess
- # both unnormalized...
- rc = subprocess.call([sys.executable, "-c",
- "raise SystemExit, 46"])
- self.assertEqual(rc, 46)
- # ... and normalized
rc = subprocess.call([sys.executable, "-c",
"raise SystemExit(47)"])
self.assertEqual(rc, 47)
diff --git a/Lib/test/test_with.py b/Lib/test/test_with.py
index 3f1d358..4fc8fe9 100644
--- a/Lib/test/test_with.py
+++ b/Lib/test/test_with.py
@@ -87,7 +87,7 @@ class Nested(object):
ex = sys.exc_info()
self.entered = None
if ex is not exc_info:
- raise ex[0], ex[1], ex[2]
+ raise ex[0](ex[1]).with_traceback(ex[2])
class MockNested(Nested):
diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py
index f38983f..58935b7 100644
--- a/Lib/test/test_zipimport.py
+++ b/Lib/test/test_zipimport.py
@@ -244,7 +244,7 @@ class UncompressedZipImportTestCase(ImportHooksBaseTestCase):
def get_file():
return __file__
if __loader__.get_data("some.data") != b"some data":
- raise AssertionError, "bad data"\n"""
+ raise AssertionError("bad data")\n"""
pyc = make_pyc(compile(src, "<???>", "exec"), NOW)
files = {TESTMOD + pyc_ext: (NOW, pyc),
"some.data": (NOW, "some data")}