[pygobject] Add type checking to GVariant argument assignment



commit 84db7109dfbaf443758a5a4871ee385686d2703d
Author: Martin Pitt <martinpitt gnome org>
Date:   Wed Nov 14 08:42:53 2012 +0100

    Add type checking to GVariant argument assignment

 gi/pygi-argument.c |    7 ++++++-
 tests/test_gi.py   |    5 ++---
 2 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/gi/pygi-argument.c b/gi/pygi-argument.c
index 8c6f75d..61453e0 100644
--- a/gi/pygi-argument.c
+++ b/gi/pygi-argument.c
@@ -1293,7 +1293,12 @@ array_success:
                     } else if (g_type_is_a (type, G_TYPE_POINTER) || 
                                g_type_is_a (type, G_TYPE_VARIANT) || 
                                type == G_TYPE_NONE) {
-			g_warn_if_fail (g_type_is_a (type, G_TYPE_VARIANT) || !g_type_info_is_pointer (type_info) || transfer == GI_TRANSFER_NOTHING);
+                        g_warn_if_fail (g_type_is_a (type, G_TYPE_VARIANT) || !g_type_info_is_pointer (type_info) || transfer == GI_TRANSFER_NOTHING);
+
+                        if (g_type_is_a (type, G_TYPE_VARIANT) && pyg_type_from_object (object) != G_TYPE_VARIANT) {
+                            PyErr_SetString (PyExc_TypeError, "expected GLib.Variant");
+                            break;
+                        }
                         arg.v_pointer = pyg_pointer_get (object, void);
                     } else {
                         PyErr_Format (PyExc_NotImplementedError, "structure type '%s' is not supported yet", g_type_name (type));
diff --git a/tests/test_gi.py b/tests/test_gi.py
index 155f5d8..612424b 100644
--- a/tests/test_gi.py
+++ b/tests/test_gi.py
@@ -2601,9 +2601,8 @@ class TestPropertiesObject(unittest.TestCase):
         self.assertEqual(obj.props.some_variant.get_type_string(), 'b')
         self.assertEqual(obj.props.some_variant.get_boolean(), True)
 
-        # FIXME:
-        #self.assertRaises(TypeError, setattr, self.obj.props, 'some_variant', 'foo')
-        #self.assertRaises(TypeError, setattr, self.obj.props, 'some_variant', None)
+        self.assertRaises(TypeError, setattr, self.obj.props, 'some_variant', 'foo')
+        self.assertRaises(TypeError, setattr, self.obj.props, 'some_variant', 23)
 
         self.assertEqual(obj.props.some_variant.get_type_string(), 'b')
         self.assertEqual(obj.props.some_variant.get_boolean(), True)



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