#!/usr/bin/env python

import os,sys

try:
    import dbus
    import dbus.mainloop.glib
    from gi.repository import GObject
except:
    print "Failed import, aborting test"
    sys.exit(0)

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
loop = GObject.MainLoop()

exitcode = 0

def handle_noreceipt():
    print "Failed to get signal"
    global exitcode
    exitcode = 1
    loop.quit()

GObject.timeout_add(7000, handle_noreceipt)

bus = dbus.SessionBus()

def sighandler(*args, **kwargs):
    print "got signal"
    loop.quit()   

bus.add_signal_receiver(sighandler, dbus_interface='org.freedesktop.TestSuite', signal_name='Foo')

o = bus.get_object('org.freedesktop.DBus.TestSuiteEchoService', '/org/freedesktop/TestSuite')
i = dbus.Interface(o, 'org.freedesktop.TestSuite')
def nullhandler(*args, **kwargs):
    pass
i.EmitFoo(reply_handler=nullhandler, error_handler=nullhandler)

loop.run()
sys.exit(exitcode)
