Set released flag back to 0
[dbus-python-phuang.git] / test / test-service.py
blobb41091ac771a2100751349ba7d3e36d1ad13285b
1 #!/usr/bin/env python
3 # Copyright (C) 2004 Red Hat Inc. <http://www.redhat.com/>
4 # Copyright (C) 2005, 2006 Collabora Ltd. <http://www.collabora.co.uk/>
6 # Licensed under the Academic Free License version 2.1
8 # This program is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 import sys
23 import os
24 import logging
26 builddir = os.path.normpath(os.environ["DBUS_TOP_BUILDDIR"])
27 pydir = os.path.normpath(os.environ["DBUS_TOP_SRCDIR"])
29 import dbus
31 if not dbus.__file__.startswith(pydir):
32 raise Exception("DBus modules are not being picked up from the package")
34 import dbus.service
35 import dbus.glib
36 import gobject
37 import random
40 logging.basicConfig(filename=builddir + '/test/test-service.log', filemode='w')
41 logging.getLogger().setLevel(1)
42 logger = logging.getLogger('test-service')
45 class TestInterface(dbus.service.Interface):
46 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='', out_signature='b')
47 def CheckInheritance(self):
48 return False
50 class TestObject(dbus.service.Object, TestInterface):
51 def __init__(self, bus_name, object_path="/org/freedesktop/DBus/TestSuitePythonObject"):
52 dbus.service.Object.__init__(self, bus_name, object_path)
54 """ Echo whatever is sent
55 """
56 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface")
57 def Echo(self, arg):
58 return arg
60 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='s', out_signature='s')
61 def AcceptUnicodeString(self, foo):
62 assert isinstance(foo, unicode), (foo, foo.__class__.__mro__)
63 return foo
65 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='s', out_signature='s', utf8_strings=True)
66 def AcceptUTF8String(self, foo):
67 assert isinstance(foo, str), (foo, foo.__class__.__mro__)
68 return foo
70 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='ay', out_signature='ay')
71 def AcceptListOfByte(self, foo):
72 assert isinstance(foo, list), (foo, foo.__class__.__mro__)
73 return foo
75 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='ay', out_signature='ay', byte_arrays=True)
76 def AcceptByteArray(self, foo):
77 assert isinstance(foo, str), (foo, foo.__class__.__mro__)
78 return foo
80 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface")
81 def GetComplexArray(self):
82 ret = []
83 for i in range(0,100):
84 ret.append((random.randint(0,100), random.randint(0,100), str(random.randint(0,100))))
86 return dbus.Array(ret, signature="(uus)")
88 def returnValue(self, test):
89 if test == 0:
90 return ""
91 elif test == 1:
92 return "",""
93 elif test == 2:
94 return "","",""
95 elif test == 3:
96 return []
97 elif test == 4:
98 return {}
99 elif test == 5:
100 return ["",""]
101 elif test == 6:
102 return ["","",""]
104 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='s')
105 def ReturnOneString(self, test):
106 return self.returnValue(test)
108 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='ss')
109 def ReturnTwoStrings(self, test):
110 return self.returnValue(test)
112 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='(ss)')
113 def ReturnStruct(self, test):
114 logger.info('ReturnStruct(%r) -> %r', test, self.returnValue(test))
115 return self.returnValue(test)
117 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='as')
118 def ReturnArray(self, test):
119 return self.returnValue(test)
121 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='u', out_signature='a{ss}')
122 def ReturnDict(self, test):
123 return self.returnValue(test)
125 @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='s')
126 def SignalOneString(self, test):
127 logger.info('SignalOneString(%r)', test)
129 @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='ss')
130 def SignalTwoStrings(self, test, test2):
131 logger.info('SignalTwoStrings(%r, %r)', test, test2)
133 @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='(ss)')
134 def SignalStruct(self, test):
135 logger.info('SignalStruct(%r)', test)
137 @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='as')
138 def SignalArray(self, test):
139 pass
141 @dbus.service.signal("org.freedesktop.DBus.TestSuiteInterface", signature='a{ss}')
142 def SignalDict(self, test):
143 pass
145 @dbus.service.method("org.freedesktop.DBus.TestSuiteInterface", in_signature='su', out_signature='')
146 def EmitSignal(self, signal, value):
147 sig = getattr(self, str(signal), None)
148 assert(sig != None)
150 val = self.returnValue(value)
151 # make two string case work by passing arguments in by tuple
152 if (signal == 'SignalTwoStrings' and (value == 1 or value == 5)):
153 val = tuple(val)
154 else:
155 val = tuple([val])
157 logger.info('Emitting %s with %r', signal, val)
158 sig(*val)
160 def CheckInheritance(self):
161 return True
163 @dbus.service.method('org.freedesktop.DBus.TestSuiteInterface', in_signature='bbv', out_signature='v', async_callbacks=('return_cb', 'error_cb'))
164 def AsynchronousMethod(self, async, fail, variant, return_cb, error_cb):
165 try:
166 if async:
167 gobject.timeout_add(500, self.AsynchronousMethod, False, fail, variant, return_cb, error_cb)
168 return
169 else:
170 if fail:
171 raise RuntimeError
172 else:
173 return_cb(variant)
175 return False # do not run again
176 except Exception, e:
177 error_cb(e)
179 @dbus.service.method('org.freedesktop.DBus.TestSuiteInterface', in_signature='', out_signature='s', sender_keyword='sender')
180 def WhoAmI(self, sender):
181 return sender
183 session_bus = dbus.SessionBus()
184 name = dbus.service.BusName("org.freedesktop.DBus.TestSuitePythonService", bus=session_bus)
185 object = TestObject(name)
186 loop = gobject.MainLoop()
187 loop.run()