diff options
Diffstat (limited to 'test/cross-test-client.py')
-rw-r--r-- | test/cross-test-client.py | 75 |
1 files changed, 54 insertions, 21 deletions
diff --git a/test/cross-test-client.py b/test/cross-test-client.py index d3561a0..1bf21ec 100644 --- a/test/cross-test-client.py +++ b/test/cross-test-client.py @@ -35,16 +35,10 @@ from crosstest import CROSS_TEST_PATH, CROSS_TEST_BUS_NAME,\ logging.basicConfig() +logging.getLogger().setLevel(1) logger = logging.getLogger('cross-test-client') -class ListInAnyOrder(list): - def __eq__(self, other): - return sorted(other) == sorted(self) - def __ne__(self, other): - return sorted(other) != sorted(self) - - class Client(SignalTestsImpl): fail_id = 0 expected = Set() @@ -86,7 +80,7 @@ class Client(SignalTestsImpl): print "%s.Trigger pass" % INTERFACE_SIGNAL_TESTS self.quit() - def assert_method_eq(self, interface, ret, member, *args): + def assert_method_matches(self, interface, check_fn, check_arg, member, *args): if_obj = Interface(self.obj, interface) method = getattr(if_obj, member) try: @@ -94,22 +88,46 @@ class Client(SignalTestsImpl): except Exception, e: self.fail_id += 1 print "%s.%s fail %d" % (interface, member, self.fail_id) - s = ("report %d: %s.%s%r: expected %r, raised %r \"%s\"" - % (self.fail_id, interface, member, args, ret, e, e)) + s = ("report %d: %s.%s%r: raised %r \"%s\"" + % (self.fail_id, interface, member, args, e, e)) print s logger.error(s) __import__('traceback').print_exc() return - if real_ret != ret: + try: + check_fn(real_ret, check_arg) + except Exception, e: self.fail_id += 1 print "%s.%s fail %d" % (interface, member, self.fail_id) - s = ("report %d: %s.%s%r: expected %r, got %r" - % (self.fail_id, interface, member, args, ret, real_ret)) + s = ("report %d: %s.%s%r: %s" + % (self.fail_id, interface, member, args, e)) print s logger.error(s) return print "%s.%s pass" % (interface, member) + def assert_method_eq(self, interface, ret, member, *args): + def equals(real_ret, exp): + if real_ret != exp: + raise AssertionError('expected %r, got %r' % (exp, real_ret)) + self.assert_method_matches(interface, equals, ret, member, *args) + + def assert_InvertMapping_eq(self, interface, expected, member, mapping): + def check(real_ret, exp): + for key in exp: + if key not in real_ret: + raise AssertionError('missing key %r' % key) + for key in real_ret: + if key not in exp: + raise AssertionError('unexpected key %r' % key) + got = list(real_ret[key]) + wanted = list(exp[key]) + got.sort() + wanted.sort() + if got != wanted: + raise AssertionError('expected %r => %r, got %r' + % (key, wanted, got)) + self.assert_method_matches(interface, check, expected, member, mapping) def triggered_cb(self, param, sender_path): logger.info("method/signal: Triggered(%r) by %r", @@ -137,7 +155,7 @@ class Client(SignalTestsImpl): # Callback tests logger.info("signal/callback: Emitting signal to trigger callback") self.expected.add('%s.Trigger' % INTERFACE_SIGNAL_TESTS) - self.Trigger(42, 23) + self.Trigger(UInt16(42), 23.0) logger.info("signal/callback: Emitting signal returned") def run_client(self): @@ -158,7 +176,7 @@ class Client(SignalTestsImpl): path_keyword='sender_path') logger.info("method/signal: Triggering signal") self.expected.add('%s.Trigger' % INTERFACE_TESTS) - Interface(obj, INTERFACE_TESTS).Trigger('/Where/Ever', 42, reply_handler=self.trigger_returned_cb, error_handler=self.trigger_error_handler) + Interface(obj, INTERFACE_TESTS).Trigger(u'/Where/Ever', dbus.UInt64(42), reply_handler=self.trigger_returned_cb, error_handler=self.trigger_error_handler) def trigger_error_handler(self, e): logger.error("method/signal: %s %s", e.__class__, e) @@ -264,19 +282,34 @@ class Client(SignalTestsImpl): self.assert_method_eq(INTERFACE_TESTS, 6, 'Sum', [Int32(1),Int32(2),Int32(3)]) if have_signatures: self.assert_method_eq(INTERFACE_TESTS, 6, 'Sum', [1,2,3]) - self.assert_method_eq(INTERFACE_TESTS, {'fps': ListInAnyOrder(['unreal', 'quake']), 'rts': ['warcraft']}, 'InvertMapping', {'unreal': 'fps', 'quake': 'fps', 'warcraft': 'rts'}) + + self.assert_InvertMapping_eq(INTERFACE_TESTS, {'fps': ['unreal', 'quake'], 'rts': ['warcraft']}, 'InvertMapping', {'unreal': 'fps', 'quake': 'fps', 'warcraft': 'rts'}) self.assert_method_eq(INTERFACE_TESTS, ('a', 1, 2), 'DeStruct', ('a', UInt32(1), Int16(2))) - self.assert_method_eq(INTERFACE_TESTS, [Variant('x')], 'Primitize', [Variant(Variant(['x']))]) - self.assert_method_eq(INTERFACE_TESTS, [Variant('x'), Variant(Byte(1)), Variant(Byte(2))], 'Primitize', [Variant([Variant(['x']), Array([Byte(1), Byte(2)])])]) - self.assert_method_eq(INTERFACE_TESTS, False, 'Invert', 42) - self.assert_method_eq(INTERFACE_TESTS, True, 'Invert', 0) + self.assert_method_eq(INTERFACE_TESTS, [Variant('x')], 'Primitize', [Variant('x')]) + if 0: self.assert_method_eq(INTERFACE_TESTS, + [Variant('x'), Variant(Byte(1)), Variant(Byte(2))], + 'Primitize', + [Variant([Variant(['x']), + Variant(Array([Byte(1), + Byte(2)]))])]) + if 0: + self.assert_method_eq(INTERFACE_TESTS, [Variant('x')], 'Primitize', [Variant(Variant(['x']))]) + self.assert_method_eq(INTERFACE_TESTS, [Variant('x'), Variant(Byte(1)), Variant(Byte(2))], 'Primitize', [Variant([Variant(['x']), Array([Byte(1), Byte(2)])])]) + self.assert_method_eq(INTERFACE_TESTS, False, 'Invert', True) + self.assert_method_eq(INTERFACE_TESTS, True, 'Invert', False) + if have_signatures: + self.assert_method_eq(INTERFACE_TESTS, False, 'Invert', 42) + self.assert_method_eq(INTERFACE_TESTS, True, 'Invert', 0) if __name__ == '__main__': # FIXME: should be possible to export objects without a bus name bus_name = BusName('com.example.Argh') - client = Client(bus_name, '/Client') + if 0: + client = Client(bus_name, '/Client') + else: + client = Client(bus_name, '/Test') gobject.idle_add(client.run_client) loop = gobject.MainLoop() |