summaryrefslogtreecommitdiff
path: root/tests/test_gobject.py
diff options
context:
space:
mode:
authorBastian Winkler <buz@netbuz.org>2012-05-16 11:13:05 +0200
committerMartin Pitt <martinpitt@gnome.org>2012-06-01 10:41:45 +0200
commitedc17e703e1a05e20545d3df9167ceb076450443 (patch)
tree592cfc62b2acb0b6d91fca931ed1cb489720a8db /tests/test_gobject.py
parent07a08b49aae83a297e2f91240448314e4663f724 (diff)
downloadpygobject-edc17e703e1a05e20545d3df9167ceb076450443.tar.gz
GObject.bind_property: Support transform functions
Add support for optional transformation functions to pygobject_bind_property(). It uses a custom PyGClosure to marshal the return value correctly. https://bugzilla.gnome.org/show_bug.cgi?id=676169 Signed-off-by: Martin Pitt <martinpitt@gnome.org>
Diffstat (limited to 'tests/test_gobject.py')
-rw-r--r--tests/test_gobject.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/test_gobject.py b/tests/test_gobject.py
index f1595f6f..d225d502 100644
--- a/tests/test_gobject.py
+++ b/tests/test_gobject.py
@@ -386,6 +386,65 @@ class TestPropertyBindings(unittest.TestCase):
self.assertEqual(self.source.int_prop, 2)
self.assertEqual(self.target.int_prop, 2)
+ def testTransformToOnly(self):
+ def transform_to(binding, value, user_data=None):
+ self.assertEqual(user_data, 'test-data')
+ return value * 2
+
+ binding = self.source.bind_property('int_prop', self.target, 'int_prop',
+ GObject.BindingFlags.DEFAULT,
+ transform_to, None, 'test-data')
+ binding = binding # PyFlakes
+
+ self.source.int_prop = 1
+ self.assertEqual(self.source.int_prop, 1)
+ self.assertEqual(self.target.int_prop, 2)
+
+ self.target.props.int_prop = 1
+ self.assertEqual(self.source.int_prop, 1)
+ self.assertEqual(self.target.int_prop, 1)
+
+ def testTransformFromOnly(self):
+ def transform_from(binding, value, user_data=None):
+ self.assertEqual(user_data, None)
+ return value * 2
+
+ binding = self.source.bind_property('int_prop', self.target, 'int_prop',
+ GObject.BindingFlags.BIDIRECTIONAL,
+ None, transform_from)
+ binding = binding # PyFlakes
+
+ self.source.int_prop = 1
+ self.assertEqual(self.source.int_prop, 1)
+ self.assertEqual(self.target.int_prop, 1)
+
+ self.target.props.int_prop = 1
+ self.assertEqual(self.source.int_prop, 2)
+ self.assertEqual(self.target.int_prop, 1)
+
+ def testTransformBidrectional(self):
+ def transform_to(binding, value, user_data=None):
+ self.assertEqual(user_data, 'test-data')
+ return value * 2
+
+ def transform_from(binding, value, user_data=None):
+ self.assertEqual(user_data, 'test-data')
+ return value / 2
+
+ # bidirectional bindings
+ binding = self.source.bind_property('int_prop', self.target, 'int_prop',
+ GObject.BindingFlags.BIDIRECTIONAL,
+ transform_to, transform_from, 'test-data')
+ binding = binding # PyFlakes
+
+ self.source.int_prop = 1
+ self.assertEqual(self.source.int_prop, 1)
+ self.assertEqual(self.target.int_prop, 2)
+
+ self.target.props.int_prop = 4
+ self.assertEqual(self.source.int_prop, 2)
+ self.assertEqual(self.target.int_prop, 4)
+
def testExplicitUnbindClearsConnection(self):
self.assertEqual(self.source.int_prop, 0)
self.assertEqual(self.target.int_prop, 0)