2008-06-02 Mark Doffman <mark.doffman@codethink.co.uk>
authorMark Doffman <mdoff@silver-wind.(none)>
Tue, 3 Jun 2008 03:46:45 +0000 (04:46 +0100)
committerMark Doffman <mdoff@silver-wind.(none)>
Tue, 3 Jun 2008 03:46:45 +0000 (04:46 +0100)
* pyatspi --> python/pyatspi
  Move the accessible_cache out of test and into
  the python directory. Move pyatspi to a subdirectory
  from here.
* tests/clients
  Add a framework for invoking and testing the atk
  adaptor using the test applications.

32 files changed:
configure.ac
python/accessible_cache.py [moved from tests/accessible_cache.py with 100% similarity]
python/pyatspi/ChangeLog [moved from pyatspi/ChangeLog with 100% similarity]
python/pyatspi/Makefile.am [moved from pyatspi/Makefile.am with 100% similarity]
python/pyatspi/__init__.py [moved from pyatspi/__init__.py with 100% similarity]
python/pyatspi/accessible.py [moved from pyatspi/accessible.py with 100% similarity]
python/pyatspi/constants.py [moved from pyatspi/constants.py with 100% similarity]
python/pyatspi/event.py [moved from pyatspi/event.py with 100% similarity]
python/pyatspi/registry.py [moved from pyatspi/registry.py with 100% similarity]
python/pyatspi/setup.py [moved from pyatspi/setup.py with 100% similarity]
python/pyatspi/utils.py [moved from pyatspi/utils.py with 100% similarity]
tests/AccessibleTree.py [deleted file]
tests/Makefile.am
tests/apps/Makefile.am [moved from tests/testapps/Makefile.am with 79% similarity]
tests/apps/atk-object-xml-loader.c [new file with mode: 0644]
tests/apps/atk-object-xml-loader.h [new file with mode: 0644]
tests/apps/noop-app.c [moved from tests/testapps/noop-app.c with 80% similarity]
tests/apps/object-app.c [new file with mode: 0644]
tests/apps/test-application.c [moved from tests/testapps/test-application.c with 85% similarity]
tests/clients/Makefile.am [new file with mode: 0644]
tests/clients/__init__.py [new file with mode: 0644]
tests/clients/accessibleobject.py [new file with mode: 0644]
tests/clients/object-test-stage1.xml [new file with mode: 0644]
tests/clients/testutil.py [new file with mode: 0644]
tests/desktop.xml [deleted file]
tests/dummyatk/my-atk-object.c
tests/dummyatk/my-atk-object.h
tests/makeTree.py [deleted file]
tests/testClient.py [deleted file]
tests/testServer.py [deleted file]
tests/testapps/object-app.c [deleted file]
tests/testrunner.py [new file with mode: 0644]

index 8b51084..72f533c 100644 (file)
@@ -14,6 +14,10 @@ PKG_CHECK_MODULES(DBUS_GLIB, [dbus-glib-1 >= 0.7.0])
 AC_SUBST(DBUS_GLIB_LIBS)
 AC_SUBST(DBUS_GLIB_CFLAGS)
 
+PKG_CHECK_MODULES(LIB_XML, [libxml-2.0 >= 2.0.0])
+AC_SUBST(LIB_XML_LIBS)
+AC_SUBST(LIB_XML_CFLAGS)
+
 PKG_CHECK_MODULES(GOBJ, [gobject-2.0 >= 2.0.0])
 AC_SUBST(GOBJ_LIBS)
 AC_SUBST(GOBJ_CFLAGS)
@@ -116,6 +120,7 @@ AC_CONFIG_FILES([Makefile
                 registryd/Makefile
                 atk-adaptor/Makefile
                 tests/dummyatk/Makefile
-                tests/testapps/Makefile])
+                tests/clients/Makefile
+                tests/apps/Makefile])
 
 AC_OUTPUT
similarity index 100%
rename from pyatspi/ChangeLog
rename to python/pyatspi/ChangeLog
similarity index 100%
rename from pyatspi/event.py
rename to python/pyatspi/event.py
similarity index 100%
rename from pyatspi/setup.py
rename to python/pyatspi/setup.py
similarity index 100%
rename from pyatspi/utils.py
rename to python/pyatspi/utils.py
diff --git a/tests/AccessibleTree.py b/tests/AccessibleTree.py
deleted file mode 100644 (file)
index ba76d80..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-import dbus
-import dbus.service
-
-class AccessibleTree(dbus.service.Object):
-       """
-       The Accessible tree provides the interface,
-       for accessing all the accessible objects
-       available on a particular application.
-       """
-
-       def __init__(self, bus, path):
-               """
-               Parameters:
-
-               bus - The D-Bus bus object to use
-               path - The object path this interface should use
-               """
-               dbus.service.Object.__init__(self, bus, path)
-               self._toSend = {}
-               self._toRemove = []
-               self._objects = {}
-               self._root = '/'
-
-       @dbus.service.method(dbus_interface='org.freedesktop.atspi.Tree',
-                            out_signature='o')
-       def getRoot(self):
-               return self._root
-
-       @dbus.service.method(dbus_interface='org.freedesktop.atspi.Tree',
-                            out_signature='a(ooaoassus)')
-       def getTree(self):
-               return self._objects.values()
-
-       @dbus.service.signal(dbus_interface='org.freedesktop.atspi.Tree',
-                            signature=('a(ooaoassus)ao'))
-       def updateTree(self, objects, paths):
-               #There are some locking issues here.
-               #Need to make sure that updates are not missed.
-               oldSend = self._toSend.values()
-               self._toSend = {}
-               oldRemove = self._toRemove
-               self._toRemove = []
-               return (oldSend, oldRemove)
-
-       def updateObject(self, path, object):
-               self._objects[path] = object
-               self._toSend[path] = object
-               
-       def removeObject(self, path):
-               if path in self._objects:
-                       self._toRemove.append(path)
-                       del(self._objects[path])
-
-       def setRoot(self, root):
-               self._root = root
index b012e65..15f1aff 100644 (file)
@@ -1,9 +1,3 @@
-SUBDIRS=dummyatk testapps
+SUBDIRS=dummyatk apps clients
 
-EXTRA_DIST = \
-       AccessibleTree.py      \
-       AccessibleTreeCache.py \
-       desktop.xml            \
-       makeTree.py            \
-       testClient.py          \
-       testServer.py
+EXTRA_DIST = testrunner.py
similarity index 79%
rename from tests/testapps/Makefile.am
rename to tests/apps/Makefile.am
index a37699c..0f0b550 100644 (file)
@@ -22,7 +22,7 @@ libnoopapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
 libnoopapp_la_LIBADD = $(TEST_APP_LIBADD)
 libnoopapp_la_SOURCES = noop-app.c
 
-libobjectapp_la_CFLAGS = $(TEST_APP_CFLAGS)
+libobjectapp_la_CFLAGS = $(TEST_APP_CFLAGS) $(LIB_XML_CFLAGS)
 libobjectapp_la_LDFLAGS = $(TEST_APP_LDFLAGS)
