[pygobject] Pass return values through the GObject.Signal.emit wrapper



commit 78f72654f5cb6c06e76ed9a532fc1ee328b60e50
Author: Simon Feltman <sfeltman src gnome org>
Date:   Mon Aug 5 14:12:24 2013 -0700

    Pass return values through the GObject.Signal.emit wrapper
    
    Return the result of GObject.emit from the Signal decorators wrapping.
    Update unittest for decorated return type to use skipUnless for Python 3.
    Add test for Signal decorator return type.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=705530

 gi/_gobject/signalhelper.py |    2 +-
 tests/test_signal.py        |   37 +++++++++++++++++++++----------------
 2 files changed, 22 insertions(+), 17 deletions(-)
---
diff --git a/gi/_gobject/signalhelper.py b/gi/_gobject/signalhelper.py
index 554b724..703b78c 100644
--- a/gi/_gobject/signalhelper.py
+++ b/gi/_gobject/signalhelper.py
@@ -102,7 +102,7 @@ class Signal(str):
         def emit(self, *args, **kargs):
             """Same as GObject.GObject.emit except there is no need to specify
             the signal name."""
-            self.gobj.emit(str(self), *args, **kargs)
+            return self.gobj.emit(str(self), *args, **kargs)
 
     def __new__(cls, name='', *args, **kargs):
         if callable(name):
diff --git a/tests/test_signal.py b/tests/test_signal.py
index 80f2986..c19fbe5 100644
--- a/tests/test_signal.py
+++ b/tests/test_signal.py
@@ -900,28 +900,33 @@ class AnnotatedSignalClass(GObject.GObject):
 """
 
 
+ unittest skipUnless(sys.version_info >= (3, 0),
+                     'Argument annotations require Python 3')
 class TestPython3Signals(unittest.TestCase):
     AnnotatedClass = None
 
     def setUp(self):
-        if sys.version_info >= (3, 0):
-            exec(annotated_class_code, globals(), globals())
-            self.assertTrue('AnnotatedSignalClass' in globals())
-            self.AnnotatedClass = globals()['AnnotatedSignalClass']
+        exec(annotated_class_code, globals(), globals())
+        self.assertTrue('AnnotatedSignalClass' in globals())
+        self.AnnotatedClass = globals()['AnnotatedSignalClass']
 
     def test_annotations(self):
-        if self.AnnotatedClass:
-            self.assertEqual(signalhelper.get_signal_annotations(self.AnnotatedClass.sig1.func),
-                             (None, (int, float)))
-            self.assertEqual(signalhelper.get_signal_annotations(self.AnnotatedClass.sig2_with_return.func),
-                             (str, (int, float)))
-
-            self.assertEqual(self.AnnotatedClass.sig2_with_return.get_signal_args(),
-                             (GObject.SignalFlags.RUN_LAST, str, (int, float)))
-            self.assertEqual(self.AnnotatedClass.sig2_with_return.arg_types,
-                             (int, float))
-            self.assertEqual(self.AnnotatedClass.sig2_with_return.return_type,
-                             str)
+        self.assertEqual(signalhelper.get_signal_annotations(self.AnnotatedClass.sig1.func),
+                         (None, (int, float)))
+        self.assertEqual(signalhelper.get_signal_annotations(self.AnnotatedClass.sig2_with_return.func),
+                         (str, (int, float)))
+
+        self.assertEqual(self.AnnotatedClass.sig2_with_return.get_signal_args(),
+                         (GObject.SignalFlags.RUN_LAST, str, (int, float)))
+        self.assertEqual(self.AnnotatedClass.sig2_with_return.arg_types,
+                         (int, float))
+        self.assertEqual(self.AnnotatedClass.sig2_with_return.return_type,
+                         str)
+
+    def test_emit_return(self):
+        obj = self.AnnotatedClass()
+        self.assertEqual(obj.sig2_with_return.emit(1, 2.0),
+                         'test')
 
 
 class TestSignalModuleLevelFunctions(unittest.TestCase):


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]