[pygobject] Add type checking to GVariant argument assignment
- From: Martin Pitt <martinpitt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pygobject] Add type checking to GVariant argument assignment
- Date: Wed, 14 Nov 2012 07:59:40 +0000 (UTC)
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]