-libobjectapp_la_LIBADD = $(TEST_APP_LIBADD)
-libobjectapp_la_SOURCES = object-app.c
+libobjectapp_la_LIBADD = $(TEST_APP_LIBADD) $(LIB_XML_LIBS)
+libobjectapp_la_SOURCES = object-app.c atk-object-xml-loader.c atk-object-xml-loader.h
diff --git a/tests/apps/atk-object-xml-loader.c b/tests/apps/atk-object-xml-loader.c
new file mode 100644 (file)
index 0000000..5fa2354
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2008 Codethink Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <glib.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include <my-atk.h>
+
+#define ACCESSIBLE_NODE ((const xmlChar *) "accessible")
+#define INTERFACE_NODE  ((const xmlChar *) "interface")
+
+#define NAME_ATTR ((const xmlChar *) "name")
+#define DESC_ATTR ((const xmlChar *) "description")
+#define ROLE_ATTR ((const xmlChar *) "role")
+
+static MyAtkObject *
+create_atk_object_from_element(xmlNode *element)
+{
+  xmlNode *child_node;
+
+  MyAtkObject *obj = NULL;
+  MyAtkObject *child_obj;
+
+  xmlChar *name;
+  xmlChar *description;
+  xmlChar *role_text; 
+  gint role;
+
+  name = xmlGetProp(element, NAME_ATTR);
+  description = xmlGetProp(element, DESC_ATTR);
+  role_text = xmlGetProp(element, ROLE_ATTR);
+  role = atoi(role_text);
+
+  obj = MY_ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT,
+                                  "accessible-name", name,
+                                  "accessible-description", description,
+                                  "accessible-role", role,
+                                  NULL));
+
+  child_node = element->xmlChildrenNode;
+  while (child_node != NULL)
+    {
+      if (!xmlStrcmp(child_node->name, ACCESSIBLE_NODE))  
+       {
+         child_obj = create_atk_object_from_element(child_node); 
+         my_atk_object_add_child(obj, child_obj);
+       }
+      child_node = child_node->next;
+    }
+  return obj;
+}
+
+/*
+ * Reads the XML from filename and uses it
+ * to create a tree of MyAtkObjects.
+ * 
+ * returns: The root object of the tree.
+ */
+MyAtkObject *
+atk_object_xml_parse(gchar *filename)
+{
+  xmlDoc *doc;
+  xmlNode *root_element;
+  MyAtkObject *new_atk_object = NULL;
+
+  doc = xmlReadFile(filename, NULL, 0);
+  g_assert(doc != NULL);
+
+  root_element = xmlDocGetRootElement(doc);
+
+  if (!xmlStrcmp(root_element->name, ACCESSIBLE_NODE))  
+    new_atk_object = create_atk_object_from_element(root_element); 
+
+  xmlFreeDoc(doc);
+  return new_atk_object;
+}
diff --git a/tests/apps/atk-object-xml-loader.h b/tests/apps/atk-object-xml-loader.h
new file mode 100644 (file)
index 0000000..ce707bd
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2008 Codethink Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef ATK_OBJECT_XML_LOADER_H
+#define ATK_OBJECT_XML_LOADER_H
+
+#include <glib.h>
+#include <my-atk.h>
+
+MyAtkObject *
+atk_object_xml_parse(gchar *filename);
+
+#endif /*ATK_OBJECT_XML_LOADER_H*/
similarity index 80%
rename from tests/testapps/noop-app.c
rename to tests/apps/noop-app.c
index 7b997cc..42951eb 100644 (file)
@@ -2,7 +2,7 @@
 #include <atk/atk.h>
 
 G_MODULE_EXPORT void
-test_init (void)
+test_init (int argc, char *argv[])
 {
   ;
 }
diff --git a/tests/apps/object-app.c b/tests/apps/object-app.c
new file mode 100644 (file)
index 0000000..74dabb3
--- /dev/null
@@ -0,0 +1,31 @@
+#include <gmodule.h>
+#include <atk/atk.h>
+#include <my-atk.h>
+
+#include "atk-object-xml-loader.h"
+
+static gchar *tdata_path = NULL;
+
+static AtkObject *root_accessible;
+
+#define OBJECT_TEST_1 "object-test-stage1.xml"
+
+G_MODULE_EXPORT void
+test_init (gchar *path)
+{
+  gchar *td;
+
+  if (path == NULL)
+     g_error("No test data path provided");
+  tdata_path = path;
+
+  td = g_build_path(G_DIR_SEPARATOR_S, tdata_path, OBJECT_TEST_1, NULL);
+  root_accessible = ATK_OBJECT(atk_object_xml_parse(td));
+  g_free(td);
+}
+
+G_MODULE_EXPORT AtkObject *
+test_get_root (void)
+{
+  return root_accessible;
+}
similarity index 85%
rename from tests/testapps/test-application.c
rename to tests/apps/test-application.c
index a499584..41118e3 100644 (file)
@@ -85,8 +85,10 @@ load_atspi_module(const char *path, int argc, char *argv[])
   ((GtkModuleInit) init)(argc, argv);
 }
 
+typedef void (*TestModuleInit) (gchar *path);
+
 static void
-load_test_module(const char *path, int argc, char *argv[])
+load_test_module(const char *path, const char *tdpath)
 {
   gpointer init;
 
@@ -100,17 +102,19 @@ load_test_module(const char *path, int argc, char *argv[])
   if (!g_module_symbol(test_module, "test_get_root", &test_module_get_root))
     g_error("Couldn't load symbol \"test_get_root\"\n");
 
-  ((GtkModuleInit) init)(argc, argv);
+  ((TestModuleInit) init)((gchar *)tdpath);
 }
 
 /*Command line data*/
-static gchar *tmodule_path;
-static gchar *amodule_path;
+static gchar *tmodule_path = NULL;
+static gchar *amodule_path = NULL;
+static gchar *tdata_path = NULL;
 
 static GOptionEntry optentries[] = 
 {
   {"test-module", 't', 0, G_OPTION_ARG_STRING, &tmodule_path, "Module containing test scenario", NULL},
   {"atspi-module", 'a', 0, G_OPTION_ARG_STRING, &amodule_path, "Gtk module with atk-atspi adaptor", NULL},
+  {"test-data", 'd', 0, G_OPTION_ARG_STRING, &tdata_path, "Path to directory of test data", NULL},
   {NULL}
 };
 
@@ -127,16 +131,19 @@ main(int argc, char *argv[])
   /*Parse command options*/
   opt = g_option_context_new(NULL);
   g_option_context_add_main_entries(opt, optentries, NULL);
+  g_option_context_set_ignore_unknown_options(opt, TRUE);
   if (!g_option_context_parse(opt, &argc, &argv, &err))
-    {
-      g_print("Option parsing failed: %s\n", err->message);
-      exit(1);
-    }
+      g_error("Option parsing failed: %s\n", err->message);
+
+  if (tmodule_path == NULL)
+      g_error("No test module provided");
+  if (amodule_path == NULL)
+      g_error("No atspi module provided");
 
   g_type_init();
 
   setup_atk_util();
-  load_test_module(tmodule_path, argc, argv);
+  load_test_module(tmodule_path, tdata_path);
   load_atspi_module(amodule_path, argc, argv);
 
   mainloop = g_main_loop_new (NULL, FALSE);
