diff options
author | Bastian Winkler <buz@netbuz.org> | 2012-05-16 11:13:05 +0200 |
---|---|---|
committer | Martin Pitt <martinpitt@gnome.org> | 2012-06-01 10:41:45 +0200 |
commit | edc17e703e1a05e20545d3df9167ceb076450443 (patch) | |
tree | 592cfc62b2acb0b6d91fca931ed1cb489720a8db /tests/test_gobject.py | |
parent | 07a08b49aae83a297e2f91240448314e4663f724 (diff) | |
download | pygobject-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.py | 59 |
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) |