diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-06-18 16:31:20 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2007-06-18 16:31:20 +0100 |
commit | 543ebc088ffbef9a52de333d99361b47301571b3 (patch) | |
tree | 8c7351cb6aa8ef15e2cfff8f246e799a7d65211d /test | |
parent | b62c9694c5f3e39ef00c08fee5754a91515bca54 (diff) |
Implement fallback objects.
In the process, simplify the signal decorator a bit - don't allow the signal
to be emitted from a subset of interfaces (removing connection_keyword),
deprecate path_keyword, disallow path_keyword on objects that support multiple
object paths, and add rel_path_keyword. This is an API removal since previous
patches, but is compatible with the last release.
Diffstat (limited to 'test')
-rwxr-xr-x | test/run-test.sh | 3 | ||||
-rwxr-xr-x | test/test-client.py | 22 | ||||
-rwxr-xr-x | test/test-service.py | 39 | ||||
-rw-r--r-- | test/test-signals.py | 28 |
4 files changed, 85 insertions, 7 deletions
diff --git a/test/run-test.sh b/test/run-test.sh index 13992c9..94da991 100755 --- a/test/run-test.sh +++ b/test/run-test.sh @@ -37,6 +37,8 @@ if test -z "$DBUS_TEST_PYTHON_IN_RUN_TEST"; then exec "$DBUS_TOP_SRCDIR"/test/run-with-tmp-session-bus.sh $SCRIPTNAME fi +dbus-monitor > "$DBUS_TOP_BUILDDIR"/test/monitor.log & + echo "running test-standalone.py" $PYTHON "$DBUS_TOP_SRCDIR"/test/test-standalone.py || die "test-standalone.py failed" @@ -95,4 +97,5 @@ $PYTHON "$DBUS_TOP_SRCDIR"/test/test-p2p.py || die "... failed" rm -f "$DBUS_TOP_BUILDDIR"/test/test-service.log rm -f "$DBUS_TOP_BUILDDIR"/test/cross-client.log rm -f "$DBUS_TOP_BUILDDIR"/test/cross-server.log +rm -f "$DBUS_TOP_BUILDDIR"/test/monitor.log exit 0 diff --git a/test/test-client.py b/test/test-client.py index 7616d3c..f90dcce 100755 --- a/test/test-client.py +++ b/test/test-client.py @@ -93,13 +93,13 @@ class TestDBusBindings(unittest.TestCase): def testInterfaceKeyword(self): #test dbus_interface parameter - print self.remote_object.Echo("dbus_interface on Proxy test Passed", dbus_interface = "org.freedesktop.DBus.TestSuiteInterface") - print self.iface.Echo("dbus_interface on Interface test Passed", dbus_interface = "org.freedesktop.DBus.TestSuiteInterface") + print self.remote_object.Echo("dbus_interface on Proxy test Passed", dbus_interface = IFACE) + print self.iface.Echo("dbus_interface on Interface test Passed", dbus_interface = IFACE) self.assert_(True) def testGetDBusMethod(self): self.assertEquals(self.iface.get_dbus_method('AcceptListOfByte')('\1\2\3'), [1,2,3]) - self.assertEquals(self.remote_object.get_dbus_method('AcceptListOfByte', dbus_interface='org.freedesktop.DBus.TestSuiteInterface')('\1\2\3'), [1,2,3]) + self.assertEquals(self.remote_object.get_dbus_method('AcceptListOfByte', dbus_interface=IFACE)('\1\2\3'), [1,2,3]) def testCallingConventionOptions(self): self.assertEquals(self.iface.AcceptListOfByte('\1\2\3'), [1,2,3]) @@ -408,6 +408,22 @@ class TestDBusBindings(unittest.TestCase): self.assert_(iface.RemoveSelf()) self.assert_(not self.iface.HasRemovableObject()) + def testFallbackObjectTrivial(self): + obj = self.bus.get_object(NAME, OBJECT + '/Fallback') + iface = dbus.Interface(obj, IFACE) + path, unique_name = iface.TestPathAndConnKeywords() + self.assertEquals(path, OBJECT + '/Fallback') + #self.assertEquals(rel, '/Badger/Mushroom') + self.assertEquals(unique_name, obj.bus_name) + + def testFallbackObject(self): + obj = self.bus.get_object(NAME, OBJECT + '/Fallback/Badger/Mushroom') + iface = dbus.Interface(obj, IFACE) + path, unique_name = iface.TestPathAndConnKeywords() + self.assertEquals(path, OBJECT + '/Fallback/Badger/Mushroom') + #self.assertEquals(rel, '/Badger/Mushroom') + self.assertEquals(unique_name, obj.bus_name) + """ Remove this for now class TestDBusPythonToGLibBindings(unittest.TestCase): def setUp(self): diff --git a/test/test-service.py b/test/test-service.py index 4372392..dcd511e 100755 --- a/test/test-service.py +++ b/test/test-service.py @@ -72,6 +72,44 @@ class TestInterface(dbus.service.Interface): def CheckInheritance(self): return False +class Fallback(dbus.service.FallbackObject): + def __init__(self, bus_name, object_path=OBJECT + '/Fallback'): + super(Fallback, self).__init__(bus_name, object_path) + + @dbus.service.method(IFACE, in_signature='', out_signature='os', + path_keyword='path', # rel_path_keyword='rel', + connection_keyword='conn') + def TestPathAndConnKeywords(self, path=None, conn=None): + return path, conn.get_unique_name() + + @dbus.service.signal(IFACE, signature='s', rel_path_keyword='rel_path') + def SignalOneString(self, test, rel_path=None): + logger.info('SignalOneString(%r) @ %r', test, rel_path) + + # Deprecated + @dbus.service.signal(IFACE, signature='ss', path_keyword='path') + def SignalTwoStrings(self, test, test2, path=None): + logger.info('SignalTwoStrings(%r, %r) @ %r', test, test2, path) + + @dbus.service.method(IFACE, in_signature='su', out_signature='', + path_keyword='path') + def EmitSignal(self, signal, value, path=None): + sig = getattr(self, str(signal), None) + assert sig is not None + + assert path.startswith(OBJECT + '/Fallback') + rel_path = path[len(OBJECT + '/Fallback'):] + if rel_path == '': + rel_path = '/' + + if signal == 'SignalOneString': + logger.info('Emitting %s from rel %r', signal, rel_path) + sig('I am a fallback', rel_path=rel_path) + else: + val = ('I am', 'a fallback') + logger.info('Emitting %s from abs %r', signal, path) + sig('I am', 'a deprecated fallback', path=path) + class TestObject(dbus.service.Object, TestInterface): def __init__(self, bus_name, object_path=OBJECT): dbus.service.Object.__init__(self, bus_name, object_path) @@ -245,5 +283,6 @@ session_bus = dbus.SessionBus() global_name = dbus.service.BusName(NAME, bus=session_bus) object = TestObject(global_name) g_object = TestGObject(global_name) +fallback_object = Fallback(session_bus) loop = gobject.MainLoop() loop.run() diff --git a/test/test-signals.py b/test/test-signals.py index 797f70c..22b4b4b 100644 --- a/test/test-signals.py +++ b/test/test-signals.py @@ -48,14 +48,28 @@ if not pkg.startswith(pydir): if not _dbus_bindings.__file__.startswith(builddir): raise Exception("DBus modules (%s) are not being picked up from the package"%_dbus_bindings.__file__) + +NAME = "org.freedesktop.DBus.TestSuitePythonService" +IFACE = "org.freedesktop.DBus.TestSuiteInterface" +OBJECT = "/org/freedesktop/DBus/TestSuitePythonObject" + + class TestSignals(unittest.TestCase): def setUp(self): logger.info('setUp()') self.bus = dbus.SessionBus() - self.remote_object = self.bus.get_object("org.freedesktop.DBus.TestSuitePythonService", "/org/freedesktop/DBus/TestSuitePythonObject") - self.remote_object_follow = self.bus.get_object("org.freedesktop.DBus.TestSuitePythonService", "/org/freedesktop/DBus/TestSuitePythonObject", follow_name_owner_changes=True) - self.iface = dbus.Interface(self.remote_object, "org.freedesktop.DBus.TestSuiteInterface") - self.iface_follow = dbus.Interface(self.remote_object_follow, "org.freedesktop.DBus.TestSuiteInterface") + self.remote_object = self.bus.get_object(NAME, OBJECT) + self.remote_object_fallback_trivial = self.bus.get_object(NAME, + OBJECT + '/Fallback') + self.remote_object_fallback = self.bus.get_object(NAME, + OBJECT + '/Fallback/Badger') + self.remote_object_follow = self.bus.get_object(NAME, OBJECT, + follow_name_owner_changes=True) + self.iface = dbus.Interface(self.remote_object, IFACE) + self.iface_follow = dbus.Interface(self.remote_object_follow, IFACE) + self.fallback_iface = dbus.Interface(self.remote_object_fallback, IFACE) + self.fallback_trivial_iface = dbus.Interface( + self.remote_object_fallback_trivial, IFACE) self.in_test = None def signal_test_impl(self, iface, name, test_removal=False): @@ -104,6 +118,12 @@ class TestSignals(unittest.TestCase): raise AssertionError('Signal should not have arrived, but did') gobject.source_remove(source_id) + def testFallback(self): + self.signal_test_impl(self.fallback_iface, 'Fallback') + + def testFallbackTrivial(self): + self.signal_test_impl(self.fallback_trivial_iface, 'FallbackTrivial') + def testSignal(self): self.signal_test_impl(self.iface, 'Signal') |