diff --git a/tests/clients/Makefile.am b/tests/clients/Makefile.am
new file mode 100644 (file)
index 0000000..2777638
--- /dev/null
@@ -0,0 +1,5 @@
+EXTRA_DIST = \
+       accessibleobject.py     \
+       __init__.py             \
+       object-test-stage1.xml  \
+       testutil.py
diff --git a/tests/clients/__init__.py b/tests/clients/__init__.py
new file mode 100644 (file)
index 0000000..40674f3
--- /dev/null
@@ -0,0 +1,5 @@
+
+from accessibleobject import AccessibleObjectTestCase
+import testutil
+
+del accessibleobject
diff --git a/tests/clients/accessibleobject.py b/tests/clients/accessibleobject.py
new file mode 100644 (file)
index 0000000..480b3f7
--- /dev/null
@@ -0,0 +1,49 @@
+import unittest
+import testutil
+
+import dbus
+import gobject
+import os.path
+from dbus.mainloop.glib import DBusGMainLoop
+
+from accessible_cache import AccessibleCache
+
+from xml.dom import minidom
+
+def createNode(accessible, parentElement):
+       e = minidom.Element("accessible")
+
+       e.attributes["name"] = accessible.name
+       e.attributes["role"] = str(int(accessible.role))
+       e.attributes["description"] = accessible.description
+
+       for i in range(0, accessible.numChildren):
+               createNode(accessible.getChild(i), e)
+
+       parentElement.appendChild(e)
+
+class AccessibleObjectTestCase(unittest.TestCase):
+       def setUp(self):
+               DBusGMainLoop(set_as_default=True)
+               self._app = testutil.runTestApp("libobjectapp.so")
+
+               self._bus = dbus.SessionBus()
+               self._loop = gobject.MainLoop()
+               self._cache = AccessibleCache(self._bus, testutil.busname, testutil.objectpath)
+
+       def tearDown(self):
+               del(self._bus)
+               del(self._loop)
+               del(self._cache)
+               #TODO Shut down the test application.
+               del(self._app)
+
+       def runTest(self):
+               root = self._cache.getRootAccessible()
+               doc = minidom.Document()
+               createNode(root, doc)
+               answer = doc.toprettyxml()
+               correct = os.path.join(testutil.testdata, "object-test-stage1.xml")
+               file = open(correct)
+               cstring = file.read()
+               self.assertEqual(answer, cstring, "Object tree not passed correctly")
diff --git a/tests/clients/object-test-stage1.xml b/tests/clients/object-test-stage1.xml
new file mode 100644 (file)
index 0000000..54729ca
--- /dev/null
@@ -0,0 +1,136 @@
+<?xml version="1.0" ?>
+<accessible description="" name="main" role="68">
+       <accessible description="" name="gnome-settings-daemon" role="77"/>
+       <accessible description="" name="gnome-panel" role="77">
+               <accessible description="" name="Bottom Expanded Edge Panel" role="24"/>
+               <accessible description="" name="Top Expanded Edge Panel" role="24"/>
+       </accessible>
+       <accessible description="" name="nautilus" role="77">
+               <accessible description="" name="Desktop" role="24"/>
+       </accessible>
+       <accessible description="" name="metacity" role="77"/>
+       <accessible description="" name="tracker-applet" role="77"/>
+       <accessible description="" name="empathy" role="77">
+               <accessible description="" name="Contact List" role="24"/>
+       </accessible>
+       <accessible description="" name="nm-applet" role="77"/>
+       <accessible description="" name="gnome-power-manager" role="77"/>
+       <accessible description="" name="update-notifier" role="77"/>
+       <accessible description="Firefox Application Accessible" name="Firefox" role="77">
+               <accessible description="Firefox Application Accessible" name="Google Reader - Mozilla Firefox 3 Beta 5" role="24">
+                       <accessible description="" name="" role="34"/>
+                       <accessible description="" name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." role="65"/>
+                       <accessible description="" name="" role="67">
+                               <accessible description="" name="" role="32">
+                                       <accessible description="" name="" role="10"/>
+                                       <accessible description="" name="" role="10"/>
+                               </accessible>
+                       </accessible>
+                       <accessible description="" name="" role="34">
+                               <accessible description="" name="" role="68"/>
+                       </accessible>
+                       <accessible description="" name="" role="34"/>
+                       <accessible description="" name="" role="34"/>
+                       <accessible description="" name="" role="34"/>
+                       <accessible description="" name="" role="34"/>
+                       <accessible description="" name="" role="34"/>
+                       <accessible description="" name="" role="65"/>
+                       <accessible description="" name="" role="65"/>
+                       <accessible description="" name="" role="64">
+                               <accessible description="" name="Application" role="35"/>
+                               <accessible description="" name="" role="51"/>
+                               <accessible description="" name="Activity Indicator" role="44"/>
+                       </accessible>
+                       <accessible description="" name="" role="64">
+                               <accessible description="Go back one page" name="Back" role="44"/>
+                               <accessible description="Go forwards one page" name="Forward" role="44"/>
+                               <accessible description="" name="" role="44"/>
+                               <accessible description="Reload current page" name="Reload" role="44"/>
+                               <accessible description="Stop loading this page" name="Stop" role="44"/>
+                               <accessible description="chrome://ubufox/content/startpage.html" name="Home" role="44"/>
+                               <accessible description="" name="Location" role="78"/>
+                               <accessible description="" name="Search using Google" role="78"/>
+                       </accessible>
+                       <accessible description="" name="" role="64">
+                               <accessible description="" name="Smart Bookmarks" role="44"/>
+                               <accessible description="" name="Getting Started" role="44"/>
+                               <accessible description="" name="Latest Headlines" role="44"/>
+                       </accessible>
+                       <accessible description="" name="" role="40">
+                               <accessible description="" name="Google Reader" role="65"/>
+                               <accessible description="" name="" role="34"/>
+                               <accessible description="" name="" role="39"/>
+                               <accessible description="" name="" role="50"/>
+                               <accessible description="" name="" role="50">
+                                       <accessible description="" name="Google Reader" role="29">
+                                               <accessible description="" name="Google Reader" role="84">
+                                                       <accessible description="" name="Click here for ARIA enhanced Google Reader." role="70"/>
+                                                       <accessible description="" name="" role="87"/>
+                                                       <accessible description="" name="" role="87"/>
+                                                       <accessible description="" name="" role="87"/>
+                                                       <accessible description="" name="Google Reader" role="70"/>
+                                                       <accessible description="" name="" role="62"/>
+                                                       <accessible description="" name="" role="87"/>
+                                                       <accessible description="" name="" role="87">
+                                                               <accessible description="" name="" role="87"/>
+                                                               <accessible description="" name="" role="87"/>
+                                                               <accessible description="" name="" role="87">
+                                                                       <accessible description="" name="" role="56"/>
+                                                                       <accessible description="" name="" role="87">
+                                                                               <accessible description="" name="" role="87">
+                                                                                       <accessible description="" name="" role="87">
+                                                                                               <accessible description="" name="" role="56"/>
+                                                                                               <accessible description="" name="" role="56">
+                                                                                                       <accessible description="" name="" role="57">
+                                                                                                               <accessible description="" name="" role="87">
+                                                                                                                       <accessible description="" name="" role="87"/>
+                                                                                                                       <accessible description="" name="" role="62"/>
+                                                                                                                       <accessible description="" name="Google News" role="70"/>
+                                                                                                                       <accessible description="" name="" role="87">
+                                                                                                                               <accessible description="" name="" role="87"/>
+                                                                                                                               <accessible description="" name="" role="87">
+                                                                                                                                       <accessible description="" name="Reader and ARIA: A new way to read" role="70"/>
+                                                                                                                               </accessible>
+                                                                                                                               <accessible description="" name="" role="87">
+                                                                                                                                       <accessible description="" name="Official Google Reader Blog" role="70"/>
+                                                                                                                               </accessible>
+                                                                                                                               <accessible description="" name="" role="87"/>
+                                                                                                                       </accessible>
+                                                                                                               </accessible>
+                                                                                                       </accessible>
+                                                                                                       <accessible description="" name="" role="57"/>
+                                                                                               </accessible>
+                                                                                       </accessible>
+                                                                                       <accessible description="" name="" role="87">
+                                                                                               <accessible description="" name="Google Reader Blog" role="70"/>
+                                                                                               <accessible description="" name="Discuss" role="70"/>
+                                                                                               <accessible description="" name="Privacy Policy" role="70"/>
+                                                                                               <accessible description="" name="Help" role="70"/>
+                                                                                               <accessible description="" name="" role="87"/>
+                                                                                       </accessible>
+                                                                               </accessible>
+                                                                       </accessible>
+                                                               </accessible>
+                                                       </accessible>
+                                                       <accessible description="" name="" role="87">
+                                                               <accessible description="" name="" role="28"/>
+                                                               <accessible description="" name="" role="28"/>
+                                                               <accessible description="" name="" role="28"/>
+                                                               <accessible description="" name="" role="28"/>
+                                                               <accessible description="" name="" role="28"/>
+                                                       </accessible>
+                                               </accessible>
+                                       </accessible>
+                               </accessible>
+                       </accessible>
+                       <accessible description="" name="" role="34"/>
+                       <accessible description="" name="" role="55">
+                               <accessible description="" name="Done" role="44"/>
+                               <accessible description="" name="" role="44"/>
+                       </accessible>
+               </accessible>
+       </accessible>
+       <accessible description="" name="gnome-terminal" role="77">
+               <accessible description="" name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" role="24"/>
+       </accessible>
+</accessible>
diff --git a/tests/clients/testutil.py b/tests/clients/testutil.py
new file mode 100644 (file)
index 0000000..a5bc9dd
--- /dev/null
@@ -0,0 +1,27 @@
+#Bus name where test application can be found.
+busname = "test.atspi.tree"
+
+#Path of tree interface on test application.
+objectpath = "/org/freedesktop/atspi/tree"
+
+#Directory where test data, such as XML results
+#can be found.
+testdata = "./"
+
+#Location of test application.
+testapp = "../apps/test-application"
+
+#Directory of test application modules.
+testmodules = "../apps/.libs"
+
+#Atk to at-spi adaptor library location.
+atspilib = "../../atk-adaptor/.libs/libspiatk.so"
+
+from subprocess import Popen
+from os.path import join
+
+def runTestApp(module_name):
+       testmodule = join(testmodules, module_name)
+       print testmodule
+       print testapp
+       return Popen([testapp , "-a", atspilib, "-t", testmodule, "-d", testdata])
diff --git a/tests/desktop.xml b/tests/desktop.xml
deleted file mode 100644 (file)
index 54b4f96..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-<?xml version="1.0" ?>
-<accessible description="" name="main" parent="/" reference="/7d081ab722dd408f84211702cc675993" role="67">
-       <interface name="Accessible"/>
-       <interface name="Desktop"/>
-       <interface name="Component"/>
-       <accessible description="" name="gnome-settings-daemon" parent="/7d081ab722dd408f84211702cc675993" reference="/5a0b530b7f1c485096ff8ebc281471eb" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-       </accessible>
-       <accessible description="" name="gnome-panel" parent="/7d081ab722dd408f84211702cc675993" reference="/142edb7b4217453aa99a02d1f144e041" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-               <accessible description="" name="Bottom Expanded Edge Panel" parent="/142edb7b4217453aa99a02d1f144e041" reference="/0d2b67a781a54602ab232480e2016f35" role="23">
-                       <interface name="Accessible"/>
-               </accessible>
-               <accessible description="" name="Top Expanded Edge Panel" parent="/142edb7b4217453aa99a02d1f144e041" reference="/ada9116ccfd24f848c5d963bff08fd56" role="23">
-                       <interface name="Accessible"/>
-               </accessible>
-       </accessible>
-       <accessible description="" name="nautilus" parent="/7d081ab722dd408f84211702cc675993" reference="/bc86d96f532c46edb8181c21c08f9728" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-               <accessible description="" name="Desktop" parent="/bc86d96f532c46edb8181c21c08f9728" reference="/89dccafc9b2e4e95aad8565643776ed1" role="23">
-                       <interface name="Accessible"/>
-               </accessible>
-       </accessible>
-       <accessible description="" name="metacity" parent="/7d081ab722dd408f84211702cc675993" reference="/a5dda1c8b9774f0ab1105c3035445206" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-       </accessible>
-       <accessible description="" name="tracker-applet" parent="/7d081ab722dd408f84211702cc675993" reference="/147daf460d0e48c6b32586eb289bbeca" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-       </accessible>
-       <accessible description="" name="empathy" parent="/7d081ab722dd408f84211702cc675993" reference="/a8b3e817db1a4dad941f9f444f9ffd8d" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-               <accessible description="" name="Contact List" parent="/a8b3e817db1a4dad941f9f444f9ffd8d" reference="/5256940c1db74b899b07b772561930ff" role="23">
-                       <interface name="Accessible"/>
-               </accessible>
-       </accessible>
-       <accessible description="" name="nm-applet" parent="/7d081ab722dd408f84211702cc675993" reference="/49cde83c3dd9417e9efa881063b34cfd" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-       </accessible>
-       <accessible description="" name="gnome-power-manager" parent="/7d081ab722dd408f84211702cc675993" reference="/14ddbed408b944798a977776153aa05e" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-       </accessible>
-       <accessible description="" name="update-notifier" parent="/7d081ab722dd408f84211702cc675993" reference="/4f1cf811c76d4796b6f559fedec59c09" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-       </accessible>
-       <accessible description="Firefox Application Accessible" name="Firefox" parent="/7d081ab722dd408f84211702cc675993" reference="/f4c6b3ef22a84fb39bc1c6e41ae0f71d" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-               <accessible description="Firefox Application Accessible" name="Google Reader - Mozilla Firefox 3 Beta 5" parent="/f4c6b3ef22a84fb39bc1c6e41ae0f71d" reference="/48f09fac5b8644e9bbe93a4748e49ac3" role="23">
-                       <interface name="Accessible"/>
-                       <interface name="Document"/>
-                       <interface name="Collection"/>
-                       <interface name="Component"/>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/23af90dc35e04f72a0f69895f86d8346" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Action"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                       </accessible>
-                       <accessible description="" name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/a40d7b2c1feb43e6b43a265c35568a25" role="64">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/0e4b5b20d9eb4cfd9bdc9dd47e50aa8c" role="66">
-                               <interface name="Accessible"/>
-                               <interface name="Table"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                               <accessible description="" name="" parent="/0e4b5b20d9eb4cfd9bdc9dd47e50aa8c" reference="/a83352b689224781a453af65aaee5427" role="31">
-                                       <interface name="Accessible"/>
-                                       <interface name="Table"/>
-                                       <interface name="Component"/>
-                                       <accessible description="" name="" parent="/a83352b689224781a453af65aaee5427" reference="/1d80d828ba574262a507a15dc9e565da" role="10">
-                                               <interface name="Accessible"/>
-                                               <interface name="Action"/>
-                                               <interface name="Component"/>
-                                       </accessible>
-                                       <accessible description="" name="" parent="/a83352b689224781a453af65aaee5427" reference="/c32a9d4f2dda4cc9909c3110ed801009" role="10">
-                                               <interface name="Accessible"/>
-                                               <interface name="Action"/>
-                                               <interface name="Component"/>
-                                       </accessible>
-                               </accessible>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/3d1ae86d62ea4a578b1708f8f885e19f" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Action"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                               <accessible description="" name="" parent="/3d1ae86d62ea4a578b1708f8f885e19f" reference="/155c89f9cb9d4f5e9a05ac02e6afcb59" role="67">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/d7a2d832bcc344a796a4b2cec16e2d6d" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/c8d2ff84f4194ecfad4826489f01723b" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/c56a398c8fa8457ebbd8e199ed191488" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/86e59e9c6fb34c1195949468087c9917" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/4f727d52049d4a7e9ac28410f7ad8090" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/c4712cd409a747a88137b9f75c12e19f" role="64">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/e924c5f09f24436b895ca006503b5e22" role="64">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/01031306ed5e46a1b6ae02fd42ff0972" role="63">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <accessible description="" name="Application" parent="/01031306ed5e46a1b6ae02fd42ff0972" reference="/238101c6cc154056a8d8d6d53b66cf7e" role="34">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="" parent="/01031306ed5e46a1b6ae02fd42ff0972" reference="/0c7709c9fc154fd0b793efb4a15caf96" role="50">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="Activity Indicator" parent="/01031306ed5e46a1b6ae02fd42ff0972" reference="/9a624ccd6eda45949a6b90676eb3ac1f" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/afed1bfaac984206935ed9fe067c760d" role="63">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <accessible description="Go back one page" name="Back" parent="/afed1bfaac984206935ed9fe067c760d" reference="/acabc576fb8c418da7c174f3570b82b6" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="Go forwards one page" name="Forward" parent="/afed1bfaac984206935ed9fe067c760d" reference="/d713c536c7f943009457a6bbceee86d0" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="" parent="/afed1bfaac984206935ed9fe067c760d" reference="/c4d1fe1e058a4a5bac9ecb2a06b8da42" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="Reload current page" name="Reload" parent="/afed1bfaac984206935ed9fe067c760d" reference="/293a96c80cb2409e9db09f450c5bb6eb" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="Stop loading this page" name="Stop" parent="/afed1bfaac984206935ed9fe067c760d" reference="/6d3880df16e5424caba26f52cb8a3373" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="chrome://ubufox/content/startpage.html" name="Home" parent="/afed1bfaac984206935ed9fe067c760d" reference="/5617423cf45e424cb7bb91f38c1dcdaa" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="Location" parent="/afed1bfaac984206935ed9fe067c760d" reference="/3e7a42b272204521b670f5b514fc0964" role="76">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="Search using Google" parent="/afed1bfaac984206935ed9fe067c760d" reference="/33834f7427fb442882d2581ed5429b3a" role="76">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/4cb62048e5e647279cc44501323e3186" role="63">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <accessible description="" name="Smart Bookmarks" parent="/4cb62048e5e647279cc44501323e3186" reference="/d2db6cc2e2a243cab4bcec7864e55299" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="Getting Started" parent="/4cb62048e5e647279cc44501323e3186" reference="/aa000f984a7d43db8ac45d5701eef39f" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="Latest Headlines" parent="/4cb62048e5e647279cc44501323e3186" reference="/7b1bbdd9b2ca409fa2c76d6da2d6e986" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/80cae36920024244878b31222193ece2" role="39">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <accessible description="" name="Google Reader" parent="/80cae36920024244878b31222193ece2" reference="/17631ebf23154d76843415f789dc087e" role="64">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="" parent="/80cae36920024244878b31222193ece2" reference="/be0794f323b54bf08ab9b9ce7e587b32" role="33">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="" parent="/80cae36920024244878b31222193ece2" reference="/98033bd5f113485dae22a994b6c21b5f" role="38">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="" parent="/80cae36920024244878b31222193ece2" reference="/4edef0d82f7449209cd3c9825da94e9a" role="49">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="" parent="/80cae36920024244878b31222193ece2" reference="/fd150750f0f64c11a489e372ff0d874a" role="49">
-                                       <interface name="Accessible"/>
-                                       <interface name="Component"/>
-                                       <accessible description="" name="Google Reader" parent="/fd150750f0f64c11a489e372ff0d874a" reference="/cffe9dc528e841458fbf23691856413c" role="28">
-                                               <interface name="Accessible"/>
-                                               <interface name="Action"/>
-                                               <interface name="Component"/>
-                                               <accessible description="" name="Google Reader" parent="/cffe9dc528e841458fbf23691856413c" reference="/31a96c6ca7184eb89588b14195ab02a0" role="82">
-                                                       <interface name="Accessible"/>
-                                                       <interface name="Document"/>
-                                                       <interface name="EditableText"/>
-                                                       <interface name="Text"/>
-                                                       <interface name="Collection"/>
-                                                       <interface name="Component"/>
-                                                       <interface name="Hypertext"/>
-                                                       <accessible description="" name="Click here for ARIA enhanced Google Reader." parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/0201d9e464aa4e5a965c9b2c223cec39" role="88">
-                                                               <interface name="Accessible"/>
-                                                       </accessible>
-                                                       <accessible description="" name="" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/c0bcad5264d8407c9156747d4d954e75" role="85">
-                                                               <interface name="Accessible"/>
-                                                       </accessible>
-                                                       <accessible description="" name="" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/196a96e8f81546979078b7736abb4418" role="85">
-                                                               <interface name="Accessible"/>
-                                                       </accessible>
-                                                       <accessible description="" name="" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/cd41550f5aed4bf9b5ce3e1d5a683e54" role="85">
-                                                               <interface name="Accessible"/>
-                                                       </accessible>
-                                                       <accessible description="" name="Google Reader" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/0b0d64e2fe02431c88a1da412d8dc010" role="88">
-                                                               <interface name="Accessible"/>
-                                                       </accessible>
-                                                       <accessible description="" name="" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/dfeaa10bbaea467f8f46b39d276f106e" role="61">
-                                                               <interface name="Accessible"/>
-                                                       </accessible>
-                                                       <accessible description="" name="" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/a61783ec55284238a585306ccce12540" role="85">
-                                                               <interface name="Accessible"/>
-                                                       </accessible>
-                                                       <accessible description="" name="" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/6111c8f600b045489e05fec01220349e" role="85">
-                                                               <interface name="Accessible"/>
-                                                               <interface name="EditableText"/>
-                                                               <interface name="Text"/>
-                                                               <interface name="Hyperlink"/>
-                                                               <interface name="Component"/>
-                                                               <interface name="Hypertext"/>
-                                                               <accessible description="" name="" parent="/6111c8f600b045489e05fec01220349e" reference="/d0609e68b5bd4506854aff4ff9fdf3e6" role="85">
-                                                                       <interface name="Accessible"/>
-                                                               </accessible>
-                                                               <accessible description="" name="" parent="/6111c8f600b045489e05fec01220349e" reference="/fa1004781e4043458fed61ba6f937fc8" role="85">
-                                                                       <interface name="Accessible"/>
-                                                               </accessible>
-                                                               <accessible description="" name="" parent="/6111c8f600b045489e05fec01220349e" reference="/154fa6e828404875bc9a88f9ae732e3c" role="85">
-                                                                       <interface name="Accessible"/>
-                                                                       <interface name="EditableText"/>
-                                                                       <interface name="Text"/>
-                                                                       <interface name="Hyperlink"/>
-                                                                       <interface name="Component"/>
-                                                                       <interface name="Hypertext"/>
-                                                                       <accessible description="" name="" parent="/154fa6e828404875bc9a88f9ae732e3c" reference="/de35bd9373a94be2bad26e0d6ea5740f" role="55">
-                                                                               <interface name="Accessible"/>
-                                                                       </accessible>
-                                                                       <accessible description="" name="" parent="/154fa6e828404875bc9a88f9ae732e3c" reference="/2833e734b1ac4e43a9475ccfec58dc5b" role="85">
-                                                                               <interface name="Accessible"/>
-                                                                               <interface name="EditableText"/>
-                                                                               <interface name="Text"/>
-                                                                               <interface name="Hyperlink"/>
-                                                                               <interface name="Component"/>
-                                                                               <interface name="Hypertext"/>
-                                                                               <accessible description="" name="" parent="/2833e734b1ac4e43a9475ccfec58dc5b" reference="/145ca33983f34fbba1c149245e9ad7de" role="85">
-                                                                                       <interface name="Accessible"/>
-                                                                                       <interface name="EditableText"/>
-                                                                                       <interface name="Text"/>
-                                                                                       <interface name="Hyperlink"/>
-                                                                                       <interface name="Component"/>
-                                                                                       <interface name="Hypertext"/>
-                                                                                       <accessible description="" name="" parent="/145ca33983f34fbba1c149245e9ad7de" reference="/e9f3512ee2954442970828dd850bd42d" role="85">
-                                                                                               <interface name="Accessible"/>
-                                                                                               <interface name="EditableText"/>
-                                                                                               <interface name="Text"/>
-                                                                                               <interface name="Hyperlink"/>
-                                                                                               <interface name="Component"/>
-                                                                                               <interface name="Hypertext"/>
-                                                                                               <accessible description="" name="" parent="/e9f3512ee2954442970828dd850bd42d" reference="/76ace448d79248c0810cb0835add3d5d" role="55">
-                                                                                                       <interface name="Accessible"/>
-                                                                                               </accessible>
-                                                                                               <accessible description="" name="" parent="/e9f3512ee2954442970828dd850bd42d" reference="/4832fa4965204fb5ac6c50de4d2e0fbf" role="55">
-                                                                                                       <interface name="Accessible"/>
-                                                                                                       <interface name="Table"/>
-                                                                                                       <interface name="Hyperlink"/>
-                                                                                                       <interface name="Component"/>
-                                                                                                       <accessible description="" name="" parent="/4832fa4965204fb5ac6c50de4d2e0fbf" reference="/091125105a3240baa59fb5d2118ced41" role="56">
-                                                                                                               <interface name="Accessible"/>
-                                                                                                               <interface name="EditableText"/>
-                                                                                                               <interface name="Text"/>
-                                                                                                               <interface name="Component"/>
-                                                                                                               <interface name="Hypertext"/>
-                                                                                                               <accessible description="" name="" parent="/091125105a3240baa59fb5d2118ced41" reference="/4f64e2dca33b4c5f80720e1dc0973777" role="85">
-                                                                                                                       <interface name="Accessible"/>
-                                                                                                                       <interface name="EditableText"/>
-                                                                                                                       <interface name="Text"/>
-                                                                                                                       <interface name="Hyperlink"/>
-                                                                                                                       <interface name="Component"/>
-                                                                                                                       <interface name="Hypertext"/>
-                                                                                                                       <accessible description="" name="" parent="/4f64e2dca33b4c5f80720e1dc0973777" reference="/3cfd49bf007c4c6fb443a6abb7b26ce0" role="85">
-                                                                                                                               <interface name="Accessible"/>
-                                                                                                                       </accessible>
-                                                                                                                       <accessible description="" name="" parent="/4f64e2dca33b4c5f80720e1dc0973777" reference="/0285c1ef52314814a1fbe019a9c57db6" role="61">
-                                                                                                                               <interface name="Accessible"/>
-                                                                                                                       </accessible>
-                                                                                                                       <accessible description="" name="Google News" parent="/4f64e2dca33b4c5f80720e1dc0973777" reference="/2cb87e9a10db41e3acd1dc7e85ed0983" role="88">
-                                                                                                                               <interface name="Accessible"/>
-                                                                                                                       </accessible>
-                                                                                                                       <accessible description="" name="" parent="/4f64e2dca33b4c5f80720e1dc0973777" reference="/36be829e8e9f453e8889c3bc974b9a86" role="85">
-                                                                                                                               <interface name="Accessible"/>
-                                                                                                                               <interface name="EditableText"/>
-                                                                                                                               <interface name="Text"/>
-                                                                                                                               <interface name="Hyperlink"/>
-                                                                                                                               <interface name="Component"/>
-                                                                                                                               <interface name="Hypertext"/>
-                                                                                                                               <accessible description="" name="" parent="/36be829e8e9f453e8889c3bc974b9a86" reference="/50ccc63252834010946e62c70e9faa01" role="85">
-                                                                                                                                       <interface name="Accessible"/>
-                                                                                                                                       <interface name="EditableText"/>
-                                                                                                                                       <interface name="Text"/>
-                                                                                                                                       <interface name="Hyperlink"/>
-                                                                                                                                       <interface name="Component"/>
-                                                                                                                                       <interface name="Hypertext"/>
-                                                                                                                               </accessible>
-                                                                                                                               <accessible description="" name="" parent="/36be829e8e9f453e8889c3bc974b9a86" reference="/d1890cce80aa4dd4b58a492667a55bd4" role="85">
-                                                                                                                                       <interface name="Accessible"/>
-                                                                                                                                       <interface name="EditableText"/>
-                                                                                                                                       <interface name="Text"/>
-                                                                                                                                       <interface name="Hyperlink"/>
-                                                                                                                                       <interface name="Component"/>
-                                                                                                                                       <interface name="Hypertext"/>
-                                                                                                                                       <accessible description="" name="Reader and ARIA: A new way to read" parent="/d1890cce80aa4dd4b58a492667a55bd4" reference="/974bc71ed3424976a40a6e9434053abd" role="88">
-                                                                                                                                               <interface name="Accessible"/>
-                                                                                                                                               <interface name="Action"/>
-                                                                                                                                               <interface name="EditableText"/>
-                                                                                                                                               <interface name="Text"/>
-                                                                                                                                               <interface name="Hyperlink"/>
-                                                                                                                                               <interface name="Component"/>
-                                                                                                                                               <interface name="Hypertext"/>
-                                                                                                                                       </accessible>
-                                                                                                                               </accessible>
-                                                                                                                               <accessible description="" name="" parent="/36be829e8e9f453e8889c3bc974b9a86" reference="/ed0d717a265a434397620314fb41a912" role="85">
-                                                                                                                                       <interface name="Accessible"/>
-                                                                                                                                       <interface name="EditableText"/>
-                                                                                                                                       <interface name="Text"/>
-                                                                                                                                       <interface name="Hyperlink"/>
-                                                                                                                                       <interface name="Component"/>
-                                                                                                                                       <interface name="Hypertext"/>
-                                                                                                                                       <accessible description="" name="Official Google Reader Blog" parent="/ed0d717a265a434397620314fb41a912" reference="/59c2db04618141deb2b5ceece43a9f6b" role="88">
-                                                                                                                                               <interface name="Accessible"/>
-                                                                                                                                               <interface name="Action"/>
-                                                                                                                                               <interface name="EditableText"/>
-                                                                                                                                               <interface name="Text"/>
-                                                                                                                                               <interface name="Hyperlink"/>
-                                                                                                                                               <interface name="Component"/>
-                                                                                                                                               <interface name="Hypertext"/>
-                                                                                                                                       </accessible>
-                                                                                                                               </accessible>
-                                                                                                                               <accessible description="" name="" parent="/36be829e8e9f453e8889c3bc974b9a86" reference="/e9b508f12c084a05ab112683eab845f6" role="85">
-                                                                                                                                       <interface name="Accessible"/>
-                                                                                                                               </accessible>
-                                                                                                                       </accessible>
-                                                                                                               </accessible>
-                                                                                                       </accessible>
-                                                                                                       <accessible description="" name="" parent="/4832fa4965204fb5ac6c50de4d2e0fbf" reference="/6de6237a06dc46188d4c330e748a8773" role="56">
-                                                                                                               <interface name="Accessible"/>
-                                                                                                       </accessible>
-                                                                                               </accessible>
-                                                                                       </accessible>
-                                                                                       <accessible description="" name="" parent="/145ca33983f34fbba1c149245e9ad7de" reference="/8ca4f981ab184b2a8c61b6ccba0816cb" role="85">
-                                                                                               <interface name="Accessible"/>
-                                                                                               <interface name="EditableText"/>
-                                                                                               <interface name="Text"/>
-                                                                                               <interface name="Hyperlink"/>
-                                                                                               <interface name="Component"/>
-                                                                                               <interface name="Hypertext"/>
-                                                                                               <accessible description="" name="Google Reader Blog" parent="/8ca4f981ab184b2a8c61b6ccba0816cb" reference="/d77ae2f3d889425190db70e8d7b26e26" role="88">
-                                                                                                       <interface name="Accessible"/>
-                                                                                               </accessible>
-                                                                                               <accessible description="" name="Discuss" parent="/8ca4f981ab184b2a8c61b6ccba0816cb" reference="/6cb6d67c8af349b5be7d2e74c2ce1919" role="88">
-                                                                                                       <interface name="Accessible"/>
-                                                                                               </accessible>
-                                                                                               <accessible description="" name="Privacy Policy" parent="/8ca4f981ab184b2a8c61b6ccba0816cb" reference="/f481eaf34698408b8cee9743035a1492" role="88">
-                                                                                                       <interface name="Accessible"/>
-                                                                                               </accessible>
-                                                                                               <accessible description="" name="Help" parent="/8ca4f981ab184b2a8c61b6ccba0816cb" reference="/0d02a2c8b5af43d3afd49761f8aad175" role="88">
-                                                                                                       <interface name="Accessible"/>
-                                                                                               </accessible>
-                                                                                               <accessible description="" name="" parent="/8ca4f981ab184b2a8c61b6ccba0816cb" reference="/f21c0b815ef44a0e86f8036a6c07be67" role="85">
-                                                                                                       <interface name="Accessible"/>
-                                                                                                       <interface name="EditableText"/>
-                                                                                                       <interface name="Text"/>
-                                                                                                       <interface name="Hyperlink"/>
-                                                                                                       <interface name="Component"/>
-                                                                                                       <interface name="Hypertext"/>
-                                                                                               </accessible>
-                                                                                       </accessible>
-                                                                               </accessible>
-                                                                       </accessible>
-                                                               </accessible>
-                                                       </accessible>
-                                                       <accessible description="" name="" parent="/31a96c6ca7184eb89588b14195ab02a0" reference="/369d55daee3d4ceab73bce8c9272b8bd" role="85">
-                                                               <interface name="Accessible"/>
-                                                               <interface name="EditableText"/>
-                                                               <interface name="Text"/>
-                                                               <interface name="Hyperlink"/>
-                                                               <interface name="Component"/>
-                                                               <interface name="Hypertext"/>
-                                                               <accessible description="" name="" parent="/369d55daee3d4ceab73bce8c9272b8bd" reference="/24b9a2bb46654a11bcc5d556fc8f8601" role="27">
-                                                                       <interface name="Accessible"/>
-                                                                       <interface name="Image"/>
-                                                                       <interface name="Hyperlink"/>
-                                                                       <interface name="Component"/>
-                                                               </accessible>
-                                                               <accessible description="" name="" parent="/369d55daee3d4ceab73bce8c9272b8bd" reference="/0dd077f7fcd64f5397b90d49011b9b42" role="27">
-                                                                       <interface name="Accessible"/>
-                                                                       <interface name="Image"/>
-                                                                       <interface name="Hyperlink"/>
-                                                                       <interface name="Component"/>
-                                                               </accessible>
-                                                               <accessible description="" name="" parent="/369d55daee3d4ceab73bce8c9272b8bd" reference="/e61ed70672824ad4aa4db581a8214422" role="27">
-                                                                       <interface name="Accessible"/>
-                                                                       <interface name="Image"/>
-                                                                       <interface name="Hyperlink"/>
-                                                                       <interface name="Component"/>
-                                                               </accessible>
-                                                               <accessible description="" name="" parent="/369d55daee3d4ceab73bce8c9272b8bd" reference="/bfd75999f02d4eed903b51210ac75482" role="27">
-                                                                       <interface name="Accessible"/>
-                                                                       <interface name="Image"/>
-                                                                       <interface name="Hyperlink"/>
-                                                                       <interface name="Component"/>
-                                                               </accessible>
-                                                               <accessible description="" name="" parent="/369d55daee3d4ceab73bce8c9272b8bd" reference="/20f85aefbfe3404cafd403532b4b3701" role="27">
-                                                                       <interface name="Accessible"/>
-                                                               </accessible>
-                                                       </accessible>
-                                               </accessible>
-                                       </accessible>
-                               </accessible>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/021ea00d3e834540b4fe32b87deb78f3" role="33">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <interface name="Selection"/>
-                       </accessible>
-                       <accessible description="" name="" parent="/48f09fac5b8644e9bbe93a4748e49ac3" reference="/ee6e534a8890407c812f7e22e532cb8c" role="54">
-                               <interface name="Accessible"/>
-                               <interface name="Component"/>
-                               <accessible description="" name="Done" parent="/ee6e534a8890407c812f7e22e532cb8c" reference="/96ca24949d024cdba4ace74d68628b1b" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                               <accessible description="" name="" parent="/ee6e534a8890407c812f7e22e532cb8c" reference="/411f3a275f99473086caa7abb0f4c2cc" role="43">
-                                       <interface name="Accessible"/>
-                               </accessible>
-                       </accessible>
-               </accessible>
-       </accessible>
-       <accessible description="" name="gnome-terminal" parent="/7d081ab722dd408f84211702cc675993" reference="/15e53f8b19354205a39538caceeda5a5" role="75">
-               <interface name="Accessible"/>
-               <interface name="Application"/>
-               <accessible description="" name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" parent="/15e53f8b19354205a39538caceeda5a5" reference="/d81c3928d29642f5a5a1490f727da03c" role="23">
-                       <interface name="Accessible"/>
-               </accessible>
-       </accessible>
-</accessible>
index d45a2ef..fec5f99 100644 (file)
@@ -5,18 +5,16 @@
 
 static AtkObjectClass *atk_object_parent_class = NULL;
 
