[Telepathy] twisted test question
Alban Crequy
alban.crequy at collabora.co.uk
Tue Jan 27 23:22:44 PST 2009
Le Tue, 27 Jan 2009 15:29:21 -0600,
Jonathon Jongsma <jonathon.jongsma at collabora.co.uk> a écrit :
> As many of you are aware, I'm adding some test cases to
> telepathy-idle. I have a decent feel for the test infrastructure
> now, but I don't see any way to assert that an event doesn't happen.
> For instance, if you want to assert that a dbus-signal is emitted,
> you can do things like:
>
> q.expect('dbus-signal', ...)
>
> but I don't see any way to specify that something shout NOT happen,
> maybe something like:
>
> q.expect_not('dbus-signal', ...)
>
> or perhaps more usefully, something like:
>
> q.expect_many(EventPattern('foo'),
> EventPattern('bar'),
> ForbidEventPattern('baz'))
>
> that would require events 'foo' and 'bar' to happen but fail if event
> 'baz' occurs.
>
> Is there anything like that available? Has anybody wanted to do
> something similar and found a different way to achieve it?
You can have a look here:
http://git.collabora.co.uk/?p=telepathy-gabble.git;a=blob;f=tests/twisted/test-caps-hash.py;h=17280f4fd35c6d18c5184deacec81f2a2236afa5;hb=master#l335
You can register a callback when the dbus-signal is fired, and set up a
flag in the callback.
def caps_changed_cb(dummy):
# Workaround to bug 9980: do not raise an error but use a flag
# https://bugs.freedesktop.org/show_bug.cgi?id=9980
global caps_changed_flag
caps_changed_flag = True
conn_caps_iface.connect_to_signal('CapabilitiesChanged',
caps_changed_cb)
Then you can assert your flag is False.
global caps_changed_flag
# don't receive any D-Bus signal
sync_dbus(bus, q, conn)
assert caps_changed_flag == False
It is not as easy as q.expect_not because you need some synchronisation
(sync_dbus...), and you cannot assert directly in the callback because
of bug #9980.
I am not sure 'ForbidEventPattern' is easy to write because you
would need to synchronise on possible events (D-Bus, streams).
--
Alban
More information about the Telepathy
mailing list