[pygobject] Add test cases for GValue signal arguments



commit 4559247553b792db956f69c9674c12344d719c82
Author: Martin Pitt <martinpitt gnome org>
Date:   Tue Sep 11 09:43:14 2012 +0200

    Add test cases for GValue signal arguments
    
    These cover various types, (u)int(64) and string.
    
    Keep the test case for implicit int64 GValues disabled, as this currently does
    not work and it is not clear whether it should:
    https://bugzilla.gnome.org/show_bug.cgi?id=683775

 tests/test_signal.py     |   41 +++++++++++++++++++++++++++++++++++++++++
 tests/testhelpermodule.c |   17 +++++++++++++++++
 2 files changed, 58 insertions(+), 0 deletions(-)
---
diff --git a/tests/test_signal.py b/tests/test_signal.py
index 510d8af..bffb43b 100644
--- a/tests/test_signal.py
+++ b/tests/test_signal.py
@@ -362,6 +362,7 @@ class CM(GObject.GObject):
         test_string=(l, str, (str, )),
         test_object=(l, object, (object, )),
         test_paramspec=(l, GObject.ParamSpec, ()),
+        test_gvalue=(l, GObject.Value, (GObject.Value, )),
         test_gvalue_ret=(l, GObject.Value, (GObject.TYPE_GTYPE, )),
     )
 
@@ -429,6 +430,46 @@ class _TestCMarshaller:
         self.obj.set_property("testprop", 42)
         self.assertTrue(self.notify_called)
 
+    def testTestValue(self):
+        # implicit int
+        rv = self.obj.emit("test-gvalue", 42)
+        self.assertEqual(rv, 42)
+
+        # explicit float
+        v = GObject.Value()
+        v.init(gfloat)
+        v.set_float(1.234)
+        rv = self.obj.emit("test-gvalue", v)
+        self.assertAlmostEqual(rv, 1.234, 4)
+
+        # implicit float
+        rv = self.obj.emit("test-gvalue", 1.234)
+        self.assertAlmostEqual(rv, 1.234, 4)
+
+        # explicit int64
+        v = GObject.Value()
+        v.init(gint64)
+        v.set_int64(GObject.G_MAXINT64)
+        rv = self.obj.emit("test-gvalue", v)
+        self.assertEqual(rv, GObject.G_MAXINT64)
+
+        # implicit int64
+        # does not work, see https://bugzilla.gnome.org/show_bug.cgi?id=683775
+        #rv = self.obj.emit("test-gvalue", GObject.G_MAXINT64)
+        #self.assertEqual(rv, GObject.G_MAXINT64)
+
+        # explicit uint64
+        v = GObject.Value()
+        v.init(GObject.TYPE_UINT64)
+        v.set_uint64(GObject.G_MAXUINT64)
+        rv = self.obj.emit("test-gvalue", v)
+        self.assertEqual(rv, GObject.G_MAXUINT64)
+
+        # implicit uint64
+        # does not work, see https://bugzilla.gnome.org/show_bug.cgi?id=683775
+        #rv = self.obj.emit("test-gvalue", GObject.G_MAXUINT64)
+        #self.assertEqual(rv, GObject.G_MAXUINT64)
+
     def testTestReturnValue(self):
         self.assertEqual(self.obj.emit("test-gvalue-ret", GObject.TYPE_INT),
                          GObject.G_MAXINT)
diff --git a/tests/testhelpermodule.c b/tests/testhelpermodule.c
index fa95752..608b8b1 100644
--- a/tests/testhelpermodule.c
+++ b/tests/testhelpermodule.c
@@ -358,6 +358,19 @@ test_paramspec_callback (GObject *object)
 }
 
 static GValue *
+test_gvalue_callback (GObject *object, const GValue *v)
+{
+  GValue *ret = g_malloc0 (sizeof (GValue));
+
+  g_return_val_if_fail (G_IS_OBJECT (object), NULL);
+  g_return_val_if_fail (G_IS_VALUE (v), NULL);
+
+  g_value_init (ret, G_VALUE_TYPE (v));
+  g_value_copy (v, ret);
+  return ret;
+}
+
+static GValue *
 test_gvalue_ret_callback (GObject *object, GType type)
 {
   GValue *ret = g_malloc0 (sizeof (GValue));
@@ -440,6 +453,10 @@ connectcallbacks (GObject *object)
                     G_CALLBACK (test_paramspec_callback), 
                     NULL);
   g_signal_connect (G_OBJECT (object),
+                    "test_gvalue",
+                    G_CALLBACK (test_gvalue_callback), 
+                    NULL);
+  g_signal_connect (G_OBJECT (object),
                     "test_gvalue_ret",
                     G_CALLBACK (test_gvalue_ret_callback), 
                     NULL);



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