summaryrefslogtreecommitdiff
path: root/tests/test_mainloop.py
diff options
context:
space:
mode:
authorHasan Wan <hasan.wan@intel.com>2012-05-25 16:47:13 +0800
committerHasan Wan <hasan.wan@intel.com>2012-05-28 16:06:22 +0800
commit1ddee039e66b9c1feb2129a1904e60760e0e8fc3 (patch)
tree84a3b12d0f839c6a2ef702eb02f3288c91cf5902 /tests/test_mainloop.py
parentf7d643cbb2184346b6f8d26091eb7eb38c6bbfe1 (diff)
downloadpygobject2-1ddee039e66b9c1feb2129a1904e60760e0e8fc3.tar.gz
pygobject2-1ddee039e66b9c1feb2129a1904e60760e0e8fc3.tar.bz2
pygobject2-1ddee039e66b9c1feb2129a1904e60760e0e8fc3.zip
Updated with Tizen:Base source codes
Diffstat (limited to 'tests/test_mainloop.py')
-rw-r--r--tests/test_mainloop.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/test_mainloop.py b/tests/test_mainloop.py
new file mode 100644
index 0000000..95e5f78
--- /dev/null
+++ b/tests/test_mainloop.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+
+import exceptions
+import os
+import sys
+import select
+import unittest
+
+from common import glib
+
+class TestMainLoop(unittest.TestCase):
+ def testExceptionHandling(self):
+ pipe_r, pipe_w = os.pipe()
+
+ pid = os.fork()
+ if pid == 0:
+ os.close(pipe_w)
+ select.select([pipe_r], [], [])
+ os.close(pipe_r)
+ os._exit(1)
+
+ def child_died(pid, status, loop):
+ loop.quit()
+ raise Exception("deadbabe")
+
+ loop = glib.MainLoop()
+ glib.child_watch_add(pid, child_died, loop)
+
+ os.close(pipe_r)
+ os.write(pipe_w, "Y")
+ os.close(pipe_w)
+
+ def excepthook(type, value, traceback):
+ assert type is exceptions.Exception
+ assert value.args[0] == "deadbabe"
+ sys.excepthook = excepthook
+
+ got_exception = False
+ try:
+ loop.run()
+ except:
+ got_exception = True
+
+ #
+ # The exception should be handled (by printing it)
+ # immediately on return from child_died() rather
+ # than here. See bug #303573
+ #
+ sys.excepthook = sys.__excepthook__
+ assert not got_exception
+
+if __name__ == '__main__':
+ unittest.main()