-
-//add/remove child to/from array of parent(for internal use)
-static void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child)
+void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child)
 {
     g_ptr_array_add(parent->children, child);
-    g_object_ref(child);
+    g_object_ref_sink(child);
     
     g_signal_emit_by_name(parent, "children-changed::add",
         parent->children->len - 1, child);
 }
 
-static void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child)
+void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child)
 {
     gint i;
     for(i = parent->children->len - 1; i >= 0; i--)
index 6007e3c..04b0c78 100644 (file)
@@ -28,4 +28,8 @@ struct _MyAtkObjectClass
 
 GType my_atk_object_get_type();
 
+void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child);
+
+void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child);
+
 #endif /*MY_ATK_OBJECT_H*/
diff --git a/tests/makeTree.py b/tests/makeTree.py
deleted file mode 100644 (file)
index 41395c2..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-import sys
-import pyatspi
-import uuid
-
-from xml.dom import minidom
-
-INTERFACES = [
-"Accessible",
-"Desktop",
-"Image",
-"StreamableContent",
-"Action",
-"Document",
-"Table",
-"Application",
-"EditableText",
-"MatchRule",
-"Text",
-"Collection",
-"Hyperlink",
-"Value",
-"Component",
-"Hypertext",
-"Selection",
-]
-
-def getChild(accessible, i):
-       try:
-               child = accessible.getChildAtIndex(i)
-       except LookupError:
-               child = None
-       return child
-
-def createNode(accessible, parentRef, parentElement):
-       e = minidom.Element("accessible")
-       reference = '/' + str(uuid.uuid4()).replace('-', '')
-
-       e.attributes["reference"] = reference
-       e.attributes["parent"] = parentRef
-       e.attributes["name"] = accessible.name
-       e.attributes["role"] = str(accessible.getRole())
-       e.attributes["description"] = accessible.description
-
-       for i in INTERFACES:
-               query = getattr(accessible, "query" + i)
-               try:
-                       query()
-                       itf = minidom.Element("interface")
-                       itf.attributes["name"] = i
-                       e.appendChild(itf)
-               except NotImplementedError:
-                       pass
-               except LookupError:
-                       pass
-
-       try:
-               count = accessible.childCount
-       except LookupError:
-               count = 0
-       
-       for i in range(count):
-               child = getChild(accessible, i)
-               if child is not None:
-                       createNode(child, reference, e)
-
-       parentElement.appendChild(e)
-
-def main(argv):
-       filename = argv[1]
-       doc = minidom.Document()
-       desk = pyatspi.Registry.getDesktop(0)
-       createNode(desk, '/', doc)
-       
-       file = open(filename, 'w')
-       file.write(doc.toprettyxml())
-       file.close()
-
-if __name__ == "__main__":
-       sys.exit(main(sys.argv))
diff --git a/tests/testClient.py b/tests/testClient.py
deleted file mode 100644 (file)
index ebf53c8..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-import sys
-import gobject
-import dbus
-from dbus.mainloop.glib import DBusGMainLoop
-
-from xml.dom import minidom
-
-from accessible_cache import AccessibleCache
-
-DBusGMainLoop(set_as_default=True)
-
-def createNode(accessible, parentRef, parentElement):
-       e = minidom.Element("accessible")
-
-       e.attributes["reference"] = accessible.path
-       try:
-               e.attributes["parent"] = accessible.parent.path
-       except:
-               pass
-       e.attributes["name"] = accessible.name
-       e.attributes["role"] = str(int(accessible.role))
-       e.attributes["description"] = accessible.description
-
-       for i in accessible.interfaces:
-               itf = minidom.Element("interface")
-               itf.attributes["name"] = i
-               e.appendChild(itf)
-
-       for i in range(0, accessible.numChildren):
-               createNode(accessible.getChild(i), accessible.path, e)
-
-       parentElement.appendChild(e)
-
-def main(argv):
-       filename = argv[1]
-       bus = dbus.SessionBus()
-       
-       loop = gobject.MainLoop()
-
-       cache = AccessibleCache(bus, 'test.atspi.tree', '/org/freedesktop/atspi/tree')
-       root = cache.getRootAccessible()
-
-       doc = minidom.Document()
-       createNode(root, '/', doc)
-       
-       file = open(filename, 'w')
-       file.write(doc.toprettyxml())
-       file.close()
-
-if __name__ == '__main__':
-       sys.exit(main(sys.argv))
diff --git a/tests/testServer.py b/tests/testServer.py
deleted file mode 100644 (file)
index 7c360a8..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-import sys
-import gobject
-import dbus
-from dbus.mainloop.glib import DBusGMainLoop
-
-from xml.dom import minidom
-
-from AccessibleTree import AccessibleTree
-
-DBusGMainLoop(set_as_default=True)
-
-def getChildrenByName(node, name):
-       return [child for child in node.childNodes if child.nodeType == child.ELEMENT_NODE and child.nodeName == name]
-
-def registerObject(tree, parent, node):
-       reference = node.getAttribute('reference').encode('ASCII')
-       name = node.getAttribute('name').encode('ASCII')
-       role = node.getAttribute('role').encode('ASCII')
-       description = node.getAttribute('description').encode('ASCII')
-
-       interfacen = getChildrenByName(node, 'interface')
-       interfaces = [itf.getAttribute('name').encode('ASCII') for itf in interfacen]
-
-       childrenn = getChildrenByName(node, 'accessible')
-       children = [cld.getAttribute('reference').encode('ASCII') for cld in childrenn]
-
-       object = (reference, parent, children, interfaces, name, int(role), description)
-       tree.updateObject(reference, object)
-
-       for child in childrenn:
-               registerObject(tree, reference, child)
-
-def main(argv):
-       filename = argv[1]
-       bus = dbus.SessionBus()
-
-       loop = gobject.MainLoop()
-
-       bus.request_name('test.atspi.tree', 0)
-
-       tree = AccessibleTree(bus, '/org/freedesktop/atspi/tree')
-       doc = minidom.parse(filename)
-       node = doc.firstChild
-       tree.setRoot(node.getAttribute('reference').encode('ASCII'))
-
-       registerObject(tree, '/', node)
-
-       try:
-               loop.run()
-       except KeyboardInterrupt:
-               loop.quit()
-
-if __name__ == '__main__':
-       sys.exit(main(sys.argv))
diff --git a/tests/testapps/object-app.c b/tests/testapps/object-app.c
deleted file mode 100644 (file)
index 85d4f2c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <gmodule.h>
-#include <atk/atk.h>
-#include <my-atk.h>
-
-static AtkObject *root_accessible;
-
-G_MODULE_EXPORT void
-test_init (void)
-{
-  root_accessible = (AtkObject *) g_object_new(MY_TYPE_ATK_OBJECT, NULL);
-
-  atk_object_set_name(root_accessible, "Root Accessible");
-  atk_object_set_role(root_accessible, ATK_ROLE_ACCEL_LABEL);
-  atk_object_set_description(root_accessible, "A root object for the test tree"); 
-}
-
-G_MODULE_EXPORT AtkObject *
-test_get_root (void)
-{
-  return root_accessible;
-}
diff --git a/tests/testrunner.py b/tests/testrunner.py
new file mode 100644 (file)
index 0000000..5684c75
--- /dev/null
@@ -0,0 +1,36 @@
+import sys
+import unittest
+import clients
+
+from optparse import OptionParser
+
+parser = OptionParser()
+parser.add_option("-d", "--testdata", dest="testdata", help="Location of test data directory")
+parser.add_option("-a", "--atspilib", dest="atspilib", help="Location of atk to atspi adaptor")
+parser.add_option("-t", "--testmodules", dest="testmodules", help="Location of test application libraries")
+parser.add_option("-r", "--testapp", dest="testapp", help="Location of test application executable")
+parser.add_option("-b", "--busname", dest="busname", help="D-Bus name of test application")
+parser.add_option("-o", "--objectpath", dest="objectpath", help="Object path of test applicaiton tree interface")
+
+optionvars = ["testdata",
+               "atspilib",
+               "testmodules",
+               "testapp",
+               "busname",
+               "objectpath"]
+
+def set_data(options, name):
+       val = getattr(options, name)
+       if val is not None:
+               setattr(clients.testutil, name, val)
+
+def main(argv):
+       (options, args) = parser.parse_args()
+       [set_data(options, name) for name in optionvars]
+
+       runner = unittest.TextTestRunner()
+       testsuite = unittest.defaultTestLoader.loadTestsFromModule(clients)
+       runner.run(testsuite)
+
+if __name__=="__main__":
+       sys.exit(main(sys.argv))