2008-05-16 Mark Doffman <mark.doffman@codethink.co.uk>
[platform/core/uifw/at-spi2-atk.git] / tests / testServer.py
1 import sys
2 import gobject
3 import dbus
4 from dbus.mainloop.glib import DBusGMainLoop
5
6 from xml.dom import minidom
7
8 from AccessibleTree import AccessibleTree
9
10 DBusGMainLoop(set_as_default=True)
11
12 def getChildrenByName(node, name):
13         return [child for child in node.childNodes if child.nodeType == child.ELEMENT_NODE and child.nodeName == name]
14
15 def registerObject(tree, parent, node):
16         reference = node.getAttribute('reference').encode('ASCII')
17         name = node.getAttribute('name').encode('ASCII')
18         role = node.getAttribute('role').encode('ASCII')
19         description = node.getAttribute('description').encode('ASCII')
20
21         interfacen = getChildrenByName(node, 'interface')
22         interfaces = [itf.getAttribute('name').encode('ASCII') for itf in interfacen]
23
24         childrenn = getChildrenByName(node, 'accessible')
25         children = [cld.getAttribute('reference').encode('ASCII') for cld in childrenn]
26
27         object = (reference, parent, children, interfaces, name, int(role), description)
28         tree.updateObject(reference, object)
29
30         for child in childrenn:
31                 registerObject(tree, reference, child)
32
33 def main(argv):
34         filename = argv[1]
35         bus = dbus.SessionBus()
36
37         loop = gobject.MainLoop()
38
39         bus.request_name('test.atspi.tree', 0)
40
41         tree = AccessibleTree(bus, '/org/freedesktop/atspi/tree')
42         doc = minidom.parse(filename)
43         node = doc.firstChild
44         tree.setRoot(node.getAttribute('reference').encode('ASCII'))
45
46         registerObject(tree, '/', node)
47
48         try:
49                 loop.run()
50         except KeyboardInterrupt:
51                 loop.quit()
52
53 if __name__ == '__main__':
54         sys.exit(main(sys.argv))