summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2007-06-18 16:31:20 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2007-06-18 16:31:20 +0100
commit543ebc088ffbef9a52de333d99361b47301571b3 (patch)
tree8c7351cb6aa8ef15e2cfff8f246e799a7d65211d /test
parentb62c9694c5f3e39ef00c08fee5754a91515bca54 (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-xtest/run-test.sh3
-rwxr-xr-xtest/test-client.py22
-rwxr-xr-xtest/test-service.py39
-rw-r--r--test/test-signals.py28
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')