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)
registryd/Makefile
atk-adaptor/Makefile
tests/dummyatk/Makefile
- tests/testapps/Makefile])
+ tests/clients/Makefile
+ tests/apps/Makefile])
AC_OUTPUT
+++ /dev/null
-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
-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
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
--- /dev/null
+/*
+ * 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;
+}
--- /dev/null
+/*
+ * 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*/
#include <atk/atk.h>
G_MODULE_EXPORT void
-test_init (void)
+test_init (int argc, char *argv[])
{
;
}
--- /dev/null
+#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;
+}
((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;
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}
};
/*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);
--- /dev/null
+EXTRA_DIST = \
+ accessibleobject.py \
+ __init__.py \
+ object-test-stage1.xml \
+ testutil.py
--- /dev/null
+
+from accessibleobject import AccessibleObjectTestCase
+import testutil
+
+del accessibleobject
--- /dev/null
+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")
--- /dev/null
+<?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>
--- /dev/null
+#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])
+++ /dev/null
-<?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>
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--)
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*/
+++ /dev/null
-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))
+++ /dev/null
-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))
+++ /dev/null
-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))
+++ /dev/null
-#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;
-}
--- /dev/null
+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))