from test
import test_support
class TestCase(unittest
.TestCase
):
# be sure args are handled properly
sys
.stdout
= sys
.stderr
= s
save_handlers
= atexit
._exithandlers
atexit
._exithandlers
= []
atexit
.register(self
.h4
, 4, kw
="abc")
sys
.stdout
= sys
.__stdout
__
sys
.stderr
= sys
.__stderr
__
atexit
._exithandlers
= save_handlers
self
.assertEqual(s
.getvalue(), "h4 (4,) {'kw': 'abc'}\nh4 () {}\nh1\n")
# be sure handlers are executed in reverse order
sys
.stdout
= sys
.stderr
= s
save_handlers
= atexit
._exithandlers
atexit
._exithandlers
= []
sys
.stdout
= sys
.__stdout
__
sys
.stderr
= sys
.__stderr
__
atexit
._exithandlers
= save_handlers
self
.assertEqual(s
.getvalue(), "h3\nh2\nh1\n")
def test_sys_override(self
):
# be sure a preset sys.exitfunc is handled properly
sys
.stdout
= sys
.stderr
= s
save_handlers
= atexit
._exithandlers
atexit
._exithandlers
= []
sys
.stdout
= sys
.__stdout
__
sys
.stderr
= sys
.__stderr
__
atexit
._exithandlers
= save_handlers
self
.assertEqual(s
.getvalue(), "h2\nh1\n")
# be sure raises are handled properly
sys
.stdout
= sys
.stderr
= s
save_handlers
= atexit
._exithandlers
atexit
._exithandlers
= []
atexit
.register(self
.raise1
)
atexit
.register(self
.raise2
)
self
.assertRaises(TypeError, atexit
._run
_exitfuncs
)
sys
.stdout
= sys
.__stdout
__
sys
.stderr
= sys
.__stderr
__
atexit
._exithandlers
= save_handlers
def h4(self
, *args
, **kwargs
):
test_support
.run_unittest(TestCase
)
if __name__
== "__main__":