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
26 builddir
= os
.path
.normpath(os
.environ
["DBUS_TOP_BUILDDIR"])
27 pydir
= os
.path
.normpath(os
.environ
["DBUS_TOP_SRCDIR"])
31 if not dbus
.__file
__.startswith(pydir
):
32 raise Exception("DBus modules are not being picked up from the package")
40 logging
.basicConfig(filename
=builddir
+ '/test/test-service.log', filemode
='w')
41 logging
.getLogger().setLevel(1)
42 logger
= logging
.getLogger('test-service')
45 IFACE
= 'org.freedesktop.DBus.TestSuiteInterface'
48 class TestInterface(dbus
.service
.Interface
):
49 @dbus.service
.method(IFACE
, in_signature
='', out_signature
='b')
50 def CheckInheritance(self
):
53 class TestObject(dbus
.service
.Object
, TestInterface
):
54 def __init__(self
, bus_name
, object_path
="/org/freedesktop/DBus/TestSuitePythonObject"):
55 dbus
.service
.Object
.__init
__(self
, bus_name
, object_path
)
57 """ Echo whatever is sent
59 @dbus.service
.method(IFACE
)
63 @dbus.service
.method(IFACE
, in_signature
='s', out_signature
='s')
64 def AcceptUnicodeString(self
, foo
):
65 assert isinstance(foo
, unicode), (foo
, foo
.__class
__.__mro
__)
68 @dbus.service
.method(IFACE
, in_signature
='s', out_signature
='s', utf8_strings
=True)
69 def AcceptUTF8String(self
, foo
):
70 assert isinstance(foo
, str), (foo
, foo
.__class
__.__mro
__)
73 @dbus.service
.method(IFACE
, in_signature
='', out_signature
='soss',
74 sender_keyword
='sender', path_keyword
='path',
75 destination_keyword
='dest', message_keyword
='msg')
76 def MethodExtraInfoKeywords(self
, sender
=None, path
=None, dest
=None,
78 return (sender
, path
, dest
,
79 msg
.__class
__.__module
__ + '.' + msg
.__class
__.__name
__)
81 @dbus.service
.method(IFACE
, in_signature
='ay', out_signature
='ay')
82 def AcceptListOfByte(self
, foo
):
83 assert isinstance(foo
, list), (foo
, foo
.__class
__.__mro
__)
86 @dbus.service
.method(IFACE
, in_signature
='ay', out_signature
='ay', byte_arrays
=True)
87 def AcceptByteArray(self
, foo
):
88 assert isinstance(foo
, str), (foo
, foo
.__class
__.__mro
__)
91 @dbus.service
.method(IFACE
)
92 def GetComplexArray(self
):
94 for i
in range(0,100):
95 ret
.append((random
.randint(0,100), random
.randint(0,100), str(random
.randint(0,100))))
97 return dbus
.Array(ret
, signature
="(uus)")
99 def returnValue(self
, test
):
115 @dbus.service
.method(IFACE
, in_signature
='u', out_signature
='s')
116 def ReturnOneString(self
, test
):
117 return self
.returnValue(test
)
119 @dbus.service
.method(IFACE
, in_signature
='u', out_signature
='ss')
120 def ReturnTwoStrings(self
, test
):
121 return self
.returnValue(test
)
123 @dbus.service
.method(IFACE
, in_signature
='u', out_signature
='(ss)')
124 def ReturnStruct(self
, test
):
125 logger
.info('ReturnStruct(%r) -> %r', test
, self
.returnValue(test
))
126 return self
.returnValue(test
)
128 @dbus.service
.method(IFACE
, in_signature
='u', out_signature
='as')
129 def ReturnArray(self
, test
):
130 return self
.returnValue(test
)
132 @dbus.service
.method(IFACE
, in_signature
='u', out_signature
='a{ss}')
133 def ReturnDict(self
, test
):
134 return self
.returnValue(test
)
136 @dbus.service
.signal(IFACE
, signature
='s')
137 def SignalOneString(self
, test
):
138 logger
.info('SignalOneString(%r)', test
)
140 @dbus.service
.signal(IFACE
, signature
='ss')
141 def SignalTwoStrings(self
, test
, test2
):
142 logger
.info('SignalTwoStrings(%r, %r)', test
, test2
)
144 @dbus.service
.signal(IFACE
, signature
='(ss)')
145 def SignalStruct(self
, test
):
146 logger
.info('SignalStruct(%r)', test
)
148 @dbus.service
.signal(IFACE
, signature
='as')
149 def SignalArray(self
, test
):
152 @dbus.service
.signal(IFACE
, signature
='a{ss}')
153 def SignalDict(self
, test
):
156 @dbus.service
.method(IFACE
, in_signature
='su', out_signature
='')
157 def EmitSignal(self
, signal
, value
):
158 sig
= getattr(self
, str(signal
), None)
161 val
= self
.returnValue(value
)
162 # make two string case work by passing arguments in by tuple
163 if (signal
== 'SignalTwoStrings' and (value
== 1 or value
== 5)):
168 logger
.info('Emitting %s with %r', signal
, val
)
171 def CheckInheritance(self
):
174 @dbus.service
.method(IFACE
, in_signature
='bbv', out_signature
='v', async_callbacks
=('return_cb', 'error_cb'))
175 def AsynchronousMethod(self
, async, fail
, variant
, return_cb
, error_cb
):
178 gobject
.timeout_add(500, self
.AsynchronousMethod
, False, fail
, variant
, return_cb
, error_cb
)
186 return False # do not run again
190 @dbus.service
.method(IFACE
, in_signature
='', out_signature
='s', sender_keyword
='sender')
191 def WhoAmI(self
, sender
):
194 @dbus.service
.method(IFACE
)
195 def MultipleReturnWithoutSignature(self
):
196 # https://bugs.freedesktop.org/show_bug.cgi?id=10174
197 return dbus
.String('abc'), dbus
.Int32(123)
199 session_bus
= dbus
.SessionBus()
200 name
= dbus
.service
.BusName("org.freedesktop.DBus.TestSuitePythonService", bus
=session_bus
)
201 object = TestObject(name
)
202 loop
= gobject
.MainLoop()