5 from test
import support
17 def h4(*args
, **kwargs
):
18 print("h4", args
, kwargs
)
26 class TestCase(unittest
.TestCase
):
28 self
.stream
= io
.StringIO()
29 self
.save_stdout
, self
.save_stderr
= sys
.stderr
, sys
.stdout
30 sys
.stdout
= sys
.stderr
= self
.stream
34 sys
.stdout
= self
.save_stdout
35 sys
.stderr
= self
.save_stderr
39 # be sure args are handled properly
42 atexit
.register(h4
, 4, kw
="abc")
43 atexit
._run
_exitfuncs
()
45 self
.assertEqual(self
.stream
.getvalue(),
46 "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
48 def test_badargs(self
):
49 atexit
.register(lambda: 1, 0, 0, (x
for x
in (1,2)), 0, 0)
50 self
.assertRaises(TypeError, atexit
._run
_exitfuncs
)
53 # be sure handlers are executed in reverse order
57 atexit
._run
_exitfuncs
()
59 self
.assertEqual(self
.stream
.getvalue(), "h3\nh2\nh1\n")
62 # be sure raises are handled properly
63 atexit
.register(raise1
)
64 atexit
.register(raise2
)
66 self
.assertRaises(TypeError, atexit
._run
_exitfuncs
)
68 def test_stress(self
):
75 atexit
._run
_exitfuncs
()
77 self
.assertEqual(a
[0], 128)
86 atexit
._run
_exitfuncs
()
88 self
.assertEqual(a
[0], 0)
90 def test_unregister(self
):
100 atexit
.unregister(inc
)
101 atexit
._run
_exitfuncs
()
103 self
.assertEqual(a
[0], -1)
105 def test_bound_methods(self
):
107 atexit
.register(l
.append
, 5)
108 atexit
._run
_exitfuncs
()
109 self
.assertEqual(l
, [5])
111 atexit
.unregister(l
.append
)
112 atexit
._run
_exitfuncs
()
113 self
.assertEqual(l
, [5])
117 support
.run_unittest(TestCase
)
119 if __name__
== "__main__":