import weakref
from copy import deepcopy
+from contextlib import redirect_stdout
from test import support
try:
raise AttributeError
return object.__setattr__(self, name, value)
C.__setattr__ = mysetattr
- try:
+ with self.assertRaises(AttributeError):
a.spam = "not spam"
- except AttributeError:
- pass
- else:
- self.fail("expected AttributeError")
+
self.assertEqual(a.spam, "spam")
class D(C):
pass
else:
self.fail("no TypeError from dict(%r)" % badarg)
- try:
+ with self.assertRaises(TypeError):
dict({}, {})
- except TypeError:
- pass
- else:
- self.fail("no TypeError from dict({}, {})")
class Mapping:
# Lacks a .keys() method; will be added later.
pass
A.__call__ = A()
- try:
+ with self.assertRaises(RecursionError):
A()()
- except RecursionError:
- pass
- else:
- self.fail("Recursion limit should have been reached for __call__()")
def test_delete_hook(self):
# Testing __del__ hook...
def test_file_fault(self):
# Testing sys.stdout is changed in getattr...
- test_stdout = sys.stdout
class StdoutGuard:
def __getattr__(self, attr):
sys.stdout = sys.__stdout__
- raise RuntimeError("Premature access to sys.stdout.%s" % attr)
- sys.stdout = StdoutGuard()
- try:
- print("Oops!")
- except RuntimeError:
- pass
- else:
- self.fail("Didn't raise RuntimeError")
- finally:
- sys.stdout = test_stdout
+ raise RuntimeError(f"Premature access to sys.stdout.{attr}")
+
+ with redirect_stdout(StdoutGuard()):
+ with self.assertRaises(RuntimeError):
+ print("Oops!")
def test_vicious_descriptor_nonsense(self):
# Testing vicious_descriptor_nonsense...