diff options
author | Mark Doffman <mdoff@altair-voyager.(none)> | 2009-10-07 09:40:11 +0100 |
---|---|---|
committer | Mark Doffman <mdoff@altair-voyager.(none)> | 2009-10-07 09:40:11 +0100 |
commit | 590c185517181d7efc05875084fc8454cc539ee1 (patch) | |
tree | 865483949db0005367fed7704c3c8cd21064a926 /tests | |
parent | 9eb5bf8c3ebea61c1b1907738bc6cc193839326c (diff) | |
download | at-spi2-atk-590c185517181d7efc05875084fc8454cc539ee1.tar.gz |
2009-07-10 Mark Doffman <mark.doffman@codethink.co.uk>
Remove pyatspi and the pyatspi tests that have been moved
out into a separate repository.
Diffstat (limited to 'tests')
66 files changed, 0 insertions, 8364 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am deleted file mode 100644 index 8daea17..0000000 --- a/tests/Makefile.am +++ /dev/null @@ -1,11 +0,0 @@ -SUBDIRS = dummyatk apps data pyatspi cspi - -#TESTS=testrunner.py -TESTS_ENVIRONMENT = PYTHONPATH=$(abs_top_srcdir)/python \ - ATSPI_INTROSPECTION_PATH=$(top_srcdir)/xml/introspection \ - TEST_DATA_DIRECTORY=$(abs_top_srcdir)/tests/data \ - TEST_ATSPI_LIBRARY=$(abs_top_srcdir)/atk-adaptor/.libs/libspiatk.so \ - TEST_MODULES_DIRECTORY=$(abs_top_srcdir)/tests/apps/.libs \ - TEST_APPLICATION=$(abs_top_srcdir)/tests/apps/test-application - -CLEANFILES = *.pyc diff --git a/tests/apps/Makefile.am b/tests/apps/Makefile.am deleted file mode 100644 index 12a3257..0000000 --- a/tests/apps/Makefile.am +++ /dev/null @@ -1,47 +0,0 @@ -check_PROGRAMS = test-application -check_LTLIBRARIES = libnoopapp.la \ - libaccessibleapp.la \ - libcomponentapp.la \ - libactionapp.la \ - librelationapp.la - -test_application_CFLAGS = $(DBUS_GLIB_CFLAGS) \ - $(ATK_CFLAGS) \ - $(GMODULE_CFLAGS) \ - -I$(top_srcdir) - -test_application_LDADD = $(DBUS_GLIB_LIBS) \ - $(GMODULE_LIBS) \ - $(ATK_LIBS) - -test_application_SOURCES = test-application.c - - -TEST_APP_CFLAGS = $(ATK_CFLAGS) $(GMODULE_CFLAGS) -I$(top_srcdir) -I$(top_srcdir)/tests/dummyatk/ -TEST_APP_LDFLAGS = -no-undefined -module -avoid-version -rpath /a/fake/path -TEST_APP_LIBADD = $(ATK_LIBS) $(GMODULE_LIBS) $(top_builddir)/tests/dummyatk/libdummyatk.la - -libnoopapp_la_CFLAGS = $(TEST_APP_CFLAGS) -libnoopapp_la_LDFLAGS = $(TEST_APP_LDFLAGS) -libnoopapp_la_LIBADD = $(TEST_APP_LIBADD) -libnoopapp_la_SOURCES = noop-app.c - -libaccessibleapp_la_CFLAGS = $(TEST_APP_CFLAGS) $(LIB_XML_CFLAGS) -libaccessibleapp_la_LDFLAGS = $(TEST_APP_LDFLAGS) -libaccessibleapp_la_LIBADD = $(TEST_APP_LIBADD) $(LIB_XML_LIBS) -libaccessibleapp_la_SOURCES = accessible-app.c atk-object-xml-loader.c atk-object-xml-loader.h - -libcomponentapp_la_CFLAGS = $(TEST_APP_CFLAGS) -libcomponentapp_la_LDFLAGS = $(TEST_APP_LDFLAGS) -libcomponentapp_la_LIBADD = $(TEST_APP_LIBADD) -libcomponentapp_la_SOURCES = component-app.c - -libactionapp_la_CFLAGS = $(TEST_APP_CFLAGS) -libactionapp_la_LDFLAGS = $(TEST_APP_LDFLAGS) -libactionapp_la_LIBADD = $(TEST_APP_LIBADD) -libactionapp_la_SOURCES = action-app.c - -librelationapp_la_CFLAGS = $(TEST_APP_CFLAGS) -librelationapp_la_LDFLAGS = $(TEST_APP_LDFLAGS) -librelationapp_la_LIBADD = $(TEST_APP_LIBADD) -librelationapp_la_SOURCES = relation-app.c diff --git a/tests/apps/accessible-app.c b/tests/apps/accessible-app.c deleted file mode 100644 index 2796bf5..0000000 --- a/tests/apps/accessible-app.c +++ /dev/null @@ -1,57 +0,0 @@ -#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; - -static AtkStateType states[] = -{ - ATK_STATE_MULTI_LINE, - ATK_STATE_MODAL, - ATK_STATE_INDETERMINATE, - ATK_STATE_SUPPORTS_AUTOCOMPLETION, - ATK_STATE_VERTICAL -}; - -#define OBJECT_TEST_1 "accessible-test.xml" - -G_MODULE_EXPORT void -test_init (gchar *path) -{ - AtkStateSet *ss; - 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); - - ss = atk_object_ref_state_set(ATK_OBJECT(root_accessible)); - atk_state_set_add_states(ss, states, 5); - g_object_unref(G_OBJECT(ss)); -} - -G_MODULE_EXPORT void -test_next (int argc, char *argv[]) -{ - ; -} - -G_MODULE_EXPORT void -test_finished (int argc, char *argv[]) -{ - ; -} - -G_MODULE_EXPORT AtkObject * -test_get_root (void) -{ - return root_accessible; -} diff --git a/tests/apps/action-app.c b/tests/apps/action-app.c deleted file mode 100644 index 612cd59..0000000 --- a/tests/apps/action-app.c +++ /dev/null @@ -1,29 +0,0 @@ -#include <gmodule.h> -#include <atk/atk.h> -#include <my-atk.h> - -static AtkObject *root_accessible; - -G_MODULE_EXPORT void -test_init (gchar *path) -{ - root_accessible = g_object_new(MY_TYPE_ATK_ACTION, NULL); -} - -G_MODULE_EXPORT void -test_next (int argc, char *argv[]) -{ - g_print("Moving to next stage\n"); -} - -G_MODULE_EXPORT void -test_finished (int argc, char *argv[]) -{ - g_print("Test has completed\n"); -} - -G_MODULE_EXPORT AtkObject * -test_get_root (void) -{ - return root_accessible; -} diff --git a/tests/apps/atk-object-xml-loader.c b/tests/apps/atk-object-xml-loader.c deleted file mode 100644 index 5fa2354..0000000 --- a/tests/apps/atk-object-xml-loader.c +++ /dev/null @@ -1,95 +0,0 @@ -/* - * 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 deleted file mode 100644 index ce707bd..0000000 --- a/tests/apps/atk-object-xml-loader.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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*/ diff --git a/tests/apps/component-app.c b/tests/apps/component-app.c deleted file mode 100644 index d51e1ac..0000000 --- a/tests/apps/component-app.c +++ /dev/null @@ -1,55 +0,0 @@ -#include <gmodule.h> -#include <atk/atk.h> -#include <my-atk.h> - -static gchar *tdata_path = NULL; - -static AtkComponent *comps[] = {NULL, NULL, NULL}; -static const AtkRectangle extents[] = {{0,0,30,20}, {40,30,30,40}, {0,0,70,70}}; -static const AtkLayer layers[] = {ATK_LAYER_WINDOW, ATK_LAYER_WIDGET, ATK_LAYER_MDI}; -static const guint zorders[] = {0, -100, 100}; -static const gboolean extent_may_changed[] = {TRUE, FALSE, TRUE}; - -G_MODULE_EXPORT void -test_init (gchar *path) -{ - int i; - - if (path == NULL) - g_error("No test data path provided"); - tdata_path = path; - - g_type_init(); - for(i = 0; i < sizeof(comps) / sizeof(comps[0]); i++) - { - MyAtkComponent *mycomp = MY_ATK_COMPONENT(g_object_new(MY_TYPE_ATK_COMPONENT, NULL)); - - mycomp->extent = extents[i]; - mycomp->is_extent_may_changed = extent_may_changed[i]; - mycomp->layer = layers[i]; - mycomp->zorder = zorders[i]; - - comps[i] = ATK_COMPONENT(mycomp); - } - - my_atk_object_add_child(MY_ATK_OBJECT(comps[2]), MY_ATK_OBJECT(comps[0])); - my_atk_object_add_child(MY_ATK_OBJECT(comps[2]), MY_ATK_OBJECT(comps[1])); -} - -G_MODULE_EXPORT void -test_next (int argc, char *argv[]) -{ - g_print("Moving to next stage\n"); -} - -G_MODULE_EXPORT void -test_finished (int argc, char *argv[]) -{ - g_print("Test has completed\n"); -} - -G_MODULE_EXPORT AtkObject * -test_get_root (void) -{ - return ATK_COMPONENT(comps[2]); -} diff --git a/tests/apps/noop-app.c b/tests/apps/noop-app.c deleted file mode 100644 index f2a5f51..0000000 --- a/tests/apps/noop-app.c +++ /dev/null @@ -1,26 +0,0 @@ -#include <gmodule.h> -#include <atk/atk.h> - -G_MODULE_EXPORT void -test_init (int argc, char *argv[]) -{ - ; -} - -G_MODULE_EXPORT void -test_next (int argc, char *argv[]) -{ - ; -} - -G_MODULE_EXPORT void -test_finished (int argc, char *argv[]) -{ - ; -} - -G_MODULE_EXPORT AtkObject * -test_get_root (void) -{ - return NULL; -} diff --git a/tests/apps/relation-app.c b/tests/apps/relation-app.c deleted file mode 100644 index 5734ffe..0000000 --- a/tests/apps/relation-app.c +++ /dev/null @@ -1,90 +0,0 @@ -#include <gmodule.h> -#include <atk/atk.h> -#include <my-atk.h> - -static AtkObject *root_accessible; - -G_MODULE_EXPORT void -test_init (gchar *path) -{ - AtkObject *r1, *r2, *r3; - AtkObject *m1, *m2, *m3; - AtkRelationSet *rset; - AtkRelation *rel; - AtkObject *rls[3]; - - root_accessible = g_object_new(MY_TYPE_ATK_OBJECT, NULL); - - r1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, - "accessible-name", "r1", - "accessible-description", "", - "accessible-role", ATK_ROLE_INVALID, - NULL)); - my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r1)); - - r2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, - "accessible-name", "r2", - "accessible-description", "", - "accessible-role", ATK_ROLE_INVALID, - NULL)); - my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r2)); - - r3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, - "accessible-name", "r3", - "accessible-description", "", - "accessible-role", ATK_ROLE_INVALID, - NULL)); - my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r3)); - - m1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, - "accessible-name", "m1", - "accessible-description", "", - "accessible-role", ATK_ROLE_INVALID, - NULL)); - my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m1)); - - m2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, - "accessible-name", "m2", - "accessible-description", "", - "accessible-role", ATK_ROLE_INVALID, - NULL)); - my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m2)); - - m3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, - "accessible-name", "m3", - "accessible-description", "", - "accessible-role", ATK_ROLE_INVALID, - NULL)); - my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m3)); - - atk_object_add_relationship(root_accessible, ATK_RELATION_EMBEDS, r1); - atk_object_add_relationship(root_accessible, ATK_RELATION_PARENT_WINDOW_OF, r2); - atk_object_add_relationship(root_accessible, ATK_RELATION_DESCRIBED_BY, r3); - - rls[0] = m1; - rls[1] = m2; - rls[2] = m3; - - rset = atk_object_ref_relation_set(root_accessible); - rel = atk_relation_new(rls, 3, ATK_RELATION_POPUP_FOR); - atk_relation_set_add(rset, rel); - g_object_unref(G_OBJECT(rset)); -} - -G_MODULE_EXPORT void -test_next (int argc, char *argv[]) -{ - g_print("Moving to next stage\n"); -} - -G_MODULE_EXPORT void -test_finished (int argc, char *argv[]) -{ - g_print("Test has completed\n"); -} - -G_MODULE_EXPORT AtkObject * -test_get_root (void) -{ - return root_accessible; -} diff --git a/tests/apps/test-application.c b/tests/apps/test-application.c deleted file mode 100644 index 9c0bd3c..0000000 --- a/tests/apps/test-application.c +++ /dev/null @@ -1,286 +0,0 @@ -/* - * AT-SPI - Assistive Technology Service Provider Interface - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * 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. - */ - -/* - * Testing AT-SPI requires both a test application and AT client. - * Test applications are built using the Dummy ATK implementation: MyAtk. - * This file contains the entry point for all test applications. - * Each test is built as a GModule, and this program loads the - * test module, as well as the AT-SPI module. The test module will - * provide its own implementation of atk_get_root, and as such provide - * all the application state for the test. - */ - -#include <stdlib.h> -#include <glib.h> -#include <gmodule.h> -#include <atk/atk.h> -#include <dbus/dbus.h> - -/* The test module, GModule containing interface for an atk-test */ -static GModule *test_module; -static gpointer test_module_get_root; -static gpointer test_module_next; -static gpointer test_module_finished; - -static DBusConnection *dbus_bus; -static GMainLoop *mainloop; - -/* Test module interface */ -/*************************/ - -typedef AtkObject *(*TestModuleGetRoot) (void); - -/* Calls into the test module to get the root atk object */ -static AtkObject * -get_root(void) -{ - return ((TestModuleGetRoot) test_module_get_root)(); -} - -typedef void (*VoidVoid) (void); - -/* Called to move to next stage of test.*/ -static void -next(void) -{ - ((VoidVoid) test_module_next)(); -} - - -/*************************/ - -/* The AtkUtil class is called to find the root accessible and to deal - * with events. Its an incomplete class, its v-table needs to be filled in. - */ -static void -setup_atk_util(void) -{ - AtkUtilClass *klass; - - klass = g_type_class_ref(ATK_TYPE_UTIL); - klass->get_root = get_root; - g_type_class_unref(klass); -} - -typedef void (*GtkModuleInit) (int *argc, char **argv[]); - -/* AT-SPI is a gtk module that must be loaded and initialized */ -static void -load_atspi_module(const char *path, int *argc, char **argv[]) -{ - GModule *bridge; - gpointer init; - - bridge = g_module_open(path, G_MODULE_BIND_LOCAL|G_MODULE_BIND_LAZY); - if (!bridge) - g_error("Couldn't load atk-bridge module : %s\n", g_module_error()); - - if (!g_module_symbol(bridge, "gtk_module_init", &init)) - g_error("Couldn't load symbol \"gtk_module_init\"\n"); - - ((GtkModuleInit) init)(argc, argv); -} - -typedef void (*TestModuleInit) (gchar *path); - -static void -load_test_module(const char *path, const char *tdpath) -{ - gpointer init; - - test_module = g_module_open(path, G_MODULE_BIND_LOCAL|G_MODULE_BIND_LAZY); - if (!test_module) - g_error("Couldn't load test module : %s\n", path); - - if (!g_module_symbol(test_module, "test_init", &init)) - g_error("Couldn't load symbol \"test_init\"\n"); - - if (!g_module_symbol(test_module, "test_get_root", &test_module_get_root)) - g_error("Couldn't load symbol \"test_get_root\"\n"); - - if (!g_module_symbol(test_module, "test_next", &test_module_next)) - g_error("Couldn't load symbol \"test_next\"\n"); - - if (!g_module_symbol(test_module, "test_finished", &test_module_finished)) - g_error("Couldn't load symbol \"test_finished\"\n"); - - ((TestModuleInit) init)((gchar *)tdpath); -} - -static const char* introspection_string = -"<node name=\"/org/codethink/atspi/test\">" -" <interface name=\"org.codethink.atspi.test\">" -" <method name=\"next\"/>" -" <method name=\"finish\"/>" -" <signal name=\"started\"/>" -" </interface>" -"</node>"; - -static DBusHandlerResult -message_handler (DBusConnection *bus, DBusMessage *message, void *user_data) -{ - const char *iface = dbus_message_get_interface (message); - const char *member = dbus_message_get_member (message); - DBusHandlerResult result = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - gboolean exit = FALSE; - - DBusMessage *reply = NULL; - - g_return_val_if_fail(iface != NULL, DBUS_HANDLER_RESULT_NOT_YET_HANDLED); - - if (!strcmp(iface, "org.codethink.atspi.test")) - { - if (!strcmp(member, "next")) - { - next(); - reply = dbus_message_new_method_return (message); - g_assert(reply != NULL); - result = DBUS_HANDLER_RESULT_HANDLED; - } - - if (!strcmp(member, "finish")) - { - ((VoidVoid) test_module_finished)(); - reply = dbus_message_new_method_return (message); - g_assert(reply != NULL); - result = DBUS_HANDLER_RESULT_HANDLED; - exit = TRUE; - } - } - - if (!strcmp(iface, "org.freedesktop.DBus.Introspectable")) - { - if (!strcmp(member, "Introspect")) - { - reply = dbus_message_new_method_return (message); - g_assert(reply != NULL); - dbus_message_append_args(reply, DBUS_TYPE_STRING, &introspection_string, - DBUS_TYPE_INVALID); - result = DBUS_HANDLER_RESULT_HANDLED; - } - } - - if (reply) - { - dbus_connection_send (bus, reply, NULL); - dbus_message_unref (reply); - } - - if (exit == TRUE) - { - dbus_connection_flush(bus); - dbus_connection_unref(bus); - g_main_loop_quit(mainloop); - } - return result; -} - -static DBusObjectPathVTable test_vtable = -{ - NULL, - &message_handler, - NULL, NULL, NULL, NULL -}; - -static void -init_dbus_interface(void) -{ - DBusError error; - - dbus_error_init(&error); - dbus_bus = dbus_bus_get(DBUS_BUS_SESSION, &error); - g_print("\nUnique D-Bus name is: %s\n", dbus_bus_get_unique_name(dbus_bus)); - - if (!dbus_bus) - g_error("Couldn't get the session bus - %s\n", error.message); - - g_assert(dbus_connection_register_object_path(dbus_bus, - "/org/codethink/atspi/test", - &test_vtable, - NULL)); - - dbus_connection_setup_with_g_main(dbus_bus, g_main_context_default()); -} - -static void -send_started_signal(void) -{ - DBusMessage* sig; - DBusMessageIter args; - - sig = dbus_message_new_signal("/org/codethink/atspi/test", "org.codethink.atspi.test", "started"); - g_assert(sig != NULL); - if (!dbus_connection_send(dbus_bus, sig, NULL)) - g_error("Out of memory"); - dbus_connection_flush(dbus_bus); - dbus_message_unref(sig); -} - -/*Command line data*/ -static gchar *tmodule_path = NULL; -static gchar *amodule_path = NULL; -static gchar *tdata_path = NULL; - -static GOptionEntry optentries[] = -{ - {"test-module", 0, 0, G_OPTION_ARG_STRING, &tmodule_path, "Module containing test scenario", NULL}, - {"test-atspi-library", 0, 0, G_OPTION_ARG_STRING, &amodule_path, "Gtk module with atk-atspi adaptor", NULL}, - {"test-data-directory", 0, 0, G_OPTION_ARG_STRING, &tdata_path, "Path to directory of test data", NULL}, - {NULL} -}; - -/* main - * - * Entry point for all test applications. - */ -main(int argc, char *argv[]) -{ - GOptionContext *opt; - GError *err = 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_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, tdata_path); - load_atspi_module(amodule_path, &argc, &argv); - init_dbus_interface(); - send_started_signal(); - - mainloop = g_main_loop_new (NULL, FALSE); - g_main_loop_run (mainloop); - - return 0; -} diff --git a/tests/cspi/Makefile.am b/tests/cspi/Makefile.am deleted file mode 100644 index 316cbe4..0000000 --- a/tests/cspi/Makefile.am +++ /dev/null @@ -1,19 +0,0 @@ -noinst_PROGRAMS = key-listener-test keysynth-test simple-at test-simple - -key_listener_test_SOURCES = key-listener-test.c -keysynth_test_SOURCES = keysynth-test.c -simple_at_SOURCES = simple-at.c -test_simple_SOURCES = test-simple.c - -INCLUDES = -I$(top_srcdir) \ - -I$(top_builddir) \ - $(DBUS_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(GTK_CFLAGS) \ - $(ATK_CFLAGS) \ - $(DBIND_CFLAGS) \ - $(DEBUG_CFLAGS) - -LDADD = $(top_builddir)/common/libspicommon.la \ - $(top_builddir)/cspi/libcspi.la \ - $(TESTS_LIBS) $(X_LIBS) $(XINPUT_LIBS) $(ATK_LIBS) $(GTK_LIBS) $(DBIND_LIBS) diff --git a/tests/cspi/accessible-test.c b/tests/cspi/accessible-test.c deleted file mode 100644 index ab490db..0000000 --- a/tests/cspi/accessible-test.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2008 Codethink Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 <glib.h> -#include <string.h> -#include <stdlib.h> - -typedef struct { - gchar *none; -} AccessibleObjectFixture; - -static void -test_getChildAtIndex (AccessibleObjectFixture *fix, gconstpointer test_data) -{ - return; -} - -int -main (int argc, char *argv[]) -{ - return 0; -} diff --git a/tests/cspi/classy-test-suite.c b/tests/cspi/classy-test-suite.c deleted file mode 100644 index dd22e7a..0000000 --- a/tests/cspi/classy-test-suite.c +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (C) 2008 Codethink Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 <glib-object.h> -#include <string.h> -#include <stdio.h> - -#include "classy-test.h" -#include "classy-test-suite.h" - -/*---------------------------------------------------------------------------*/ - -static gboolean -run_test_app(gchar *module_name, gchar *dbus_name) -{ - gboolean result; - GPid pid; - GError *err = NULL; - - const gchar *test_data_directory; - const gchar *test_modules_directory; - const gchar *test_atspi_library; - const gchar *test_application; - gchar *test_module; - gchar *command_line; - - test_data_directory = g_getenv("TEST_DATA_DIRECTORY"); - test_modules_directory = g_getenv("TEST_MODULES_DIRECTORY"); - test_atspi_library = g_getenv("TEST_ATSPI_LIBRARY"); - test_application = g_getenv("TEST_APPLICATION"); - - test_module = g_build_path("/", test_modules_directory, module_name, NULL); - - command_line = g_build_path(" ", test_application, - "--atspi-dbus-name", dbus_name, - "--test-atspi-library", test_atspi_library, - "--test-module", test_module, - "--test-data-directory", test_data_directory, - NULL); - - if (!(result = g_spawn_command_line_async(NULL, &err))) - { - fprintf(stderr, "\nCould not spawn test application - %s", err->message); - } - - g_free(test_module); - g_free(command_line); - - return result; -} - -/*---------------------------------------------------------------------------*/ - -static gboolean -suite_idle_handler(gpointer data); - -static void -suite_finished_handler(gpointer data) -{ - ClassyTestSuite *suite = CLASSY_TEST_SUITE(data); - ClassyTest *test = CLASSY_TEST(g_array_index(suite->cases, gpointer, suite->current)); - - if ((classy_test_state(test) == CLASSY_TEST_WIN) || suite->cont) { - g_idle_add(suite_idle_handler, suite); - } - /* TODO If test has failed remember to send signal saying so */ -} - -static gboolean -suite_idle_handler(gpointer data) -{ - ClassyTestSuite *suite = CLASSY_TEST_SUITE(data); - - suite->current++; - if (suite->current >= suite->cases->len) { - /* No more tests, check for success or fail */ - gboolean succeeded = TRUE; - gint i; - for (i=0; i < suite->cases->len; i++) { - ClassyTest *test; - test = CLASSY_TEST(g_array_index(suite->cases, gpointer, i)); - succeeded = succeeded && (classy_test_state(test) == CLASSY_TEST_WIN); - } - if (succeeded == TRUE) - classy_test_pass(CLASSY_TEST(suite)); - else - classy_test_fail(CLASSY_TEST(suite), "Sub-test has failed"); - } else { - /* More tests, run this one*/ - ClassyTest *test; - test = CLASSY_TEST(g_array_index(suite->cases, gpointer, suite->current)); - g_signal_connect(test, "finished", (GCallback) suite_finished_handler, data); - classy_test_run(test); - } - return FALSE; -} - -static void -suite_run(ClassyTest *test) -{ - g_idle_add(suite_idle_handler, test); -} - -/*---------------------------------------------------------------------------*/ - -static gchar * -suite_report(ClassyTest *test) -{ - ClassyTestSuite *suite = CLASSY_TEST_SUITE(test); - GString *report; - gint i; - - report = g_string_new(""); - - switch (classy_test_state(test)) { - case CLASSY_TEST_FAIL: - g_string_printf(report, "FAIL : %s\n : %s\n ", test->name); - case CLASSY_TEST_WIN: - g_string_printf(report, "PASS : %s\n", test->name); - default: - g_string_printf(report, "INCOMPLETE : %s\n", test->name); - } - - for (i=0; i < suite->cases->len; i++) { - ClassyTest *subtest = CLASSY_TEST(g_array_index(suite->cases, gpointer, i)); - g_string_append_printf(report, " "); - g_string_append_printf(report, "%s", classy_test_report(subtest)); - } - return g_string_free(report, FALSE); -} - -/*---------------------------------------------------------------------------*/ - -G_DEFINE_TYPE (ClassyTestSuite, classy_test_suite, TYPE_CLASSY_TEST) - -static void -classy_test_suite_finalize (GObject *obj) -{ - ClassyTestSuite *suite = CLASSY_TEST_SUITE(obj); - gint i; - - for (i=0; i < suite->cases->len; i++) { - ClassyTest *test; - test = CLASSY_TEST(g_array_index(suite->cases, gpointer, i)); - g_object_unref(test); - } - g_free(suite->data); - - G_OBJECT_CLASS (classy_test_suite_parent_class)->finalize (obj); -} - -static void -classy_test_suite_class_init (ClassyTestSuiteClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - ClassyTestClass *test_class = CLASSY_TEST_CLASS(klass); - - gobject_class->finalize = classy_test_suite_finalize; - - test_class->report = suite_report; - test_class->run = suite_run; -} - -static void -classy_test_suite_init (ClassyTestSuite *suite) -{ - suite->cases = g_array_new(FALSE, FALSE, sizeof(gpointer)); - suite->current = -1; -} - -/*---------------------------------------------------------------------------*/ - -ClassyTestSuite * -classy_test_suite_new(gchar *name, gint dsize, gboolean cont) -{ - ClassyTestSuite *suite; - ClassyTest *test; - - suite = g_object_new(TYPE_CLASSY_TEST_SUITE, NULL); - suite->cont = cont; - suite->data = g_malloc0(dsize); - - test = CLASSY_TEST(suite); - test->name = g_strdup(name); - - return suite; -} - -void -classy_test_suite_add(ClassyTestSuite *suite, ClassyTest *test) -{ - g_array_append(suite->cases, test); -} - -/*---------------------------------------------------------------------------*/ diff --git a/tests/cspi/classy-test-suite.h b/tests/cspi/classy-test-suite.h deleted file mode 100644 index d27aad0..0000000 --- a/tests/cspi/classy-test-suite.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Classy Test - Terrible framework for testing asyncronous interface - * - * Copyright (C) 2008 Codethink Ltd - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 CLASSY_TEST_SUITE_H -#define CLASSY_TEST_SUITE_H - -#include <glib-object.h> - -G_BEGIN_DECLS - -GType classy_test_suite_get_type(void); - -#define TYPE_CLASSY_TEST_SUITE (classy_test_suite_get_type()) - -#define CLASSY_TEST_SUITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - TYPE_CLASSY_TEST_SUITE, \ - ClassyTestSuite)) - -#define CLASSY_TEST_SUITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ - TYPE_CLASSY_TEST_SUITE, \ - ClassyTestSuiteClass)) - -#define IS_CLASSY_TEST_SUITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - TYPE_CLASSY_TEST_SUITE)) - -#define IS_CLASSY_TEST_SUITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), \ - TYPE_CLASSY_TEST_SUITE)) - -#define CLASSY_TEST_SUITE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \ - TYPE_CLASSY_TEST_SUITE, \ - ClassyTestSuiteClass)) - -typedef struct _ClassyTestSuite ClassyTestSuite; -typedef struct _ClassyTestSuiteClass ClassyTestSuiteClass; - -struct _ClassyTestSuite { - ClassyTest parent; - - GArray *cases; - gint current; - gboolean cont; - - gpointer data; -}; - -struct _ClassyTestSuiteClass { - ClassyTestClass parent; -}; - -ClassyTestSuite * -classy_test_suite_new(gchar *name, gint dsize, gboolean cont); - -void -classy_test_suite_add(ClassyTestSuite *suite, ClassyTest *test); - -/*---------------------------------------------------------------------------*/ - -G_END_DECLS -#endif /* CLASSY_TEST_SUITE_H */ diff --git a/tests/cspi/classy-test.c b/tests/cspi/classy-test.c deleted file mode 100644 index e5ef266..0000000 --- a/tests/cspi/classy-test.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Classy Test - Terrible framework for testing asyncronous interface - * - * Copyright (C) 2008 Codethink Ltd - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 <glib-object.h> - -#include "classy-test.h" - -static gchar * -classy_test_report(ClassyTest *test) -{ - switch (classy_test_state(test)) { - case CLASSY_TEST_FAIL: - return g_strdup_printf("FAIL : %s - %s\n ", test->name, test->failm); - case CLASSY_TEST_WIN: - return g_strdup_printf("PASS : %s\n", test->name); - default: - return g_strdup_printf("INCOMPLETE : %s\n", test->name); - } -} - -/*---------------------------------------------------------------------------*/ - -static void -classy_test_run(ClassyTest *test) -{ - test->tstate = CLASSY_TEST_IN_PROGRESS; - (test->entry)(test, test->data); -} - -/*---------------------------------------------------------------------------*/ - -G_DEFINE_TYPE (ClassyTest, classy_test, G_TYPE_OBJECT) - -static void -classy_test_finalize (GObject *obj) -{ - ClassyTest *test = CLASSY_TEST(obj); - - g_free(test->name); - if (test->failm) { - g_free(test->failm); - test->failm = NULL; - } - G_OBJECT_CLASS (classy_test_parent_class)->finalize (obj); -} - -static void -classy_test_class_init (ClassyTestClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->finalize = classy_test_finalize; - - klass->report = classy_test_report; - klass->run = classy_test_run; - - /*Signals*/ - klass->finished = g_signal_newv("finished", - TYPE_CLASSY_TEST, - G_SIGNAL_RUN_LAST | G_SIGNAL_NO_HOOKS, - NULL, - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0, - NULL); -} - -static void -classy_test_init (ClassyTest *test) -{ - test->failm = NULL; - test->tstate = CLASSY_TEST_NOT_STARTED; -} - -/*---------------------------------------------------------------------------*/ - -ClassyTest * -classy_test_new(gchar *name, - void (*entry) (ClassyTest*, gpointer data), - gint istate, - gpointer data) -{ - ClassyTest *test; - - test = g_object_new(TYPE_CLASSY_TEST, NULL); - - test->name = g_strdup(name); - test->entry = entry; - test->data = data; - - return test; -} - -/*---------------------------------------------------------------------------*/ - -void -classy_test_pass(ClassyTest *test) -{ - test->tstate = CLASSY_TEST_WIN; - g_signal_emit (test, CLASSY_TEST_CLASS(test)->finished, 0, NULL); -} - -/*---------------------------------------------------------------------------*/ - -void -classy_test_fail(ClassyTest *test, gchar *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - test->failm = g_strdup_vprintf(fmt, args); - va_end(args); - test->tstate = CLASSY_TEST_FAIL; - g_signal_emit (test, CLASSY_TEST_CLASS(test)->finished, 0, NULL); -} - -/*---------------------------------------------------------------------------*/ - -gint -classy_test_state(ClassyTest *test) -{ - return test->tstate; -} - -/*---------------------------------------------------------------------------*/ diff --git a/tests/cspi/classy-test.h b/tests/cspi/classy-test.h deleted file mode 100644 index 68e59e1..0000000 --- a/tests/cspi/classy-test.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Classy Test - Terrible framework for testing asyncronous interface - * - * Copyright (C) 2008 Codethink Ltd - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 CLASSY_TEST_H -#define CLASSY_TEST_H - -#include <glib-object.h> - -G_BEGIN_DECLS - -GType classy_test_get_type(void); - -#define TYPE_CLASSY_TEST (classy_test_get_type()) - -#define CLASSY_TEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), \ - TYPE_CLASSY_TEST, \ - ClassyTest)) - -#define CLASSY_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \ - TYPE_CLASSY_TEST, \ - ClassyTestClass)) - -#define IS_CLASSY_TEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ - TYPE_CLASSY_TEST)) - -#define IS_CLASSY_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), \ - TYPE_CLASSY_TEST)) - -#define CLASSY_TEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), \ - TYPE_CLASSY_TEST, \ - ClassyTestClass)) - -typedef struct _ClassyTest ClassyTest; -typedef struct _ClassyTestClass ClassyTestClass; - -enum { - CLASSY_TEST_NOT_STARTED, - CLASSY_TEST_IN_PROGRESS, - CLASSY_TEST_FAIL, - CLASSY_TEST_WIN -}; - -struct _ClassyTest { - GObject parent; - - gchar *name; - gchar *failm; - gint tstate; - - void (*entry) (ClassyTest *tc, gpointer data); - - gpointer data; -}; - -struct _ClassyTestClass { - GObjectClass parent; - - /*Virtuals*/ - gchar *(*report) (ClassyTest *test); - void (*run) (ClassyTest *test); - - /*Signals*/ - gint finished; -}; - -ClassyTest * -classy_test_new(gchar *name, - void (*entry) (ClassyTest*, gpointer data), - gint istate, - gpointer data); - -void -classy_test_pass(ClassyTest *test); - -void -classy_test_fail(ClassyTest *test, gchar *fmt, ...); - -gint -classy_test_state(ClassyTest *test); - -G_END_DECLS -#endif /* CLASSY_TEST_H */ diff --git a/tests/cspi/key-listener-test.c b/tests/cspi/key-listener-test.c deleted file mode 100644 index b212a21..0000000 --- a/tests/cspi/key-listener-test.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * AT-SPI - Assistive Technology Service Provider Interface - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * Copyright 2001, 2002 Sun Microsystems Inc., - * Copyright 2001, 2002 Ximian, Inc. - * - * 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 <stdio.h> -#include <ctype.h> -#include <unistd.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <sys/un.h> -#include "../../cspi/spi.h" - -static SPIBoolean report_command_key_event (const AccessibleKeystroke *stroke, void *user_data); -static SPIBoolean report_ordinary_key_event (const AccessibleKeystroke *stroke, void *user_data); -static SPIBoolean report_synchronous_key_event (const AccessibleKeystroke *stroke, void *user_data); -static SPIBoolean report_tab_key_event (const AccessibleKeystroke *stroke, void *user_data); -static SPIBoolean report_all_key_event (const AccessibleKeystroke *stroke, void *user_data); - -static AccessibleKeystrokeListener *command_key_listener; -static AccessibleKeystrokeListener *ordinary_key_listener; -static AccessibleKeystrokeListener *synchronous_key_listener; -static AccessibleKeystrokeListener *tab_key_listener; -static AccessibleKeystrokeListener *all_key_listener; -static AccessibleKeySet *command_keyset; -static AccessibleKeySet *async_keyset; -static AccessibleKeySet *sync_keyset; -static AccessibleKeySet *tab_keyset; - -int -main (int argc, char **argv) -{ - const char *tab_strings[1] = {"Tab"}; - short keycodes[] = {65, 64, 23}; - SPIBoolean retval = FALSE; - - SPI_init (); - - /* prepare the keyboard snoopers */ - command_key_listener = SPI_createAccessibleKeystrokeListener (report_command_key_event, NULL); - ordinary_key_listener = SPI_createAccessibleKeystrokeListener (report_ordinary_key_event, NULL); - synchronous_key_listener = SPI_createAccessibleKeystrokeListener (report_synchronous_key_event, NULL); - tab_key_listener = SPI_createAccessibleKeystrokeListener (report_tab_key_event, NULL); - all_key_listener = SPI_createAccessibleKeystrokeListener (report_all_key_event, NULL); - - command_keyset = SPI_createAccessibleKeySet (1, "q", NULL, NULL); - async_keyset = SPI_createAccessibleKeySet (3, NULL, keycodes, NULL); - sync_keyset = SPI_createAccessibleKeySet (3, "def", NULL, NULL); - tab_keyset = SPI_createAccessibleKeySet (1, NULL, NULL, tab_strings); - retval = SPI_registerAccessibleKeystrokeListener(command_key_listener, - command_keyset, - SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL, - (unsigned long) ( SPI_KEY_PRESSED ), - SPI_KEYLISTENER_ALL_WINDOWS); - fprintf (stderr, "Command key registry: result %s\n", retval ? "succeeded" : - "failed"); - retval = SPI_registerAccessibleKeystrokeListener(ordinary_key_listener, - async_keyset, - SPI_KEYMASK_UNMODIFIED, - (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), - SPI_KEYLISTENER_NOSYNC); - - retval = SPI_registerAccessibleKeystrokeListener(synchronous_key_listener, - sync_keyset, - SPI_KEYMASK_UNMODIFIED, - (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), - SPI_KEYLISTENER_CANCONSUME); - - retval = SPI_registerAccessibleKeystrokeListener(tab_key_listener, - tab_keyset, - SPI_KEYMASK_ALT, - (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), - SPI_KEYLISTENER_ALL_WINDOWS); - fprintf (stderr, "tab listener registry: %s\n", retval ? "succeeded" : "failed"); - - retval = SPI_registerAccessibleKeystrokeListener(all_key_listener, - SPI_KEYSET_ALL_KEYS, - SPI_KEYMASK_CONTROL | SPI_KEYMASK_SHIFT, - (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), - SPI_KEYLISTENER_ALL_WINDOWS); - - fprintf (stderr, "all key registry: %s\n", retval ? "succeeded" : "failed" ); - - SPI_registerAccessibleKeystrokeListener(all_key_listener, - SPI_KEYSET_ALL_KEYS, - SPI_KEYMASK_SHIFT, - (unsigned long) ( SPI_KEY_PRESSED ), - SPI_KEYLISTENER_NOSYNC | SPI_KEYLISTENER_CANCONSUME); - - SPI_event_main (); - - putenv ("AT_BRIDGE_SHUTDOWN=1"); - - return SPI_exit (); -} - -static void -simple_at_exit (void) -{ - SPI_deregisterAccessibleKeystrokeListener (command_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); - AccessibleKeystrokeListener_unref (command_key_listener); - SPI_freeAccessibleKeySet (command_keyset); - -/* - SPI_deregisterAccessibleKeystrokeListener (ordinary_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); */ - AccessibleKeystrokeListener_unref (ordinary_key_listener); - SPI_freeAccessibleKeySet (async_keyset); - -/* SPI_deregisterAccessibleKeystrokeListener (synchronous_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); */ - AccessibleKeystrokeListener_unref (synchronous_key_listener); - SPI_freeAccessibleKeySet (sync_keyset); - - SPI_deregisterAccessibleKeystrokeListener (tab_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); - AccessibleKeystrokeListener_unref (tab_key_listener); - SPI_freeAccessibleKeySet (tab_keyset); - - SPI_event_quit (); -} - -static SPIBoolean -is_command_key (const AccessibleKeystroke *key) -{ - switch (key->keyID) - { - case 'Q': - case 'q': - simple_at_exit(); - return TRUE; /* not reached */ - default: - return FALSE; - } -} - -static void -print_key_event (const AccessibleKeystroke *key, char *prefix) -{ - fprintf (stderr, "%s KeyEvent %s%c (keycode %d); string=%s; time=%lx\n", - prefix, - (key->modifiers & SPI_KEYMASK_ALT)?"Alt-":"", - ((key->modifiers & SPI_KEYMASK_SHIFT)^(key->modifiers & SPI_KEYMASK_SHIFTLOCK))? - (char) toupper((int) key->keyID) : (char) tolower((int) key->keyID), - (int) key->keycode, - key->keystring, - (long int) key->timestamp); -} - -static SPIBoolean -report_command_key_event (const AccessibleKeystroke *key, void *user_data) -{ - print_key_event (key, "command"); - return is_command_key (key); -} - -static SPIBoolean -report_ordinary_key_event (const AccessibleKeystroke *key, void *user_data) -{ - print_key_event (key, "ordinary"); - return FALSE; -} - -static SPIBoolean -report_synchronous_key_event (const AccessibleKeystroke *key, void *user_data) -{ - /* consume 'd' key, let others pass through */ - print_key_event (key, "synchronous (consumable) "); - return ( key->keyID == 'd' ) ? TRUE : FALSE; -} - -static SPIBoolean -report_tab_key_event (const AccessibleKeystroke *key, void *user_data) -{ - print_key_event (key, "[TAB]"); - return FALSE; -} - -static SPIBoolean -report_all_key_event (const AccessibleKeystroke *key, void *user_data) -{ - fprintf(stderr, "(%ld)", key->keyID); - return FALSE; -} - diff --git a/tests/cspi/keysynth-test.c b/tests/cspi/keysynth-test.c deleted file mode 100644 index 73aa240..0000000 --- a/tests/cspi/keysynth-test.c +++ /dev/null @@ -1,65 +0,0 @@ -/* - * AT-SPI - Assistive Technology Service Provider Interface - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * Copyright 2001, 2002 Sun Microsystems Inc., - * Copyright 2001, 2002 Ximian, Inc. - * - * 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 <unistd.h> -#include <stdlib.h> -#include "../../cspi/spi-private.h" /* A hack for now */ -#include <glib-object.h> -#include <gtk/gtk.h> -#include <atk/atk.h> -#include <atk/atknoopobject.h> -#include "common/spi-dbus.h" - -typedef struct { - long int val; - char *string; - AccessibleKeySynthType type; -} TextTest; - -static TextTest text[] = { - {65, NULL, SPI_KEY_PRESSRELEASE}, - {64, NULL, SPI_KEY_SYM}, - {0, "--hello!", SPI_KEY_STRING}, - {0, "StudlyCaps!", SPI_KEY_STRING} -}; - -static void -test_key_synthesis (void) -{ - int i; - for (i = 0; i < G_N_ELEMENTS (text); ++i) { - SPI_generateKeyboardEvent (text[i].val, text[i].string, text[i].type); - } -} - -int -main (int argc, char **argv) -{ - gtk_init (&argc, &argv); - SPI_init (); - - test_key_synthesis (); - - return SPI_exit (); -} - diff --git a/tests/cspi/simple-at.c b/tests/cspi/simple-at.c deleted file mode 100644 index 23cb0ec..0000000 --- a/tests/cspi/simple-at.c +++ /dev/null @@ -1,615 +0,0 @@ -/* - * AT-SPI - Assistive Technology Service Provider Interface - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * Copyright 2001, 2002 Sun Microsystems Inc., - * Copyright 2001, 2002 Ximian, Inc. - * - * 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 <stdio.h> -#include <strings.h> -#include <stdlib.h> -#include <ctype.h> -#include <unistd.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <sys/un.h> -#undef MAGNIFIER_ENABLED -#include "../../cspi/spi-private.h" /* A hack for now */ - -#define PRINT_TREE - -static void report_focus_event (const AccessibleEvent *event, void *user_data); -static void report_generic_event (const AccessibleEvent *event, void *user_data); -static void report_window_event (const AccessibleEvent *event, void *user_data); -static void report_text_event (const AccessibleEvent *event, void *user_data); -static void report_button_press (const AccessibleEvent *event, void *user_data); -static void check_property_change (const AccessibleEvent *event, void *user_data); -static SPIBoolean report_command_key_event (const AccessibleKeystroke *stroke, void *user_data); -static SPIBoolean report_ordinary_key_event (const AccessibleKeystroke *stroke, void *user_data); -static void get_environment_vars (void); - -static int _festival_init (void); -static void _festival_say (const char *text, const char *voice, SPIBoolean shutup); -static void _festival_write (const char *buff, int fd); - -#ifdef PRINT_TREE -static void print_accessible_tree (Accessible *accessible, char *prefix); -#endif - -#ifdef MAGNIFIER_ENABLED -static SPIBoolean use_magnifier = FALSE; -#endif - -static SPIBoolean use_festival = FALSE; -static SPIBoolean festival_chatty = FALSE; -static SPIBoolean name_changed = FALSE; - -static AccessibleEventListener *focus_listener; -static AccessibleEventListener *property_listener; -static AccessibleEventListener *generic_listener; -static AccessibleEventListener *window_listener; -static AccessibleEventListener *button_listener; -static AccessibleEventListener *text_listener; -static AccessibleKeystrokeListener *command_key_listener; -static AccessibleKeystrokeListener *ordinary_key_listener; -static AccessibleKeySet *command_keyset; - -int -main (int argc, char **argv) -{ - int i, j; - int n_desktops; - int n_apps; - char *s; - Accessible *desktop; - Accessible *application; - const char *modules; - - if ((argc > 1) && (!strncmp (argv[1], "-h", 2))) - { - printf ("Usage: simple-at\n"); - printf ("\tEnvironment variables used:\n\t\tFESTIVAL\n\t\tMAGNIFIER\n\t\tFESTIVAL_CHATTY\n"); - exit (0); - } - - modules = g_getenv ("GTK_MODULES"); - if (!modules || modules [0] == '\0') - { - putenv ("GTK_MODULES="); - } - modules = NULL; - - SPI_init (); - - focus_listener = SPI_createAccessibleEventListener (report_focus_event, NULL); - property_listener = SPI_createAccessibleEventListener (check_property_change, NULL); - generic_listener = SPI_createAccessibleEventListener (report_generic_event, NULL); - window_listener = SPI_createAccessibleEventListener (report_window_event, NULL); - text_listener = SPI_createAccessibleEventListener (report_text_event, NULL); - button_listener = SPI_createAccessibleEventListener (report_button_press, NULL); - SPI_registerGlobalEventListener (focus_listener, "focus:"); - SPI_registerGlobalEventListener (property_listener, "object:property-change"); -/* :accessible-selection"); */ - SPI_registerGlobalEventListener (property_listener, "object:property-change:accessible-name"); - SPI_registerGlobalEventListener (generic_listener, "object:selection-changed"); - SPI_registerGlobalEventListener (generic_listener, "object:children-changed"); - SPI_registerGlobalEventListener (generic_listener, "object:visible-data-changed"); - SPI_registerGlobalEventListener (generic_listener, "object:text-selection-changed"); - SPI_registerGlobalEventListener (text_listener, "object:text-caret-moved"); - SPI_registerGlobalEventListener (text_listener, "object:text-changed"); - SPI_registerGlobalEventListener (button_listener, "Gtk:GtkWidget:button-press-event"); - SPI_registerGlobalEventListener (window_listener, "window:minimize"); - SPI_registerGlobalEventListener (window_listener, "window:activate"); - n_desktops = SPI_getDesktopCount (); - - for (i=0; i<n_desktops; ++i) - { - desktop = SPI_getDesktop (i); - s = Accessible_getName (desktop); - fprintf (stderr, "desktop %d name: %s\n", i, s); - SPI_freeString (s); - n_apps = Accessible_getChildCount (desktop); - for (j=0; j<n_apps; ++j) - { - application = Accessible_getChildAtIndex (desktop, j); - s = Accessible_getName (application); - fprintf (stderr, "app %d name: %s\n", j, s ? s : "(nil)"); -#ifdef PRINT_TREE - print_accessible_tree (application, "*"); -#endif - SPI_freeString (s); - Accessible_unref (application); - } - Accessible_unref (desktop); - } - - /* prepare the keyboard snoopers */ - command_key_listener = SPI_createAccessibleKeystrokeListener (report_command_key_event, NULL); - ordinary_key_listener = SPI_createAccessibleKeystrokeListener (report_ordinary_key_event, NULL); - - command_keyset = SPI_createAccessibleKeySet (11, "qmf23456789", NULL, NULL); - - /* will listen only to Control-Alt-q KeyPress events */ - SPI_registerAccessibleKeystrokeListener(command_key_listener, - command_keyset, - SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL, - (unsigned long) ( SPI_KEY_PRESSED ), - SPI_KEYLISTENER_ALL_WINDOWS); - - /* will listen only to CAPSLOCK key events, both press and release */ - SPI_registerAccessibleKeystrokeListener(ordinary_key_listener, - (AccessibleKeySet *) SPI_KEYSET_ALL_KEYS, - SPI_KEYMASK_SHIFTLOCK, - (unsigned long) ( SPI_KEY_PRESSED | SPI_KEY_RELEASED ), - SPI_KEYLISTENER_NOSYNC); - - get_environment_vars (); - - SPI_event_main (); - - putenv ("AT_BRIDGE_SHUTDOWN=1"); - - return SPI_exit (); -} - -static void -get_environment_vars (void) -{ - if (g_getenv ("FESTIVAL")) - { - fprintf (stderr, "Using festival\n"); - use_festival = TRUE; - if (g_getenv ("FESTIVAL_CHATTY")) - { - festival_chatty = TRUE; - } - } -#ifdef MAGNIFIER_ENABLED - if (g_getenv ("MAGNIFIER")) - { - fprintf (stderr, "Using magnifier\n"); - use_magnifier = TRUE; - } - else - { - fprintf (stderr, "Not using magnifier\n"); - } -#endif - - if (!use_festival) - { - fprintf (stderr, "No speech output\n"); - } -} - -#ifdef PRINT_TREE -static void -print_accessible_tree (Accessible *accessible, char *prefix) -{ - int n_children; - int i; - char *name; - char *role_name; - char *parent_name = NULL; - char *parent_role = NULL; - char child_prefix[100]; - Accessible *child; - Accessible *parent; - - strncpy (child_prefix, prefix, 98); - strcat (child_prefix, "*"); - parent = Accessible_getParent (accessible); - if (parent) - { - parent_name = Accessible_getName (parent); - parent_role = Accessible_getRoleName (parent); - Accessible_unref (parent); - } - name = Accessible_getName (accessible); - role_name = Accessible_getRoleName (accessible); - fprintf (stdout, "%sAccessible [%s] \"%s\"; parent [%s] %s.\n", - prefix, role_name, name ? name : "(nil)", - parent_role ? parent_role : "(nil)", - parent_name ? parent_name : "(nil)"); - SPI_freeString (name); - SPI_freeString (role_name); - SPI_freeString (parent_name); - SPI_freeString (parent_role); - n_children = Accessible_getChildCount (accessible); - for (i = 0; i < n_children; ++i) - { - child = Accessible_getChildAtIndex (accessible, i); - print_accessible_tree (child, child_prefix); - Accessible_unref (child); - } -} -#endif - -void -report_focussed_accessible (Accessible *obj, SPIBoolean shutup_previous_speech) -{ - char *s; - int len; - long x, y, width, height; - /* hack for GUADEC demo, to make sure name changes are spoken */ - shutup_previous_speech = (shutup_previous_speech && !name_changed); - - if (use_festival) - { - if (festival_chatty) - { - s = Accessible_getRoleName (obj); - _festival_say (s, "voice_don_diphone", shutup_previous_speech); - SPI_freeString (s); - } - fprintf (stderr, "getting Name\n"); - s = Accessible_getName (obj); - _festival_say (s, "voice_kal_diphone", - shutup_previous_speech || festival_chatty); - SPI_freeString (s); - } - - if (Accessible_isComponent (obj)) - { - AccessibleComponent *component = Accessible_getComponent (obj); - AccessibleComponent_getExtents (component, &x, &y, &width, &height, - SPI_COORD_TYPE_SCREEN); - fprintf (stderr, "Bounding box: (%ld, %ld) ; (%ld, %ld)\n", - x, y, x+width, y+height); - if (Accessible_isText (obj)) - { - long x0, y0, xN, yN, w0, h0, wN, hN, nchars; - AccessibleText *text = Accessible_getText (obj); - nchars = AccessibleText_getCharacterCount (text); - if (nchars > 0) - { - AccessibleText_getCharacterExtents (text, 0, &x0, &y0, &w0, &h0, - SPI_COORD_TYPE_SCREEN); - AccessibleText_getCharacterExtents (text, nchars-1, &xN, &yN, &wN, &hN, - SPI_COORD_TYPE_SCREEN); - x = MIN (x0, xN); - width = MAX (x0 + w0, xN + wN) - x; - fprintf (stderr, "Text bounding box: (%ld, %ld) ; (%ld, %ld)\n", - x, y, x+width, y+height); - } - } -#ifdef MAGNIFIER_ENABLED - if (use_magnifier) { - magnifier_set_roi ((short) 0, x, y, width, height); - } -#endif - } - - - if (Accessible_isValue (obj)) - { - AccessibleValue *value = Accessible_getValue (obj); - fprintf (stderr, "Current value = %f, min = %f; max = %f\n", - AccessibleValue_getCurrentValue (value), - AccessibleValue_getMinimumValue (value), - AccessibleValue_getMaximumValue (value)); - } - /* if this is a text object, speak the first sentence. */ - - if (Accessible_isText(obj)) - - { - AccessibleText *text_interface; - long start_offset, end_offset; - char *first_sentence = "empty"; - text_interface = Accessible_getText (obj); - first_sentence = AccessibleText_getTextAtOffset ( - text_interface, (long) 0, SPI_TEXT_BOUNDARY_SENTENCE_START, &start_offset, &end_offset); - if (first_sentence && use_festival) - { - _festival_say(first_sentence, "voice_don_diphone", FALSE); - SPI_freeString (first_sentence); - } - len = AccessibleText_getCharacterCount (text_interface); - s = AccessibleText_getText (text_interface, 0, len); - fprintf (stderr, "done reporting on focussed object, text=%s\n", s); - } -} - -void -report_focus_event (const AccessibleEvent *event, void *user_data) -{ - char *s; - - g_return_if_fail (event->source != NULL); - s = Accessible_getName (event->source); - if (s) - { - fprintf (stderr, "%s event from %s\n", event->type, s); - SPI_freeString (s); - report_focussed_accessible (event->source, TRUE); - } - Accessible_getParent (event->source); - name_changed = FALSE; -} - -void -report_generic_event (const AccessibleEvent *event, void *user_data) -{ - fprintf (stderr, "%s event received\n", event->type); -} - -void -report_window_event (const AccessibleEvent *event, void *user_data) -{ - fprintf (stderr, "%s event received\n", event->type); - if (!strcmp (event->type, "window:activate")) - { - print_accessible_tree (event->source, "window"); - } -} - -void -report_text_event (const AccessibleEvent *event, void *user_data) -{ - AccessibleText *text = Accessible_getText (event->source); - fprintf (stderr, "%s event received\n", event->type); -#ifdef MAGNIFIER_ENABLED - if (use_magnifier && strcmp (event->type, "object:text-changed")) - { - long offset = AccessibleText_getCaretOffset (text); - long x, y, w, h; - fprintf (stderr, "offset %d\n", (int) offset); - AccessibleText_getCharacterExtents (text, offset, &x, &y, &w, &h, - SPI_COORD_TYPE_SCREEN); - fprintf (stderr, "new roi %d %d %d %d\n", (int) x, (int) y, (int) w, (int) h); - magnifier_set_roi ((short) 0, x, y, w, h); - } -#endif - if (!strcmp (event->type, "object:text-changed")) - { - long start, end; - char *new_text = AccessibleText_getTextAtOffset (text, (long) event->detail1, SPI_TEXT_BOUNDARY_WORD_START, &start, &end); - _festival_say (new_text, "voice_kal_diphone", FALSE); - fprintf (stderr, "text changed: %s", new_text ? new_text : ""); - SPI_freeString (new_text); - } - else - { - long start, end; - char *word_text = AccessibleText_getTextAtOffset (text, (long) event->detail1, SPI_TEXT_BOUNDARY_WORD_START, &start, &end); - char *sentence_text = AccessibleText_getTextAtOffset (text, (long) event->detail1, SPI_TEXT_BOUNDARY_SENTENCE_START, &start, &end); - fprintf (stderr, "text changed: word %s; sentence %s at %ld", - (word_text ? word_text : ""), - (sentence_text ? sentence_text : ""), - event->detail1); - if (word_text) SPI_freeString (word_text); - if (sentence_text) SPI_freeString (sentence_text); - } -} - -void -report_button_press (const AccessibleEvent *event, void *user_data) -{ - char *s; - - g_return_if_fail (event->source != NULL); - - s = Accessible_getName (event->source); - - fprintf (stderr, "%s event from %s\n", event->type, s); - SPI_freeString (s); - s = Accessible_getDescription (event->source); - fprintf (stderr, "Object description %s\n", s); - SPI_freeString (s); -} - -void -check_property_change (const AccessibleEvent *event, void *user_data) -{ - AccessibleSelection *selection = Accessible_getSelection (event->source); - int n_selections; - int i; - char *s; - fprintf (stderr, "property change event!\n"); - if (selection) - { - n_selections = (int) AccessibleSelection_getNSelectedChildren (selection); - s = Accessible_getName (event->source); - fprintf (stderr, "(Property) %s event from %s, %d selected children\n", - event->type, s, n_selections); - SPI_freeString (s); - /* for now, speak entire selection set */ - for (i=0; i<n_selections; ++i) - { - Accessible *obj = AccessibleSelection_getSelectedChild (selection, (long) i); - g_return_if_fail (obj); - s = Accessible_getName (obj); - fprintf (stderr, "Child %d, name=%s\n", i, s); - SPI_freeString (s); - report_focussed_accessible (obj, i==0); - } - } - else if (!strcmp (event->type, "object:property-change:accessible-name")) - { - name_changed = TRUE; - report_focussed_accessible (event->source, TRUE); - } - else - { - fprintf (stderr, "Property change %s received\n", event->type); - } -} - -static void -simple_at_exit (void) -{ - SPI_deregisterGlobalEventListenerAll (focus_listener); - AccessibleEventListener_unref (focus_listener); - - SPI_deregisterGlobalEventListenerAll (property_listener); - AccessibleEventListener_unref (property_listener); - - SPI_deregisterGlobalEventListenerAll (generic_listener); - AccessibleEventListener_unref (generic_listener); - - SPI_deregisterGlobalEventListenerAll (text_listener); - AccessibleEventListener_unref (text_listener); - - SPI_deregisterGlobalEventListenerAll (button_listener); - AccessibleEventListener_unref (button_listener); - - SPI_deregisterAccessibleKeystrokeListener (command_key_listener, SPI_KEYMASK_ALT | SPI_KEYMASK_CONTROL); - AccessibleKeystrokeListener_unref (command_key_listener); - SPI_freeAccessibleKeySet (command_keyset); - - SPI_deregisterAccessibleKeystrokeListener (ordinary_key_listener, SPI_KEYMASK_SHIFTLOCK); - AccessibleKeystrokeListener_unref (ordinary_key_listener); - - SPI_event_quit (); -} - -static SPIBoolean -is_command_key (const AccessibleKeystroke *key) -{ - switch (key->keyID) - { - case 'Q': - case 'q': - simple_at_exit(); - return TRUE; /* not reached */ -#ifdef MAGNIFIER_ENABLED - case 'M': - case 'm': - use_magnifier = ! use_magnifier; - fprintf (stderr, "%ssing magnifier\n", use_magnifier ? "U" : "Not u"); - return TRUE; -#endif - case 'F': - case 'f': - use_festival = ! use_festival; - fprintf (stderr, "%speech output\n", use_festival ? "S" : "No s"); - return TRUE; - default: - return FALSE; - } -} - -static SPIBoolean -report_command_key_event (const AccessibleKeystroke *key, void *user_data) -{ - fprintf (stderr, "Command KeyEvent %s%c (keycode %d); string=%s; time=%lx\n", - (key->modifiers & SPI_KEYMASK_ALT)?"Alt-":"", - ((key->modifiers & SPI_KEYMASK_SHIFT)^(key->modifiers & SPI_KEYMASK_SHIFTLOCK))? - (char) toupper((int) key->keyID) : (char) tolower((int) key->keyID), - (int) key->keycode, - key->keystring, - (long int) key->timestamp); - return is_command_key (key); -} - - -static SPIBoolean -report_ordinary_key_event (const AccessibleKeystroke *key, void *user_data) -{ - fprintf (stderr, "Received key event:\tsym %ld\n\tmods %x\n\tcode %d\n\tstring=\'%s\'\n\ttime %lx\n", - (long) key->keyID, - (unsigned int) key->modifiers, - (int) key->keycode, - key->keystring, - (long int) key->timestamp); - return FALSE; -} - -static int -_festival_init (void) -{ - int fd; - struct sockaddr_in name; - int tries = 2; - - name.sin_family = AF_INET; - name.sin_port = htons (1314); - name.sin_addr.s_addr = htonl(INADDR_ANY); - fd = socket (PF_INET, SOCK_STREAM, 0); - - while (connect(fd, (struct sockaddr *) &name, sizeof (name)) < 0) { - if (!tries--) { - perror ("connect"); - return -1; - } - } - - _festival_write ("(audio_mode'async)\n", fd); - _festival_write ("(Parameter.set 'Duration_Model 'Tree_ZScore)\n", fd); - _festival_write ("(Parameter.set 'Duration_Stretch 0.75)\n", fd); - return fd; -} - -static void -_festival_say (const char *text, const char *voice, SPIBoolean shutup) -{ - static int fd = 0; - gchar *quoted; - gchar *p; - gchar prefix[50]; - static gchar voice_spec[32]; - - if (!fd) - { - fd = _festival_init (); - } - - fprintf (stderr, "saying text: %s\n", text); - - quoted = g_malloc(64+strlen(text)*2); - - sprintf (prefix, "(SayText \""); - - strncpy(quoted, prefix, 10); - p = quoted+strlen(prefix); - while (*text) { - if ( *text == '\\' || *text == '"' ) - *p = '\\'; - *p++ = *text++; - } - *p++ = '"'; - *p++ = ')'; - *p++ = '\n'; - *p = 0; - - if (shutup) _festival_write ("(audio_mode'shutup)\n", fd); - if (voice && (strncmp (voice, (char *) (voice_spec+1), strlen(voice)))) - { - snprintf (voice_spec, 32, "(%s)\n", voice); - _festival_write (voice_spec, fd); - _festival_write ("(Parameter.set 'Duration_Model 'Tree_ZScore)\n", fd); - _festival_write ("(Parameter.set 'Duration_Stretch 0.75)\n", fd); - } - - _festival_write (quoted, fd); - - g_free(quoted); -} - -static void -_festival_write (const gchar *command_string, int fd) -{ - fprintf(stderr, command_string); - if (fd < 0) { - perror("socket"); - return; - } - write(fd, command_string, strlen(command_string)); -} - diff --git a/tests/cspi/simple-test.c b/tests/cspi/simple-test.c deleted file mode 100644 index 21c74a6..0000000 --- a/tests/cspi/simple-test.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2008 Codethink Ltd. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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 <glib.h> -#include <cspi/spi.h> - -#include <stdio.h> - -int -main (int argc, char **argv) -{ - gint i; - gint n_desktops; - gchar *s; - - SPI_init (); - - n_desktops = SPI_getDesktopCount (); - - for (i=0; i<n_desktops; ++i) { - Accessible *desktop; - - desktop = SPI_getDesktop (i); - s = Accessible_getName (desktop); - fprintf (stderr, "desktop %d name: %s\n", i, s); - SPI_freeString (s); - Accessible_unref (desktop); - } - return SPI_exit (); -} diff --git a/tests/cspi/test-simple.c b/tests/cspi/test-simple.c deleted file mode 100644 index 62bcb31..0000000 --- a/tests/cspi/test-simple.c +++ /dev/null @@ -1,816 +0,0 @@ -/* - * test-simple.c: A set of simple regression tests - * (Gnome Accessibility Project; http://developer.gnome.org/projects/gap) - * - * Copyright 2001 Ximian, Inc. - * - * 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. - */ - -/* - * ******** Do not copy this code as an example ********* - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <locale.h> -#include <gtk/gtk.h> -#include <cspi/spi.h> -#include <cspi/spi-private.h> - -#include "dbus/dbus.h" - -/* Known bugs */ -#define WHOLE_STRING -1 - -static void validate_accessible (Accessible *accessible, - gboolean has_parent, - gboolean recurse_down); - -#define WINDOW_MAGIC 0x123456a -#define TEST_STRING_A "A test string" -#define TEST_STRING_A_OBJECT "A_test_string_object" -#define TEST_STRING_B "Another test string" - -static int print_tree_depth = 0; -static gboolean print_tree = FALSE; -static gboolean do_poke = FALSE; -static gboolean key_press_received = FALSE; -static gboolean key_release_received = FALSE; - -typedef struct { - gulong magic; - GtkWidget *window; -} TestWindow; - -static gboolean -focus_me (GtkWidget *widget) -{ - AtkObject *aobject = atk_implementor_ref_accessible ( - ATK_IMPLEMENTOR (widget)); - - /* Force a focus event - even if the WM focused - * us before our at-bridge's idle handler registered - * our interest */ - if (!GTK_WIDGET_HAS_FOCUS (widget)) - gtk_widget_grab_focus (widget); -/* else: FIXME - gtk_widget_grab_focus should send a notify */ - atk_focus_tracker_notify (aobject); - - g_object_unref (G_OBJECT (aobject)); - - return FALSE; -} - -static void -test_window_add_and_show (GtkContainer *container, GtkWidget *widget) -{ - gtk_container_add (container, widget); - gtk_widget_show (widget); -} - -static GtkWidget * -create_tree (void) -{ - GtkWidget *widget; - GtkTreeIter iter; - GtkListStore *store; - GtkTreeViewColumn *column; - - store = gtk_list_store_new (1, G_TYPE_STRING); - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, 0, TEST_STRING_A, -1); - column = gtk_tree_view_column_new_with_attributes ("String", - gtk_cell_renderer_text_new (), "text", 0, NULL); - widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); - g_object_unref (G_OBJECT (store)); - gtk_tree_view_append_column (GTK_TREE_VIEW (widget), column); - - return widget; -} - -static TestWindow * -create_test_window (void) -{ - TestWindow *win = g_new0 (TestWindow, 1); - GtkWidget *widget, *vbox; - AtkObject *obj; - - win->magic = WINDOW_MAGIC; - win->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - - gtk_widget_show (win->window); - - vbox = gtk_vbox_new (0, 0); - gtk_container_add (GTK_CONTAINER (win->window), vbox); - gtk_widget_show (vbox); - - widget = gtk_entry_new (); - gtk_entry_set_text (GTK_ENTRY (widget), TEST_STRING_A); - obj = gtk_widget_get_accessible (widget); - atk_object_set_name (obj, TEST_STRING_A_OBJECT); - - test_window_add_and_show (GTK_CONTAINER (vbox), widget); - - widget = gtk_button_new_with_label ("_Foobar"); - test_window_add_and_show (GTK_CONTAINER (vbox), widget); - - widget = gtk_hseparator_new (); - test_window_add_and_show (GTK_CONTAINER (vbox), widget); - - widget = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, - GTK_ICON_SIZE_LARGE_TOOLBAR); - test_window_add_and_show (GTK_CONTAINER (vbox), widget); - - widget = g_object_new (GTK_TYPE_HSCALE, NULL); - gtk_range_set_range (GTK_RANGE (widget), 0.0, 100.0); - test_window_add_and_show (GTK_CONTAINER (vbox), widget); - - widget = create_tree (); - test_window_add_and_show (GTK_CONTAINER (vbox), widget); - - g_idle_add ((GSourceFunc) focus_me, win->window); - - return win; -} - -static void -test_window_destroy (TestWindow *win) -{ - gtk_widget_destroy (win->window); - g_free (win); -} - -static void -test_roles (void) -{ - int i; - - fprintf (stderr, "Testing roles...\n"); - for (i = -1; i < 1000; i++) - g_assert (AccessibleRole_getName (i) != NULL); - - g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_FILE_CHOOSER), "file-chooser")); - g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_RADIO_BUTTON), "radio-button")); - g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_TABLE), "table")); - g_assert (!strcmp (AccessibleRole_getName (SPI_ROLE_WINDOW), "window")); -} - -static void -test_action (AccessibleAction *action) -{ - gint n_actions, i; - gchar *s, *sd; - g_assert ((n_actions = AccessibleAction_getNActions (action)) >= 0); - - fprintf (stderr, "Testing actions..."); - for (i = 0; i < n_actions; ++i) - { - s = AccessibleAction_getName (action, i); - g_assert (s); - sd = AccessibleAction_getDescription (action, i); - g_assert (sd); - fprintf (stderr, "%d: %s (%s); ", i, s, sd); - SPI_freeString (s); - SPI_freeString (sd); - g_assert (AccessibleAction_doAction (action, i)); - } - fprintf (stderr, "\n"); -} - -static void -test_desktop (void) -{ - Accessible *desktop; - Accessible *application; - Accessible **list; - - fprintf (stderr, "Testing desktop...\n"); - - g_assert (SPI_getDesktop (-1) == NULL); - desktop = SPI_getDesktop (0); - g_assert (desktop != NULL); - - g_assert ((SPI_getDesktopList (&list)) > 0); - g_assert (list[0] == desktop); - SPI_freeDesktopList (list); - - validate_accessible (desktop, FALSE, FALSE); - - application = Accessible_getChildAtIndex (desktop, 0); - g_assert (application != NULL); - AccessibleApplication_unref (application); - - Accessible_unref (desktop); -} - -static void -test_application (Accessible *application) -{ - char *str; - - fprintf (stderr, "Testing application ...\n"); - g_assert (Accessible_isApplication (application)); - g_assert (Accessible_getApplication (application) == - application); - AccessibleApplication_unref (application); - - str = AccessibleApplication_getToolkitName (application); - g_assert (str != NULL); - g_assert (!strcmp (str, "GAIL")); - SPI_freeString (str); - - str = AccessibleApplication_getLocale (application, LC_MESSAGES); - g_assert (!strcmp (str, setlocale (LC_MESSAGES, NULL))); - SPI_freeString (str); - - str = AccessibleApplication_getVersion (application); - g_assert (str != NULL); - SPI_freeString (str); - - AccessibleApplication_getID (application); -} - -static void -test_editable_text (AccessibleEditableText *etext) -{ - char *str; - AccessibleText *text; - - fprintf (stderr, "Testing editable text ...\n"); - - g_assert (Accessible_isText (etext)); - text = Accessible_getText (etext); - - AccessibleEditableText_setTextContents ( - etext, TEST_STRING_B); - - str = AccessibleText_getText (text, 0, WHOLE_STRING); - g_assert (!strcmp (str, TEST_STRING_B)); - - SPI_freeString (str); - - /* FIXME: lots more editing here */ - - AccessibleEditableText_setTextContents ( - etext, TEST_STRING_A); - - AccessibleText_unref (text); -} - -static void -test_table (AccessibleTable *table) -{ - Accessible *header; - gint index; - gint rows, columns; - - fprintf (stderr, "Testing table ...\n"); - - rows = AccessibleTable_getNRows (table); - g_assert (rows > 0); - - columns = AccessibleTable_getNColumns (table); - g_assert (columns > 0); - - index = AccessibleTable_getIndexAt (table, rows - 1, columns - 1); - - g_assert (AccessibleTable_getRowAtIndex (table, index) == rows - 1); - - g_assert (AccessibleTable_getColumnAtIndex (table, index) == columns - 1); - - g_assert ((header = AccessibleTable_getColumnHeader (table, 0))); - Accessible_unref (header); - - AccessibleTable_isSelected (table, 0, 0); - - /* FIXME: lots more tests */ -} - -static void -test_text (AccessibleText *text) -{ - char *str; - - fprintf (stderr, "Testing text ...\n"); - - g_assert (AccessibleText_getCharacterCount (text) == - strlen (TEST_STRING_A)); - - str = AccessibleText_getText (text, 0, WHOLE_STRING); - g_assert (!strcmp (str, TEST_STRING_A)); - SPI_freeString (str); - - str = AccessibleText_getText (text, 0, 5); - g_assert (!strncmp (str, TEST_STRING_A, 5)); - SPI_freeString (str); - - AccessibleText_setCaretOffset (text, 7); - g_assert (AccessibleText_getCaretOffset (text) == 7); - - /* FIXME: lots more tests - selections etc. etc. */ -} - -static void -test_value (AccessibleValue *value) -{ - float original_value; - - fprintf (stderr, "Testing value ...\n"); - - original_value = AccessibleValue_getCurrentValue (value); - - g_assert (AccessibleValue_getCurrentValue (value) <= - AccessibleValue_getMaximumValue (value)); - - g_assert (AccessibleValue_getCurrentValue (value) >= - AccessibleValue_getMinimumValue (value)); - - AccessibleValue_setCurrentValue (value, - AccessibleValue_getMinimumValue (value)); - - g_assert (AccessibleValue_getCurrentValue (value) == - AccessibleValue_getMinimumValue (value)); - - AccessibleValue_setCurrentValue (value, - AccessibleValue_getMaximumValue (value)); - - g_assert (AccessibleValue_getCurrentValue (value) == - AccessibleValue_getMaximumValue (value)); - - AccessibleValue_setCurrentValue (value, original_value); - - g_assert (AccessibleValue_getCurrentValue (value) == original_value); -} - -static void -test_component (AccessibleComponent *component) -{ - long x, y, width, height; - - fprintf (stderr, "Testing component...\n"); - - AccessibleComponent_getExtents ( - component, &x, &y, &width, &height, SPI_COORD_TYPE_SCREEN); - - AccessibleComponent_getPosition ( - component, &x, &y, SPI_COORD_TYPE_SCREEN); - - AccessibleComponent_getSize (component, &width, &height); - - if (width > 0 && height > 0) { -#ifdef FIXME - Accessible *accessible, *componentb; -#endif - - g_assert (AccessibleComponent_contains ( - component, x, y, SPI_COORD_TYPE_SCREEN)); - - g_assert (AccessibleComponent_contains ( - component, x + width - 1, y, SPI_COORD_TYPE_SCREEN)); - - g_assert (AccessibleComponent_contains ( - component, x + width - 1, y + height - 1, - SPI_COORD_TYPE_SCREEN)); - -#ifdef FIXME - accessible = AccessibleComponent_getAccessibleAtPoint ( - component, x, y, SPI_COORD_TYPE_SCREEN); - - g_assert (Accessible_isComponent (accessible)); - componentb = Accessible_getComponent (accessible); - g_assert (componentb == component); - - AccessibleComponent_unref (componentb); - Accessible_unref (accessible); -#endif - } - - AccessibleComponent_getLayer (component); - AccessibleComponent_getMDIZOrder (component); -/* AccessibleComponent_grabFocus (component); */ -} - -static void -test_image (AccessibleImage *image) -{ - char *desc; - long int x = -1, y = -1, width = -1, height = -1; - - desc = AccessibleImage_getImageDescription (image); - g_assert (desc != NULL); - SPI_freeString (desc); - - AccessibleImage_getImagePosition (image, &x, &y, - SPI_COORD_TYPE_SCREEN); - AccessibleImage_getImageSize (image, &width, &height); - AccessibleImage_getImageExtents (image, &x, &y, &width, &height, - SPI_COORD_TYPE_WINDOW); -} - -static void -validate_tree (Accessible *accessible, - gboolean has_parent, - gboolean recurse_down) -{ - Accessible *parent; - long len, i; - - parent = Accessible_getParent (accessible); - if (has_parent) { - long index; - Accessible *child_at_index; - - g_assert (parent != NULL); - - index = Accessible_getIndexInParent (accessible); - g_assert (index >= 0); - - child_at_index = Accessible_getChildAtIndex (parent, index); - - g_assert (child_at_index == accessible); - - Accessible_unref (child_at_index); - Accessible_unref (parent); - } - - len = Accessible_getChildCount (accessible); - print_tree_depth++; - for (i = 0; i < len; i++) { - Accessible *child; - - child = Accessible_getChildAtIndex (accessible, i); -#ifdef ROPEY - if (!child) - fprintf (stderr, "Unusual - ChildGone at %ld\n", i); - - g_assert (Accessible_getIndexInParent (child) == i); - g_assert (Accessible_getParent (child) == accessible); -#endif - - if (recurse_down && child) - validate_accessible (child, has_parent, recurse_down); - - Accessible_unref (child); - } - print_tree_depth--; -} - -static void -validate_accessible (Accessible *accessible, - gboolean has_parent, - gboolean recurse_down) -{ - Accessible *tmp; - char *name, *descr; - AccessibleRole role; - AccessibleRelation **relations; - char *role_name; - GString *item_str = g_string_new (""); - int i; - - name = Accessible_getName (accessible); - g_assert (name != NULL); - - descr = Accessible_getDescription (accessible); - g_assert (descr != NULL); - - role = Accessible_getRole (accessible); - g_assert (role != SPI_ROLE_INVALID); - role_name = Accessible_getRoleName (accessible); - g_assert (role_name != NULL); - - relations = Accessible_getRelationSet (accessible); - g_assert (relations != NULL); - - for (i = 0; relations [i]; i++) { - AccessibleRelationType type; - int targets; - - fprintf (stderr, "relation %d\n", i); - - type = AccessibleRelation_getRelationType (relations [i]); - g_assert (type != SPI_RELATION_NULL); - - targets = AccessibleRelation_getNTargets (relations [i]); - g_assert (targets != -1); - - AccessibleRelation_unref (relations [i]); - relations [i] = NULL; - } - free (relations); - - if (print_tree) { - int i; - - for (i = 0; i < print_tree_depth; i++) - fputc (' ', stderr); - fputs ("|-> [ ", stderr); - } - - if (Accessible_isAction (accessible)) { - tmp = Accessible_getAction (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "At"); - else - test_action (tmp); - AccessibleAction_unref (tmp); - } - - if (Accessible_isApplication (accessible)) { - tmp = Accessible_getApplication (accessible); - if (print_tree) - fprintf (stderr, "Ap"); - else - test_application (tmp); - AccessibleApplication_unref (tmp); - } - - if (Accessible_isComponent (accessible)) { - tmp = Accessible_getComponent (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "Co"); - else - test_component (tmp); - AccessibleComponent_unref (tmp); - } - - if (Accessible_isEditableText (accessible)) { - tmp = Accessible_getEditableText (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "Et"); - else - test_editable_text (tmp); - AccessibleEditableText_unref (tmp); - } - - if (Accessible_isHypertext (accessible)) { - tmp = Accessible_getHypertext (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "Ht"); - AccessibleHypertext_unref (tmp); - } - - if (Accessible_isImage (accessible)) { - tmp = Accessible_getImage (accessible); - g_assert (tmp != NULL); - if (print_tree) { - char *desc; - - fprintf (stderr, "Im"); - - desc = AccessibleImage_getImageDescription (tmp); - g_string_append_printf ( - item_str, " image descr: '%s'", desc); - SPI_freeString (desc); - } else - test_image (tmp); - - AccessibleImage_unref (tmp); - } - - if (Accessible_isSelection (accessible)) { - tmp = Accessible_getSelection (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "Se"); - AccessibleSelection_unref (tmp); - } - - if (Accessible_isTable (accessible)) { - tmp = Accessible_getTable (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "Ta"); - else - test_table (tmp); - AccessibleTable_unref (tmp); - } - - if (Accessible_isText (accessible)) { - tmp = Accessible_getText (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "Te"); - else { - if (strcmp (name, TEST_STRING_A_OBJECT) == 0) - test_text (tmp); - } - AccessibleText_unref (tmp); - } - - if (Accessible_isValue (accessible)) { - tmp = Accessible_getValue (accessible); - g_assert (tmp != NULL); - if (print_tree) - fprintf (stderr, "Va"); - else - test_value (tmp); - AccessibleValue_unref (tmp); - } - - if (print_tree) - fprintf (stderr, " ] '%s' (%s) - %s: %s\n", - name, descr, role_name, item_str->str); - - SPI_freeString (name); - SPI_freeString (descr); - SPI_freeString (role_name); - g_string_free (item_str, TRUE); - - validate_tree (accessible, has_parent, recurse_down); -} - -static void -test_misc (void) -{ - fprintf (stderr, "Testing misc bits ...\n"); - - g_assert (!Accessible_isComponent (NULL)); - g_assert (Accessible_getComponent (NULL) == NULL); - SPI_freeString (NULL); -} - -static void -global_listener_cb (const AccessibleEvent *event, - void *user_data) -{ - TestWindow *win = user_data; - Accessible *desktop; - AccessibleApplication *application; - - g_assert (win->magic == WINDOW_MAGIC); - g_assert (!strcmp (event->type, "focus:")); - - fprintf (stderr, "Fielded focus event ...\n"); - - if (!do_poke) { - desktop = SPI_getDesktop (0); - application = Accessible_getChildAtIndex (desktop, 0); - g_assert (application != NULL); - Accessible_unref (desktop); - - test_application (application); - - AccessibleApplication_unref (application); - - print_tree = FALSE; - - validate_accessible (event->source, TRUE, TRUE); - - fprintf (stderr, "quitting mainloop.\n"); - gtk_main_quit (); - } - - print_tree = TRUE; - validate_accessible (event->source, TRUE, TRUE); -} - -static SPIBoolean -key_listener_cb (const AccessibleKeystroke *stroke, - void *user_data) -{ - AccessibleKeystroke *s = user_data; - - *s = *stroke; - if (stroke->keystring) s->keystring = g_strdup (stroke->keystring); - - if (s->type == SPI_KEY_PRESSED) - key_press_received = TRUE; - else if (s->type == SPI_KEY_RELEASED) - key_release_received = TRUE; - - return TRUE; -} - - -static void -test_keylisteners (void) -{ - int i; - AccessibleKeystroke stroke; - AccessibleKeystrokeListener *key_listener; - AccessibleKeySet *test_keyset; - - fprintf (stderr, "Testing keyboard listeners ...\n"); - - key_listener = SPI_createAccessibleKeystrokeListener ( - key_listener_cb, &stroke); - - test_keyset = SPI_createAccessibleKeySet (1, "=", NULL, NULL); - - g_assert (SPI_registerAccessibleKeystrokeListener ( - key_listener, - test_keyset, - 0, - SPI_KEY_PRESSED | SPI_KEY_RELEASED, - SPI_KEYLISTENER_CANCONSUME | SPI_KEYLISTENER_ALL_WINDOWS)); - - for (i = 0; i < 3; i++) { - memset (&stroke, 0, sizeof (AccessibleKeystroke)); - g_assert (SPI_generateKeyboardEvent ('=', NULL, SPI_KEY_SYM)); - while (!(key_press_received)) - g_main_context_iteration (NULL, TRUE); - fprintf (stderr, "p [%s]", stroke.keystring); - g_assert (!strcmp (stroke.keystring, "=")); - while (!(key_release_received)) - g_main_context_iteration (NULL, TRUE); - fprintf (stderr, "r [%s]", stroke.keystring); - key_press_received = FALSE; - key_release_received = FALSE; - } - g_assert (SPI_deregisterAccessibleKeystrokeListener (key_listener, 0)); - SPI_freeAccessibleKeySet (test_keyset); - - fprintf (stderr, "\n"); - - AccessibleKeystrokeListener_unref (key_listener); - - g_assert (SPI_generateMouseEvent (100, 100, "rel")); - g_assert (SPI_generateMouseEvent (-50, -50, "rel")); - g_assert (SPI_generateMouseEvent (-50, -50, "rel")); - g_assert (SPI_generateMouseEvent (-1, -1, "b1c")); -} - -int -main (int argc, char **argv) -{ - int leaked, i; - TestWindow *win; - const char *modules; - AccessibleEventListener *global_listener; - - modules = g_getenv ("GTK_MODULES"); - if (!modules || modules [0] == '\0') - putenv ("GTK_MODULES=gail:atk-bridge"); - modules = NULL; - - for (i = 1; i < argc; i++) { - if (!g_strcasecmp (argv [i], "--poke")) - do_poke = TRUE; - } - - gtk_init (&argc, &argv); - - g_assert (!SPI_init ()); - g_assert (SPI_init ()); - g_assert (SPI_getDesktopCount () == 1); - - test_roles (); - test_misc (); - test_desktop (); - test_keylisteners (); - - win = create_test_window (); - - global_listener = SPI_createAccessibleEventListener (global_listener_cb, win); - - g_assert (SPI_registerGlobalEventListener (global_listener, "focus:")); - - fprintf (stderr, "Waiting for focus event ...\n"); - gtk_main (); - - g_assert (SPI_deregisterGlobalEventListenerAll (global_listener)); - AccessibleEventListener_unref (global_listener); - - test_window_destroy (win); - - /* Wait for any pending events from the registry */ - g_usleep (500*1000); - for (i = 0; i < 100; i++) - dbus_connection_read_write_dispatch (SPI_bus(), 5); - - if ((leaked = SPI_exit ())) - g_error ("Leaked %d SPI handles", leaked); - - g_assert (!SPI_exit ()); - - fprintf (stderr, "All tests passed\n"); - - if (g_getenv ("_MEMPROF_SOCKET")) { - fprintf (stderr, "Waiting for memprof\n"); - gtk_main (); - } - - putenv ("AT_BRIDGE_SHUTDOWN=1"); - - return 0; -} diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am deleted file mode 100644 index b06736b..0000000 --- a/tests/data/Makefile.am +++ /dev/null @@ -1,3 +0,0 @@ -EXTRA_DIST = \ - accessible-test.xml\ - accessible-test-results.xml diff --git a/tests/data/accessible-test-results.xml b/tests/data/accessible-test-results.xml deleted file mode 100644 index a522187..0000000 --- a/tests/data/accessible-test-results.xml +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0" ?> -<accessible description="The main accessible object, root of the accessible tree" name="main" role="69"> - <accessible description="" name="gnome-settings-daemon" role="79"/> - <accessible description="" name="gnome-panel" role="79"> - <accessible description="" name="Bottom Expanded Edge Panel" role="25"/> - <accessible description="" name="Top Expanded Edge Panel" role="25"/> - </accessible> - <accessible description="" name="nautilus" role="79"> - <accessible description="" name="Desktop" role="25"/> - </accessible> - <accessible description="" name="metacity" role="79"/> - <accessible description="" name="tracker-applet" role="79"/> - <accessible description="" name="empathy" role="79"> - <accessible description="" name="Contact List" role="25"/> - </accessible> - <accessible description="" name="nm-applet" role="79"/> - <accessible description="" name="gnome-power-manager" role="79"/> - <accessible description="" name="update-notifier" role="79"/> - <accessible description="Firefox Application Accessible" name="Firefox" role="79"> - <accessible description="Firefox Application Accessible" name="Google Reader - Mozilla Firefox 3 Beta 5" role="25"> - <accessible description="" name="" role="35"/> - <accessible description="" name="Strip originally conceived in conversation with Jeph Jacques. Soon to be a major motion picture." role="66"/> - <accessible description="" name="" role="68"> - <accessible description="" name="" role="33"> - <accessible description="" name="" role="10"/> - <accessible description="" name="" role="10"/> - </accessible> - </accessible> - <accessible description="" name="" role="35"> - <accessible description="" name="" role="69"/> - </accessible> - <accessible description="" name="" role="35"/> - <accessible description="" name="" role="35"/> - <accessible description="" name="" role="35"/> - <accessible description="" name="" role="35"/> - <accessible description="" name="" role="35"/> - <accessible description="" name="" role="66"/> - <accessible description="" name="" role="66"/> - <accessible description="" name="" role="65"> - <accessible description="" name="Application" role="36"/> - <accessible description="" name="" role="53"/> - <accessible description="" name="Activity Indicator" role="45"/> - </accessible> - <accessible description="" name="" role="65"> - <accessible description="Go back one page" name="Back" role="45"/> - <accessible description="Go forwards one page" name="Forward" role="45"/> - <accessible description="" name="" role="45"/> - <accessible description="Reload current page" name="Reload" role="45"/> - <accessible description="Stop loading this page" name="Stop" role="45"/> - <accessible description="chrome://ubufox/content/startpage.html" name="Home" role="45"/> - <accessible description="" name="Location" role="80"/> - <accessible description="" name="Search using Google" role="80"/> - </accessible> - <accessible description="" name="" role="65"> - <accessible description="" name="Smart Bookmarks" role="45"/> - <accessible description="" name="Getting Started" role="45"/> - <accessible description="" name="Latest Headlines" role="45"/> - </accessible> - <accessible description="" name="" role="41"> - <accessible description="" name="Google Reader" role="66"/> - <accessible description="" name="" role="35"/> - <accessible description="" name="" role="40"/> - <accessible description="" name="" role="51"/> - <accessible description="" name="" role="51"> - <accessible description="" name="Google Reader" role="30"> - <accessible description="" name="Google Reader" role="86"> - <accessible description="" name="Click here for ARIA enhanced Google Reader." role="72"/> - <accessible description="" name="" role="89"/> - <accessible description="" name="" role="89"/> - <accessible description="" name="" role="89"/> - <accessible description="" name="Google Reader" role="72"/> - <accessible description="" name="" role="63"/> - <accessible description="" name="" role="89"/> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="89"/> - <accessible description="" name="" role="89"/> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="57"/> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="57"/> - <accessible description="" name="" role="57"> - <accessible description="" name="" role="58"> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="89"/> - <accessible description="" name="" role="63"/> - <accessible description="" name="Google News" role="72"/> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="89"/> - <accessible description="" name="" role="89"> - <accessible description="" name="Reader and ARIA: A new way to read" role="72"/> - </accessible> - <accessible description="" name="" role="89"> - <accessible description="" name="Official Google Reader Blog" role="72"/> - </accessible> - <accessible description="" name="" role="89"/> - </accessible> - </accessible> - </accessible> - <accessible description="" name="" role="58"/> - </accessible> - </accessible> - <accessible description="" name="" role="89"> - <accessible description="" name="Google Reader Blog" role="72"/> - <accessible description="" name="Discuss" role="72"/> - <accessible description="" name="Privacy Policy" role="72"/> - <accessible description="" name="Help" role="72"/> - <accessible description="" name="" role="89"/> - </accessible> - </accessible> - </accessible> - </accessible> - </accessible> - <accessible description="" name="" role="89"> - <accessible description="" name="" role="29"/> - <accessible description="" name="" role="29"/> - <accessible description="" name="" role="29"/> - <accessible description="" name="" role="29"/> - <accessible description="" name="" role="29"/> - </accessible> - </accessible> - </accessible> - </accessible> - </accessible> - <accessible description="" name="" role="35"/> - <accessible description="" name="" role="56"> - <accessible description="" name="Done" role="45"/> - <accessible description="" name="" role="45"/> - </accessible> - </accessible> - </accessible> - <accessible description="" name="gnome-terminal" role="79"> - <accessible description="" name="mdoff@silver-wind: ~/Projects/accessibility/dbus-atspi/test" role="25"/> - </accessible> -</accessible> diff --git a/tests/data/accessible-test.xml b/tests/data/accessible-test.xml deleted file mode 100644 index c881873..0000000 --- a/tests/data/accessible-test.xml +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0" ?> -<accessible description="The main accessible object, root of the accessible tree" 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/dummyatk/Makefile.am b/tests/dummyatk/Makefile.am deleted file mode 100644 index 2e93052..0000000 --- a/tests/dummyatk/Makefile.am +++ /dev/null @@ -1,38 +0,0 @@ -check_LTLIBRARIES = libdummyatk.la - -libdummyatk_la_CFLAGS = $(ATK_CFLAGS) \ - -I$(top_srcdir) - -libdummyatk_la_LDFLAGS = -no-undefined \ - -module \ - -avoid-version - -libdummyatk_la_LIBADD = $(ATK_LIBS) - -libdummyatk_la_SOURCES = my-atk-action.c \ - my-atk-action.h \ - my-atk-component.c \ - my-atk-component.h \ - my-atk-hyperlink.c \ - my-atk-hyperlink.h \ - my-atk-hypertext.c \ - my-atk-hypertext.h \ - my-atk-object.c \ - my-atk-object.h \ - my-atk-selection.c \ - my-atk-selection.h \ - my-atk-streamable-content.c \ - my-atk-streamable-content.h \ - my-atk-table.c \ - my-atk-table.h \ - my-atk-text.c \ - my-atk-text.h \ - my-atk-value.c \ - my-atk-value.h \ - my-atk.h \ - resources_storage.c \ - resources_storage.h \ - useful_functions.c \ - useful_functions.h \ - user_marshal.c \ - user_marshal.h diff --git a/tests/dummyatk/my-atk-action.c b/tests/dummyatk/my-atk-action.c deleted file mode 100644 index 363356a..0000000 --- a/tests/dummyatk/my-atk-action.c +++ /dev/null @@ -1,222 +0,0 @@ -#include <stdio.h> -#include <string.h> -#include <atk/atk.h> - -#include "my-atk-object.h" -#include "my-atk-action.h" - -static GObjectClass *parent_class = NULL; -//implementaion of the interface -static gboolean my_atk_action_do_action(AtkAction *action, gint i) -{ - MyAtkAction *self = (MyAtkAction*)action; - gboolean result = (i>=0) && (i < self->n); - self->last_performed_action = result? i : -1; - return result; -} -static gint my_atk_action_get_n_actions(AtkAction *action) -{ - MyAtkAction *self = (MyAtkAction*)action; - return self->n; -} -static const gchar* my_atk_action_get_description(AtkAction *action, gint i) -{ - MyAtkAction *self = (MyAtkAction*)action; - if((i>=0) && (i<self->n)) - { - return self->actions[i].description; - } - else - { - printf("get_description: Wrong index.\n"); - return NULL; - } -} -static const gchar* my_atk_action_get_name(AtkAction *action, gint i) -{ - MyAtkAction *self = (MyAtkAction*)action; - if((i >= 0) && (i < self->n)) - { - return self->actions[i].name; - } - else - { - printf("get_name: Wrong index.\n"); - return NULL; - } -} -static const gchar* my_atk_action_get_localized_name(AtkAction *action, gint i) -{ - return my_atk_action_get_name(action,i); -} - -static const gchar* my_atk_action_get_keybinding(AtkAction *action, gint i) -{ - MyAtkAction *self = (MyAtkAction*)action; - if((i >= 0) && (i < self->n)) - { - gchar* keyb = self->actions[i].keybinding; - if(keyb == NULL || keybinding_note_define == NULL) - { - //anywhere(if action has keybinding or not) NULL will return - return NULL; - } - else - { - //verify, if string mean "no keybinding" - return strcmp(keyb, keybinding_note_define) != 0 ? keyb : NULL; - } - } - else - { - printf("get_keybinding: Wrong index.\n"); - return NULL; - } -} -static gboolean my_atk_action_set_description(AtkAction *action, gint i, const gchar *desc) -{ - MyAtkAction *self = (MyAtkAction*)action; - - if(!((i >= 0) && (i < self->n)) ) - { - //index out of range, but this is not application error according documentation - return FALSE; - } - //index in correct range - if(self->actions[i].description == desc) - { - //self assignment - return immediately - return TRUE; - } - if(self->actions[i].description != NULL) - { - //free old value of description if it is not NULL - free(self->actions[i].description); - } - if(desc != NULL) - { - //dump new value of description if it is not NULL - self->actions[i].description = (gchar*)strdup((const char*)desc); - } - return TRUE; -} -////////// -static void my_atk_action_instance_init(GTypeInstance *instance, gpointer g_class) -{ - int i; - MyAtkAction *self = (MyAtkAction*)instance; - self->n = DEFAULT_NUMBER_ACTIONS; - self->actions = g_new(struct OneAction, self->n); - if(self->actions == NULL) - { - self->n = 0; - return; - } - //init fields of action 0 with values which differ from others actions - self->actions[0].name = (gchar*)strdup(FIRST_ACTION_NAME); - self->actions[0].description = (gchar*)strdup(FIRST_ACTION_DESCRIPTION); - self->actions[0].keybinding = (gchar*)strdup(FIRST_ACTION_KEYBINDING); - - for(i = 1; i < self->n; i++) - { - self->actions[i].name = (gchar*)strdup(DEFAULT_ACTION_NAME); - self->actions[i].description = (gchar*)strdup(DEFAULT_ACTION_DESCRIPTION); - self->actions[i].keybinding = g_strdup_printf("%d", i); - } - self->disposed = FALSE; - self->last_performed_action = -1; -} - -static void -my_atk_action_interface_init(gpointer g_iface, gpointer iface_data) -{ - AtkActionIface *klass = (AtkActionIface *)g_iface; - - klass->do_action = my_atk_action_do_action; - klass->get_n_actions = my_atk_action_get_n_actions; - klass->get_description = my_atk_action_get_description; - klass->get_name = my_atk_action_get_name; - klass->get_localized_name = my_atk_action_get_localized_name; - klass->get_keybinding = my_atk_action_get_keybinding; - klass->set_description = my_atk_action_set_description; -} - -static void -my_atk_action_dispose(GObject *obj) -{ - MyAtkAction *self = (MyAtkAction*)obj; - - if(self->disposed) - { - return; - } - self->disposed = TRUE; - - G_OBJECT_CLASS(parent_class)->dispose(obj); -} - -static void -my_atk_action_finalize(GObject *obj) -{ - MyAtkAction *self = (MyAtkAction*)obj; - int i; - - for(i = 0; i < self->n; i++) - { - struct OneAction oneAction = self->actions[i]; - if(oneAction.name != NULL) - free(oneAction.name); - if(oneAction.description != NULL) - free(oneAction.description); - if(oneAction.keybinding != NULL) - free(oneAction.keybinding); - } - if(self->actions != NULL) - g_free(self->actions); - - G_OBJECT_CLASS(parent_class)->finalize(obj); -} -static void -my_atk_action_class_init (gpointer g_class, gpointer g_class_data) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS(g_class); - MyAtkActionClass *klass = MY_ATK_ACTION_CLASS (g_class); - - gobject_class->dispose = my_atk_action_dispose; - gobject_class->finalize = my_atk_action_finalize; - - parent_class = g_type_class_peek_parent(klass); -} -GType my_atk_action_get_type(void) -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo info = - { - sizeof (MyAtkActionClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - my_atk_action_class_init, /* class_init */ - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (MyAtkAction), - 0, /* n_preallocs */ - my_atk_action_instance_init /* instance_init */ - }; - - static const GInterfaceInfo iface_info = - { - (GInterfaceInitFunc) my_atk_action_interface_init, /* interface_init */ - NULL, /* interface_finalize */ - NULL /* interface_data */ - }; - type = g_type_register_static (MY_TYPE_ATK_OBJECT, - "MyAtkAction", - &info, 0); - g_type_add_interface_static (type, - ATK_TYPE_ACTION, - &iface_info); - } - return type; -} diff --git a/tests/dummyatk/my-atk-action.h b/tests/dummyatk/my-atk-action.h deleted file mode 100644 index f33e75d..0000000 --- a/tests/dummyatk/my-atk-action.h +++ /dev/null @@ -1,58 +0,0 @@ -#ifndef MY_ATK_ACTION_H -#define MY_ATK_ACTION_H -//Object, which implement interface AtkAction(all functions) -#include <glib.h> -#include <glib-object.h> -#include <atk/atk.h> - -#include "my-atk-object.h" - -//declarations -#define MY_TYPE_ATK_ACTION (my_atk_action_get_type ()) -#define MY_ATK_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_ACTION, MyAtkAction)) -#define MY_ATK_ACTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_ACTION, MyAtkActionClass)) -#define MY_IS_ATK_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_ACTION)) -#define MY_IS_ATK_ACTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_ACTION)) -#define MY_ATK_ACTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_ACTION, MyAtkActionClass)) - -static const gchar* keybinding_note_define = "none"; - -#define FIRST_ACTION_NAME "First action" -#define FIRST_ACTION_DESCRIPTION "First action performed" -#define FIRST_ACTION_KEYBINDING "0" - -#define DEFAULT_NUMBER_ACTIONS 10 -#define DEFAULT_ACTION_NAME "Action" -#define DEFAULT_ACTION_DESCRIPTION "Description of action" -#define DEFAULT_ACTION_KEYBINDING keybinding_note_define - - -//for external using -#define LAST_PERFORMED_ACTION(myAtkAction) (MY_ATK_ACTION(myAtkAction)->last_performed_action) -#define CLEAR_LAST_PERFOMED_ACTION(myAtkAction) (MY_ATK_ACTION(myAtkAction)->last_performed_action = -1 - -typedef struct _MyAtkAction MyAtkAction; -typedef struct _MyAtkActionClass MyAtkActionClass; - -struct _MyAtkAction -{ - MyAtkObject parent; - - gboolean disposed; - struct OneAction - { - gchar *name; - gchar *description; - gchar *keybinding; - }*actions; - gint n; - gint last_performed_action;//this field is changed when perfoms action -}; - -struct _MyAtkActionClass -{ - MyAtkObjectClass parent; -}; -GType my_atk_action_get_type(void); - -#endif /*MY_ATK_ACTION_H*/ diff --git a/tests/dummyatk/my-atk-component.c b/tests/dummyatk/my-atk-component.c deleted file mode 100644 index e304c7d..0000000 --- a/tests/dummyatk/my-atk-component.c +++ /dev/null @@ -1,403 +0,0 @@ -#include <stdio.h> -#include <atk/atk.h> -#include <limits.h> - -#include "my-atk-object.h" -#include "my-atk-component.h" - -//*************************implementation*********************** -static MyAtkObjectClass *component_parent_class = NULL; -//current focus object -static AtkComponent* focus_object = NULL; - -static guint focus_signal_id = 0; -/* - * Because of implementation of AtkUtils, we need to ensure that list of focus_trackers - * is not empty. Otherwise function atk_focus_tracker_notify will not change focus. - */ -static guint focus_tracker_id = 0; -static void my_event_listener(AtkObject* obj) -{ - //simply exist for register as focus_tracker -} -/* - * If this flag is TRUE, then focus cannot be changed until someone clears the flag - * via my_atk_component_set_modal(FALSE). - */ -static gboolean is_modal = FALSE; -//for debug -void print_extent(AtkRectangle *extent) -{ - printf("{%d,%d,%d,%d}", extent->x, extent->y, extent->width, extent->height); -} -//for internal use -static void emit_bounds_changed(MyAtkComponent *component) -{ - static guint bounds_changed_id = 0; - if(bounds_changed_id == 0) - { - bounds_changed_id = g_signal_lookup("bounds-changed", ATK_TYPE_COMPONENT); - } - AtkRectangle *param = g_boxed_copy(ATK_TYPE_RECTANGLE, &(component->extent)); - g_signal_emit(component, bounds_changed_id, 0, param); -} -static void change_focus(AtkComponent* component, gboolean is_gain) -{ - const gchar* state_name = atk_state_type_get_name(ATK_STATE_FOCUSED); - - g_signal_emit_by_name(component, "focus-event", is_gain); - g_signal_emit_by_name(component, "state-change::focused", - state_name, is_gain); - - AtkObject* parent = atk_object_get_parent((AtkObject*)component); - if(parent != NULL) - { - AtkStateSet* stateSet = atk_object_ref_state_set(parent); - if(atk_state_set_contains_state(stateSet, ATK_STATE_MANAGES_DESCENDANTS)) - g_signal_emit_by_name(parent, "active-descendant-changed", - atk_get_focus_object()); - g_object_unref(stateSet); - } -} -//implementation of virtual functions -//******************ref_state_set(AtkObject)***************************** -static AtkStateSet* my_atk_component_ref_state_set(AtkObject *object) -{ - MyAtkComponent *self = (MyAtkComponent*)object; - - AtkStateSet* result = ((AtkObjectClass*)component_parent_class)-> - ref_state_set(object); - if(self->is_manage_descendants) - atk_state_set_add_state(result, ATK_STATE_MANAGES_DESCENDANTS); - return result; -} -//******************get_size******************* -static void my_atk_component_get_size(AtkComponent *component, gint *width, gint *height) -{ - g_return_if_fail(MY_IS_ATK_COMPONENT(component)); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - *width = self->extent.width; - *height = self->extent.height; -} -//*********************get_position******************* -static void my_atk_component_get_position(AtkComponent *component, gint *x, gint *y, AtkCoordType coord_type) -{ - g_return_if_fail(MY_IS_ATK_COMPONENT(component)); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - *x = self->extent.x; - *y = self->extent.y; - -//**********************get_extents******************* -} -static void my_atk_component_get_extents(AtkComponent *component, gint *x, gint *y, - gint *width, gint *height, AtkCoordType coord_type) -{ - g_return_if_fail(MY_IS_ATK_COMPONENT(component)); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - *x = self->extent.x; - *y = self->extent.y; - *width = self->extent.width; - *height = self->extent.height; -} - -//**************************set_size******************* -static gboolean my_atk_component_set_size(AtkComponent *component, gint width, gint height) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - if(self->is_extent_may_changed) - { - self->extent.width = width; - self->extent.height = height; - - emit_bounds_changed(self); - - return TRUE; - } - return FALSE; -} -//**************************set_position******************** -static gboolean my_atk_component_set_position(AtkComponent *component, - gint x, gint y, AtkCoordType coord_type) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - if(self->is_extent_may_changed) - { - self->extent.x = x; - self->extent.y = y; - - emit_bounds_changed(self); - - return TRUE; - } - return FALSE; -} -//*************************************set_extents*************** -static gboolean my_atk_component_set_extents(AtkComponent *component, - gint x, gint y, gint width, gint height, AtkCoordType coord_type) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - - if(self->is_extent_may_changed) - { - self->extent.x = x; - self->extent.y = y; - self->extent.width = width; - self->extent.height = height; - - emit_bounds_changed(self); - - return TRUE; - } - return FALSE; -} -//**************************get_layer**************** -static AtkLayer my_atk_component_get_layer(AtkComponent *component) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), ATK_LAYER_INVALID); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - return self->layer; -} -//**************************get_mdi_zorder**************** -static gint my_atk_component_get_mdi_zorder(AtkComponent *component) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), G_MININT); - - MyAtkComponent *self = MY_ATK_COMPONENT(component); - return self->zorder; -} -//***********************contains********************** -static gboolean my_atk_component_contains(AtkComponent *component, - gint x, gint y, AtkCoordType coord_type) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), FALSE); - //for extract extent - gint x_tmp, y_tmp, width_tmp, height_tmp; - my_atk_component_get_extents(component, &x_tmp, &y_tmp, &width_tmp, &height_tmp, coord_type); - - if( (x >= x_tmp) &&(y >= y_tmp) &&(x < x_tmp + width_tmp) && (y < y_tmp + height_tmp) ) - { - return TRUE; - } - else - { - return FALSE; - } -} -//**********************ref_accessible_at_point*********************** -/* - * Retuns accessible child that implements AtkCOmponent and contains the given point. - */ -static AtkObject* my_atk_component_ref_accessible_at_point(AtkComponent* component, - gint x, gint y, AtkCoordType coord_type) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component), NULL); - gint i; - - gint n_children = atk_object_get_n_accessible_children((AtkObject*)component); - for(i = 0; i < n_children; i++) - { - AtkObject *child = atk_object_ref_accessible_child((AtkObject*)component, i); - if(ATK_IS_COMPONENT(child) - && atk_component_contains((AtkComponent*)child, x, y, coord_type)) - { - return child; - } - g_object_unref(child); - } - return NULL; -} -//*************************************grab_focus********************************* -static gboolean my_atk_component_grab_focus(AtkComponent* component) -{ - if(component == focus_object) - { - //Already has focus - return TRUE; - } - if(is_modal) - { - //cannot grab focus - return FALSE; - } - AtkComponent *focus_object_old = focus_object; - focus_object = component; - - atk_focus_tracker_notify((AtkObject*)component); - - if(focus_object_old != NULL) - { - //signals for object which lost focus - change_focus(focus_object_old, FALSE); - } - if(component != NULL) - { - //signals for object which grab focus - change_focus(component, TRUE); - } - return TRUE; -} -//***********************my_atk_component_add_focus_handler********************* -static guint my_atk_component_add_focus_handler(AtkComponent *component, AtkFocusHandler handler) -{ - g_return_val_if_fail(MY_IS_ATK_COMPONENT(component),0); - //verify whether handler already connect to object - gulong found_handler_id = g_signal_handler_find(component, - G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_FUNC, - focus_signal_id, - 0, - NULL, - (gpointer)handler, - NULL); - if(found_handler_id == 0) - { - //handler hasn't been connected yet - return g_signal_connect_closure_by_id(component, - focus_signal_id, - 0, - g_cclosure_new( (GCallback)handler, - NULL, - NULL), - FALSE); - } - else/* found_handler_id != 0*/ - { - //handler has already been connected - return 0; - } - -} -//***********************my_atk_component_remove_focus_handler********************* -static void my_atk_component_remove_focus_handler(AtkComponent *component, guint handler_id) -{ - g_signal_handler_disconnect(component, handler_id); -} -//***********************my_atk_component_set_modal(my function)*************** -void my_atk_component_set_modal(gboolean value) -{ - is_modal = value; -} -//******************my_atk_component_set_manage_descendants(my_function)******* -void my_atk_component_set_manage_descendants(MyAtkComponent* component, gboolean value) -{ - if(component->is_manage_descendants == value)return; - component->is_manage_descendants = value; - g_signal_emit_by_name(component, "state-change::manages-descendants", - "manages-descendants", value); -} -//Others funtions -static void my_atk_component_instance_init(GTypeInstance *obj, gpointer g_class) -{ - MyAtkComponent *self = (MyAtkComponent*)obj; - //set defaults values - self->extent.x = 0; - self->extent.y = 0; - self->extent.width = 10; - self->extent.height = 10; - self->is_extent_may_changed = TRUE; - self->layer = ATK_LAYER_INVALID; - self->zorder = -2147; -} -static void my_atk_component_instance_finalize(GObject* obj) -{ - MyAtkComponent* component = (MyAtkComponent*)obj; - - if(((AtkObject*)component) == atk_get_focus_object()) - { - atk_focus_tracker_notify(NULL); - } -} - -static void my_atk_component_class_init(gpointer g_class, gpointer class_data) -{ - GObjectClass* g_object_class = (GObjectClass*)g_class; - AtkObjectClass* atkObject_class = (AtkObjectClass*)g_class; - //GObject virtual table - g_object_class->finalize = my_atk_component_instance_finalize; - //AtkObject virtual table - atkObject_class->ref_state_set = my_atk_component_ref_state_set; - //parent_class - component_parent_class = g_type_class_peek_parent(g_class); - //make focus_tracker's table not empty. - focus_tracker_id = atk_add_focus_tracker(my_event_listener); - //store "focus-event"-signal id - focus_signal_id = g_signal_lookup("focus-event",MY_TYPE_ATK_COMPONENT); -} -/* - * Though, according to the documentation, this function will never called for - * static-registred types. - * Base_init function doesn't suite for this work, - * because it will called in every derived classes. - */ -/*static void my_atk_component_class_finalize(gpointer g_class, gpointer class_data) -{ - - if(focus_tracker_id != 0) - { - atk_remove_focus_tracker(focus_tracker_id); - focus_tracker_id = 0; - } -}*/ -static void my_atk_component_interface_init(gpointer g_iface, gpointer iface_data) -{ - AtkComponentIface *klass = (AtkComponentIface*)g_iface; - - klass->get_extents = my_atk_component_get_extents; - klass->get_position = my_atk_component_get_position; - klass->get_size = my_atk_component_get_size; - - klass->set_extents = my_atk_component_set_extents; - klass->set_position = my_atk_component_set_position; - klass->set_size = my_atk_component_set_size; - - klass->contains = my_atk_component_contains; - klass->ref_accessible_at_point = my_atk_component_ref_accessible_at_point; - - klass->get_layer = my_atk_component_get_layer; - klass->get_mdi_zorder = my_atk_component_get_mdi_zorder; - - klass->grab_focus = my_atk_component_grab_focus; - klass->add_focus_handler = my_atk_component_add_focus_handler; - klass->remove_focus_handler = my_atk_component_remove_focus_handler; -} - -GType my_atk_component_get_type() -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo typeInfo = - { - sizeof(MyAtkComponentClass), - NULL, //base_init - NULL, //base_finalize - my_atk_component_class_init, //class_init - NULL, //class_finalize - NULL, //class_data - sizeof(MyAtkComponent), - 0, //n_preallocs - my_atk_component_instance_init //instance_init - }; - - static const GInterfaceInfo iface_info = - { - my_atk_component_interface_init, /* interface_init*/ - NULL, /* interface_finalize*/ - NULL /* interface_data */ - }; - type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkComponent", &typeInfo, 0); - g_type_add_interface_static(type, - ATK_TYPE_COMPONENT, - &iface_info); - } - return type; -} diff --git a/tests/dummyatk/my-atk-component.h b/tests/dummyatk/my-atk-component.h deleted file mode 100644 index 3fa5850..0000000 --- a/tests/dummyatk/my-atk-component.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef MY_ATK_COMPONENT_H -#define MY_ATK_COMPONENT_H -/* - * MyAtkComponent: derives AtkObject(with parent-child accessibilities) - * and implements AtkComponent. - */ -#include <atk/atk.h> - -#include "my-atk-object.h" - -#define MY_TYPE_ATK_COMPONENT (my_atk_component_get_type ()) -#define MY_ATK_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_COMPONENT, MyAtkComponent)) -#define MY_ATK_COMPONENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_COMPONENT, MyAtkComponentClass)) -#define MY_IS_ATK_COMPONENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_COMPONENT)) -#define MY_IS_ATK_COMPONENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_COMPONENT)) -#define MY_ATK_COMPONENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_COMPONENT, MyAtkComponentClass)) - -typedef struct _MyAtkComponent MyAtkComponent; -typedef struct _MyAtkComponentClass MyAtkComponentClass; - -struct _MyAtkComponent -{ - MyAtkObject parent; - //relative coordinates, which coincides with absolute ones - AtkRectangle extent; - //whether component may be relocated - gboolean is_extent_may_changed; - //for emit "active-descendant-changed" signal - gboolean is_manage_descendants; - // - AtkLayer layer; - gint zorder; -}; - -struct _MyAtkComponentClass -{ - MyAtkObjectClass parent; -}; - -GType my_atk_component_get_type(); -#endif /*MY_ATK_COMPONENT_H*/ diff --git a/tests/dummyatk/my-atk-hyperlink.c b/tests/dummyatk/my-atk-hyperlink.c deleted file mode 100644 index cb6b435..0000000 --- a/tests/dummyatk/my-atk-hyperlink.c +++ /dev/null @@ -1,137 +0,0 @@ -#include <atk/atk.h> - -#include "my-atk-text.h" -#include "my-atk-hyperlink.h" -#include "resources_storage.h" - -//***************************implementation**************************************** -static MyAtkTextClass *parent_class_atk_hyperlink = NULL; - -// Implementation of virtual functions -//***************************my_atk_hyperlink_get_uri************** -gchar* my_atk_hyperlink_get_uri(AtkHyperlink* link_, gint index) -{ - MyAtkHyperlink* self = (MyAtkHyperlink*)link_; - - if(index < 0 || index >= self->number_of_anchors) return NULL; - return g_strdup(self->uri); -} -//**************************my_atk_hyperlink_is_valid************************** -gboolean my_atk_hyperlink_is_valid(AtkHyperlink* link_) -{ - MyAtkHyperlink* self = (MyAtkHyperlink*)link_; - - return (resource_storage_get(self->uri) != NULL); -} -//*************************my_atk_hyperlink_get_object************************ -AtkObject* my_atk_hyperlink_get_object(AtkHyperlink* link_, gint index) -{ - MyAtkHyperlink* self = (MyAtkHyperlink*)link_; - - if(index < 0 || index >= self->number_of_anchors) return NULL; - return resource_storage_get(self->uri); -} -//***************************my_atk_hyperlink_get_start_index************** -gint my_atk_hyperlink_get_start_index(AtkHyperlink* link_) -{ - MyAtkHyperlink* self = (MyAtkHyperlink*)link_; - - return self->start_index; -} -//***************************my_atk_hyperlink_get_end_index************** -gint my_atk_hyperlink_get_end_index(AtkHyperlink* link_) -{ - MyAtkHyperlink* self = (MyAtkHyperlink*)link_; - - return self->end_index; -} -//***************************my_atk_hyperlink_link_state******************* -guint my_atk_hyperlink_link_state(AtkHyperlink* link_) -{ - return 0; -} -//***************************my_atk_hyperlink_get_n_anchors******************* -gboolean my_atk_hyperlink_get_n_anchors(AtkHyperlink* link_) -{ - return ((MyAtkHyperlink*)link_)->number_of_anchors; -} -//***************************my_atk_hypertlink_is_selected_link*********** -gboolean my_atk_hyperlink_is_selected_link(AtkHyperlink* link_) -{ - MyAtkHyperlink* self = (MyAtkHyperlink*)link_; - - return self->is_selected; -} -//others functions -MyAtkHyperlink* my_atk_hyperlink_new(gint start_index, gint end_index,const gchar* uri) -{ - MyAtkHyperlink* result = g_object_new(MY_TYPE_ATK_HYPERLINK, NULL); - if(result == NULL) return NULL; - result->start_index = start_index; - result->end_index = end_index; - result->uri = g_strdup(uri); - result->number_of_anchors = 1; - return result; -} -void my_atk_hyperlink_activate(MyAtkHyperlink* hyperlink) -{ - g_signal_emit_by_name(hyperlink, "link-activated"); -} -//initialize/finalize functions -static void my_atk_hyperlink_instance_init(GTypeInstance *obj, gpointer g_class) -{ - MyAtkHyperlink *self = (MyAtkHyperlink*)obj; - - self->start_index = self->end_index = 0; - self->uri = NULL; - self->is_selected = FALSE; - self->number_of_anchors = 0; -} -static void my_atk_hyperlink_instance_finalize(GObject* obj) -{ - MyAtkHyperlink *self = (MyAtkHyperlink*)obj; - - g_free(self->uri); -} - -static void my_atk_hyperlink_class_init(gpointer g_class, gpointer class_data) -{ - GObjectClass* g_object_class = (GObjectClass*)g_class; - //GObject virtual table - g_object_class->finalize = my_atk_hyperlink_instance_finalize; - //parent_class - parent_class_atk_hyperlink = g_type_class_peek_parent(g_class); - // - AtkHyperlinkClass* atkHyperlinkClass = (AtkHyperlinkClass*)g_class; - - atkHyperlinkClass->get_uri = my_atk_hyperlink_get_uri; - atkHyperlinkClass->get_object = my_atk_hyperlink_get_object; - atkHyperlinkClass->get_start_index = my_atk_hyperlink_get_start_index; - atkHyperlinkClass->get_end_index = my_atk_hyperlink_get_end_index; - atkHyperlinkClass->is_valid = my_atk_hyperlink_is_valid; - atkHyperlinkClass->link_state = my_atk_hyperlink_link_state; - atkHyperlinkClass->get_n_anchors = my_atk_hyperlink_get_n_anchors; - atkHyperlinkClass->is_selected_link = my_atk_hyperlink_is_selected_link; -} - -GType my_atk_hyperlink_get_type() -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo typeInfo = - { - sizeof(MyAtkHyperlinkClass), - NULL, //base_init - NULL, //base_finalize - my_atk_hyperlink_class_init, //class_init - NULL, //class_finalize - NULL, //class_data - sizeof(MyAtkHyperlink), - 0, //n_preallocs - my_atk_hyperlink_instance_init //instance_init - }; - type = g_type_register_static(ATK_TYPE_HYPERLINK, "MyAtkHyperlink", &typeInfo, 0); - } - return type; -} diff --git a/tests/dummyatk/my-atk-hyperlink.h b/tests/dummyatk/my-atk-hyperlink.h deleted file mode 100644 index 026ba54..0000000 --- a/tests/dummyatk/my-atk-hyperlink.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef MY_ATK_HYPERLINK_H -#define MY_ATK_HYPERLINK_H -/* - * MyAtkHyperlink: implements AtkHyperlink - */ -#include <atk/atk.h> - -#define MY_TYPE_ATK_HYPERLINK (my_atk_hyperlink_get_type ()) -#define MY_ATK_HYPERLINK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlink)) -#define MY_ATK_HYPERLINK_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlinkClass)) -#define MY_IS_ATK_HYPERLINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_HYPERLINK)) -#define MY_IS_ATK_HYPERLINK_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_HYPERLINK)) -#define MY_ATK_HYPERLINK_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_HYPERLINK, MyAtkHyperlinkClass)) - -typedef struct _MyAtkHyperlink MyAtkHyperlink; -typedef struct _MyAtkHyperlinkClass MyAtkHyperlinkClass; - -struct _MyAtkHyperlink -{ - AtkHyperlink parent; - - gint start_index, end_index; - - gchar* uri; - gint number_of_anchors;//0 on "clear" hyperlink and 1 after set it - gboolean is_selected; -}; - -struct _MyAtkHyperlinkClass -{ - AtkHyperlinkClass parent; -}; - -GType my_atk_hyperlink_get_type(); -#endif /*MY_ATK_HYPERLINK_H*/ diff --git a/tests/dummyatk/my-atk-hypertext.c b/tests/dummyatk/my-atk-hypertext.c deleted file mode 100644 index 1bba620..0000000 --- a/tests/dummyatk/my-atk-hypertext.c +++ /dev/null @@ -1,172 +0,0 @@ -#include <atk/atk.h> - -#include "my-atk-text.h" -#include "my-atk-hyperlink.h" -#include "my-atk-hypertext.h" - -//***************************implementation**************************************** -static MyAtkTextClass *parent_class_atk_text = NULL; - -typedef struct -{ - gint start_offset, end_offset; - gint index; -}HyperlinkRange; -// Implementation of virtual functions - -//***************************my_atk_hypertext_get_n_links************************* -gint my_atk_hypertext_get_n_links(AtkHypertext* hypertext) -{ - MyAtkHypertext* self = (MyAtkHypertext*)hypertext; - - return self->hyperlinks->len; -} -//***************************my_atk_hypertext_get_link*********************** -AtkHyperlink* my_atk_hypertext_get_link(AtkHypertext* hypertext, gint link_index) -{ - MyAtkHypertext* self = (MyAtkHypertext*)hypertext; - - if(link_index < 0 || link_index >= self->hyperlinks->len) - return NULL; - return g_ptr_array_index(self->hyperlinks, link_index); -} -//*************************my_atk_hypertext_get_link_index******************* -gint my_atk_hypertext_get_link_index(AtkHypertext* hypertext, gint char_index) -{ - gint i; - MyAtkHypertext* self = (MyAtkHypertext*)hypertext; - GArray* ranges = self->hyperlink_ranges; - for(i = ranges->len - 1; i >= 0; i--) - { - HyperlinkRange *range = &g_array_index(ranges, HyperlinkRange, i); - if(range->start_offset <= char_index) - { - if(range->end_offset > char_index)return range->index; - break; - } - } - return -1; -} -//others functions -gboolean my_atk_hypertext_add_hyperlink(MyAtkHypertext* hypertext, - gint start_index, gint end_index, const gchar* uri) -{ - MyAtkHyperlink* new_hyperlink; - GArray* ranges = hypertext->hyperlink_ranges; - gint i; - for(i = 0; i < ranges->len; i++) - { - HyperlinkRange *range = &g_array_index(ranges, HyperlinkRange, i); - if(range->end_offset <= start_index) continue; - if(range->start_offset < end_index) return FALSE; - break; - } - new_hyperlink = my_atk_hyperlink_new(start_index, end_index, uri); - g_ptr_array_add(hypertext->hyperlinks, new_hyperlink); - HyperlinkRange new_range; - new_range.start_offset = start_index; - new_range.end_offset = end_index; - new_range.index = hypertext->hyperlinks->len - 1; - g_array_insert_val(ranges, i, new_range); - return TRUE; -} -// -void my_atk_hypertext_select_link(MyAtkHypertext* hypertext, gint index) -{ - if(index < 0 || index >= my_atk_hypertext_get_n_links((AtkHypertext*)hypertext)) - return; - - if(hypertext->current_selected_link != -1) - { - MyAtkHyperlink *selected_link_old = - (MyAtkHyperlink*)my_atk_hypertext_get_link( - (AtkHypertext*)hypertext, hypertext->current_selected_link); - selected_link_old->is_selected = FALSE; - } - - hypertext->current_selected_link = index; - MyAtkHyperlink *selected_link_new = (MyAtkHyperlink*)my_atk_hypertext_get_link( - (AtkHypertext*)hypertext, hypertext->current_selected_link); - selected_link_new->is_selected = TRUE; - - g_signal_emit_by_name(hypertext, - "link-selected", hypertext->current_selected_link); -} -//initialize/finalize functions -static void my_atk_hypertext_instance_init(GTypeInstance *obj, gpointer g_class) -{ - MyAtkHypertext *self = (MyAtkHypertext*)obj; - - self->hyperlink_ranges = g_array_new(FALSE, FALSE, sizeof(HyperlinkRange)); - self->hyperlinks = g_ptr_array_new(); - - self->current_selected_link = -1; -} -static void my_atk_hypertext_instance_finalize(GObject* obj) -{ - MyAtkHypertext *self = (MyAtkHypertext*)obj; - - g_array_free(self->hyperlink_ranges, FALSE); - - g_ptr_array_foreach(self->hyperlinks,(GFunc)g_object_unref, NULL); - g_ptr_array_free(self->hyperlinks, FALSE); -} - -static void my_atk_hypertext_class_init(gpointer g_class, gpointer class_data) -{ - GObjectClass* g_object_class = (GObjectClass*)g_class; - //GObject virtual table - g_object_class->finalize = my_atk_hypertext_instance_finalize; - //parent_class - parent_class_atk_text = g_type_class_peek_parent(g_class); -} -static void my_atk_hypertext_interface_init(gpointer g_iface, gpointer iface_data) -{ - AtkHypertextIface *klass = (AtkHypertextIface*)g_iface; - - klass->get_link = my_atk_hypertext_get_link; - klass->get_n_links = my_atk_hypertext_get_n_links; - klass->get_link_index = my_atk_hypertext_get_link_index; -} - -GType my_atk_hypertext_get_type() -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo typeInfo = - { - sizeof(MyAtkHypertextClass), - NULL, //base_init - NULL, //base_finalize - my_atk_hypertext_class_init, //class_init - NULL, //class_finalize - NULL, //class_data - sizeof(MyAtkHypertext), - 0, //n_preallocs - my_atk_hypertext_instance_init //instance_init - }; - - static const GInterfaceInfo AtkTextIface_info = - { - my_atk_text_interface_init, /* interface_init*/ - NULL, /* interface_finalize*/ - NULL /* interface_data */ - }; - static const GInterfaceInfo AtkHypertextIface_info = - { - my_atk_hypertext_interface_init,/* interface_init*/ - NULL, /* interface_finalize*/ - NULL /* interface_data */ - }; - type = g_type_register_static(MY_TYPE_ATK_TEXT, "MyAtkHypertext", &typeInfo, 0); - g_type_add_interface_static(type, - ATK_TYPE_TEXT, - &AtkTextIface_info); - - g_type_add_interface_static(type, - ATK_TYPE_HYPERTEXT, - &AtkHypertextIface_info); - } - return type; -} diff --git a/tests/dummyatk/my-atk-hypertext.h b/tests/dummyatk/my-atk-hypertext.h deleted file mode 100644 index 50d02cf..0000000 --- a/tests/dummyatk/my-atk-hypertext.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef MY_ATK_HYPERTEXT_H -#define MY_ATK_HYPERTEXT_H -/* - * MyAtkHypertext: implements AtkHypertext - */ -#include <atk/atk.h> -#include <my-atk-text.h> - -#define MY_TYPE_ATK_HYPERTEXT (my_atk_hypertext_get_type ()) -#define MY_ATK_HYPERTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertext)) -#define MY_ATK_HYPERTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertextClass)) -#define MY_IS_ATK_HYPERTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_HYPERTEXT)) -#define MY_IS_ATK_HYPERTEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_HYPERTEXT)) -#define MY_ATK_HYPERTEXT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_HYPERTEXT, MyAtkHypertextClass)) - -typedef struct _MyAtkHypertext MyAtkHypertext; -typedef struct _MyAtkHypertextClass MyAtkHypertextClass; - -struct _MyAtkHypertext -{ - MyAtkText parent; - - GArray* hyperlink_ranges; - GPtrArray* hyperlinks; - - gint current_selected_link; -}; - -struct _MyAtkHypertextClass -{ - MyAtkTextClass parent; -}; -#endif /*MY_ATK_HYPERTEXT_H*/ diff --git a/tests/dummyatk/my-atk-object.c b/tests/dummyatk/my-atk-object.c deleted file mode 100644 index 4029424..0000000 --- a/tests/dummyatk/my-atk-object.c +++ /dev/null @@ -1,186 +0,0 @@ - -#include <stdio.h> -#include <atk/atk.h> - -#include "my-atk-object.h" - -static AtkObjectClass *atk_object_parent_class = NULL; - -void my_atk_object_add_child(MyAtkObject* parent, MyAtkObject* child) -{ - g_ptr_array_add(parent->children, child); - g_object_ref_sink(child); - - atk_object_set_parent(ATK_OBJECT(child), ATK_OBJECT(parent)); - - g_signal_emit_by_name(parent, "children-changed::add", - parent->children->len - 1, child); -} - -void my_atk_object_remove_child(MyAtkObject* parent, MyAtkObject* child) -{ - gint i; - for(i = parent->children->len - 1; i >= 0; i--) - { - if(g_ptr_array_index(parent->children, i) == child) break; - } - if(i < 0)return; - - g_ptr_array_remove_index(parent->children, i); - g_object_unref(child); - g_signal_emit_by_name(parent, "children-changed::remove", - i, child); -} - -static void my_atk_object_set_parent(AtkObject *accessible, AtkObject *parent) -{ - g_return_if_fail(parent != NULL); - - MyAtkObject *self = MY_ATK_OBJECT(accessible); - AtkObject *parent_old = (atk_object_get_parent(accessible)); - - if(parent_old == parent) - { - //nothing to do because parent does not change - return; - } - - //set field 'parent' in child using 'base-method' - atk_object_parent_class->set_parent(accessible, parent); - - if(parent_old != NULL) - { - my_atk_object_remove_child((MyAtkObject*)parent_old, self); - } -} - -static gint my_atk_object_get_n_children(AtkObject *accessible) -{ - return MY_ATK_OBJECT(accessible)->children->len; -} - -static AtkObject* my_atk_object_ref_child(AtkObject *accessible, gint i) -{ - MyAtkObject *self = MY_ATK_OBJECT(accessible); - if(i < 0 || i >= self->children->len) - { - printf("ref_child: Incorrect index of child.\n"); - return NULL; - } - - AtkObject* child = (AtkObject*) - g_ptr_array_index(self->children, i); - - return (child == NULL) ? NULL : g_object_ref(child); -} - -static gint my_atk_object_get_index_in_parent(AtkObject *accessible) -{ - AtkObject *parent = atk_object_get_parent(accessible); - if(parent == NULL) return -1;//no parent - - MyAtkObject *parent_my = MY_ATK_OBJECT(parent); - - int i = parent_my->children->len; - for(; i>=0; i--) - { - if(g_ptr_array_index(parent_my->children,i) == accessible) - break; - } - if(i < 0)printf("Something wrong in parent-child strucutre.\n"); - return i;//if error, i will be equal to -1 -} - -static AtkStateSet *my_atk_object_ref_state_set(AtkObject *accessible) -{ - MyAtkObject *obj = MY_ATK_OBJECT(accessible); - - if (obj->state_set == NULL) - obj->state_set = atk_state_set_new(); - return g_object_ref(G_OBJECT(obj->state_set)); -} - -static AtkAttributeSet *my_atk_object_get_attributes (AtkObject *accessible) -{ - MyAtkObject *obj = MY_ATK_OBJECT(accessible); - AtkAttributeSet *rs = obj->attributes = NULL; - AtkAttribute *a, *b, *c; - - a = g_new(AtkAttribute, 1); - b = g_new(AtkAttribute, 1); - c = g_new(AtkAttribute, 1); - - a->name = g_strdup("foo"); - a->value = g_strdup("bar"); - b->name = g_strdup("baz"); - b->value = g_strdup("qux"); - c->name = g_strdup("quux"); - c->value = g_strdup("corge"); - - rs = g_slist_append(rs, (gpointer) a); - rs = g_slist_append(rs, (gpointer) b); - rs = g_slist_append(rs, (gpointer) c); -} - -//function, needed in instance_finalize() -static void my_unref1(gpointer data, gpointer user_data) -{ - g_object_unref(data); -} - -static void my_atk_object_instance_finalize(GObject *obj) -{ - MyAtkObject *self = (MyAtkObject*) obj; - //unrefs all children - g_ptr_array_foreach(self->children, my_unref1, NULL); - //then free array (without frees pointers) - g_ptr_array_free(self->children, FALSE); - //chain to parent class - G_OBJECT_CLASS(atk_object_parent_class)->finalize(obj); -} - -void my_atk_object_class_init(gpointer g_class, gpointer g_class_data) -{ - AtkObjectClass *atkObjectClass = (AtkObjectClass*)g_class; - - ((GObjectClass*)g_class)->finalize = my_atk_object_instance_finalize; - //set pointers to new functions in table of virtuals functions - atkObjectClass->set_parent = my_atk_object_set_parent; - atkObjectClass->get_n_children = my_atk_object_get_n_children; - atkObjectClass->ref_child = my_atk_object_ref_child; - atkObjectClass->get_index_in_parent = my_atk_object_get_index_in_parent; - atkObjectClass->ref_state_set = my_atk_object_ref_state_set; - atkObjectClass->get_attributes = my_atk_object_get_attributes; - - atk_object_parent_class = g_type_class_peek_parent(g_class); -} - -static void my_atk_object_instance_init(GTypeInstance *obj, gpointer g_class) -{ - MyAtkObject *self = (MyAtkObject*)obj; - - self->children = g_ptr_array_sized_new(10); - self->attributes = g_slist_alloc(); -} - -GType my_atk_object_get_type() -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo typeInfo = - { - sizeof(MyAtkObjectClass), - NULL, //base_init - NULL, //base_finalize - my_atk_object_class_init, //class_init - NULL, //class_finalize - NULL, //class_data - sizeof(MyAtkObject), - 0, //n_preallocs - my_atk_object_instance_init //instance_init - }; - type = g_type_register_static(ATK_TYPE_OBJECT,"MyAtkObject",&typeInfo,0); - } - return type; -} diff --git a/tests/dummyatk/my-atk-object.h b/tests/dummyatk/my-atk-object.h deleted file mode 100644 index 72a4aea..0000000 --- a/tests/dummyatk/my-atk-object.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef MY_ATK_OBJECT_H -#define MY_ATK_OBJECT_H - -#include <atk/atk.h> - -#define MY_TYPE_ATK_OBJECT (my_atk_object_get_type ()) -#define MY_ATK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_OBJECT, MyAtkObject)) -#define MY_ATK_OBJECT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_OBJECT, MyAtkObjectClass)) -#define MY_IS_ATK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_OBJECT)) -#define MY_IS_ATK_OBJECT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_OBJECT)) -#define MY_ATK_OBJECT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_OBJECT, MyAtkObjectClass)) - -typedef struct _MyAtkObject MyAtkObject; -typedef struct _MyAtkObjectClass MyAtkObjectClass; - -struct _MyAtkObject -{ - AtkObject parent; - //array of children - AtkStateSet *state_set; - AtkAttributeSet *attributes; - GPtrArray* children; - gint id; -}; - -struct _MyAtkObjectClass -{ - AtkObjectClass parent; -}; - -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/dummyatk/my-atk-selection.c b/tests/dummyatk/my-atk-selection.c deleted file mode 100644 index e3f386f..0000000 --- a/tests/dummyatk/my-atk-selection.c +++ /dev/null @@ -1,332 +0,0 @@ -/* This file contains both declaration and definition of the MyAtkSelection, - * a GObject that implements the AtkSelectionIface interface. - */ - -#include <glib-object.h> -#include <atk/atk.h> - -#include "my-atk-object.h" -#include "my-atk-selection.h" - -/******************************************************************/ -/* Implementation */ -/******************************************************************/ -static GObjectClass *parent_class_simple_selection = NULL; - -/* Implementation of the AtkSelectionIface interface. */ -static gboolean -simple_selection_add_selection (AtkSelection *selection, gint i) -{ - MyAtkSelection* self = (MyAtkSelection*)selection; - if ((!self) || self->disposed) - { - return FALSE; - } - - if ((i >= 0) && (i < TEST_SELECTION_NCHILDREN)) - { - /* If the child is not selected, select it and send the signal */ - if (!self->is_selected[i]) - { - self->is_selected[i] = TRUE; - g_signal_emit_by_name ((gpointer)self, "selection-changed"); - } - - return TRUE; - } - else - { - return FALSE; - } - -} - -static gboolean -simple_selection_clear_selection (AtkSelection *selection) -{ - MyAtkSelection* self = (MyAtkSelection*)selection; - if ((!self) || self->disposed) - { - return FALSE; - } - - /* clear selection */ - { - gboolean changed = FALSE; - int i; - for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i) - { - changed |= self->is_selected[i]; - self->is_selected[i] = FALSE; - } - - if (changed) - { - g_signal_emit_by_name ((gpointer)self, "selection-changed"); - } - } - - return TRUE; -} - -static AtkObject* -simple_selection_ref_selection (AtkSelection *selection, gint i) -{ - int pos; - int nsel; - MyAtkSelection* self = (MyAtkSelection*)selection; - if ((!self) || self->disposed) - { - return NULL; - } - - nsel = 0; - for (pos = 0; pos < TEST_SELECTION_NCHILDREN; ++pos) - { - if (self->is_selected[pos]) - { - if (i == nsel) - { - g_object_ref (G_OBJECT (self->child[pos])); - return ATK_OBJECT(self->child[pos]); - } - ++nsel; - } - } - - return NULL; -} - -static gint -simple_selection_get_selection_count (AtkSelection *selection) -{ - MyAtkSelection* self = (MyAtkSelection*)selection; - - int cnt = 0; - int i; - - if ((!self) || self->disposed) - { - return 0; - } - - for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i) - { - if (self->is_selected[i]) - { - ++cnt; - } - } - - return cnt; -} - -static gboolean -simple_selection_is_child_selected (AtkSelection *selection, gint i) -{ - MyAtkSelection* self = (MyAtkSelection*)selection; - if ((!self) || self->disposed) - { - return FALSE; - } - - if ((i >= 0) && (i < TEST_SELECTION_NCHILDREN)) - { - return (self->is_selected[i]); - } - else - { - return FALSE; - } -} - -static gboolean -simple_selection_remove_selection (AtkSelection *selection, gint i) -{ - int pos; - int nsel; - - MyAtkSelection* self = (MyAtkSelection*)selection; - if ((!self) || self->disposed) - { - return FALSE; - } - - nsel = 0; - for (pos = 0; pos < TEST_SELECTION_NCHILDREN; ++pos) - { - if (self->is_selected[pos]) - { - if (i == nsel) - { - self->is_selected[pos] = FALSE; - g_signal_emit_by_name ((gpointer)self, "selection-changed"); - return TRUE; - } - ++nsel; - } - } - - return TRUE; -} - -static gboolean -simple_selection_select_all_selection (AtkSelection *selection) -{ - MyAtkSelection* self = (MyAtkSelection*)selection; - if ((!self) || self->disposed) - { - return FALSE; - } - - if (!self->multisel_supported) - { - return FALSE; - } - - /* select all */ - { - gboolean changed = FALSE; - int i; - for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i) - { - changed |= !self->is_selected[i]; - self->is_selected[i] = TRUE; - } - - if (changed) - { - g_signal_emit_by_name ((gpointer)self, "selection-changed"); - } - } - - return TRUE; -} - -/******************************************************************/ -static void -simple_selection_interface_init (gpointer g_iface, gpointer iface_data) -{ - AtkSelectionIface *klass = (AtkSelectionIface *)g_iface; - - /* set up overrides here */ - klass->add_selection = - (gboolean (*) (AtkSelection *selection, gint i)) simple_selection_add_selection; - - klass->clear_selection = - (gboolean (*) (AtkSelection *selection)) simple_selection_clear_selection; - - klass->ref_selection = - (AtkObject* (*) (AtkSelection *selection, gint i)) simple_selection_ref_selection; - - klass->get_selection_count = - (gint (*) (AtkSelection *selection)) simple_selection_get_selection_count; - - klass->is_child_selected = - (gboolean (*) (AtkSelection *selection, gint i)) simple_selection_is_child_selected; - - klass->remove_selection = - (gboolean (*) (AtkSelection *selection, gint i)) simple_selection_remove_selection; - - klass->select_all_selection = - (gboolean (*) (AtkSelection *selection)) simple_selection_select_all_selection; -} - -static void -simple_selection_instance_init (GTypeInstance *instance, gpointer g_class) -{ - MyAtkSelection *self = (MyAtkSelection *)instance; - int i; - - self->disposed = FALSE; - self->multisel_supported = TRUE; - for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i) - { - self->child[i] = MY_ATK_OBJECT (g_object_new (MY_TYPE_ATK_OBJECT, NULL)); - self->child[i]->id = i; - self->is_selected[i] = FALSE; /* not selected by default */ - } -} - -static void -my_atk_selection_dispose (GObject *obj) -{ - MyAtkSelection *self = (MyAtkSelection *)obj; - int i; - - if (self->disposed) - { - return; - } - - /* Make sure dispose does not run twice. */ - self->disposed = TRUE; - - for (i = 0; i < TEST_SELECTION_NCHILDREN; ++i) - { - g_object_unref (G_OBJECT (self->child[i])); - } - - /* Chain up to the parent class */ - G_OBJECT_CLASS (parent_class_simple_selection)->dispose (obj); -} - -static void -my_atk_selection_finalize (GObject *obj) -{ - /*MyAtkSelection *self = (MyAtkSelection *)obj; - if (self) - { - }*/ - - /* Chain up to the parent class */ - G_OBJECT_CLASS (parent_class_simple_selection)->finalize (obj); -} - -static void -my_atk_selection_class_init (gpointer g_class, gpointer g_class_data) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (g_class); - MyAtkSelectionClass *klass = MY_ATK_SELECTION_CLASS (g_class); - - gobject_class->dispose = my_atk_selection_dispose; - gobject_class->finalize = my_atk_selection_finalize; - - parent_class_simple_selection = g_type_class_peek_parent (klass); -} - -GType -my_atk_selection_get_type (void) -{ - static GType type = 0; - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (MyAtkSelectionClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - my_atk_selection_class_init, /* class_init */ - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (MyAtkSelection), - 0, /* n_preallocs */ - simple_selection_instance_init /* instance_init */ - }; - - static const GInterfaceInfo iface_info = - { - (GInterfaceInitFunc) simple_selection_interface_init, /* interface_init */ - NULL, /* interface_finalize */ - NULL /* interface_data */ - }; - type = g_type_register_static (MY_TYPE_ATK_OBJECT, - "MyAtkSelectionType", - &info, 0); - g_type_add_interface_static (type, - ATK_TYPE_SELECTION, - &iface_info); - } - return type; -} - diff --git a/tests/dummyatk/my-atk-selection.h b/tests/dummyatk/my-atk-selection.h deleted file mode 100644 index 8e8fcf5..0000000 --- a/tests/dummyatk/my-atk-selection.h +++ /dev/null @@ -1,55 +0,0 @@ -/* This file contains both declaration and definition of the MyAtkSelection, - * a GObject that implements the AtkSelectionIface interface. - */ - -#ifndef MY_ATK_SELECTION_H -#define MY_ATK_SELECTION_H - -#include <glib-object.h> -#include <atk/atk.h> - -#include <my-atk-object.h> - -#define MY_TYPE_ATK_SELECTION (my_atk_selection_get_type ()) -#define MY_ATK_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_SELECTION, MyAtkSelection)) -#define MY_ATK_SELECTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_SELECTION, MyAtkSelectionClass)) -#define MY_IS_ATK_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_SELECTION)) -#define MY_IS_ATK_SELECTION_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_SELECTION)) -#define MY_ATK_SELECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_SELECTION, MyAtkSelectionClass)) - -/* Number of child objects for the MyAtkSelection instance */ -#define TEST_SELECTION_NCHILDREN 10 - -typedef struct _MyAtkSelection MyAtkSelection; -typedef struct _MyAtkSelectionClass MyAtkSelectionClass; - -struct _MyAtkSelection -{ - MyAtkObject parent; - - gboolean disposed; - - /* TRUE if multiple selection is supported, FALSE otherwise. - * default - TRUE. - */ - gboolean multisel_supported; - - /* Children of this object */ - MyAtkObject* child[TEST_SELECTION_NCHILDREN]; - - /* is_selected[i] == TRUE means the ith child is selected, == FALSE - - * it is not. - */ - gboolean is_selected[TEST_SELECTION_NCHILDREN]; -}; - -struct _MyAtkSelectionClass -{ - MyAtkObjectClass parent; -}; - -GType -my_atk_selection_get_type (void); - -#endif /*MY_ATK_SELECTION_H*/ - diff --git a/tests/dummyatk/my-atk-streamable-content.c b/tests/dummyatk/my-atk-streamable-content.c deleted file mode 100644 index 460dd9a..0000000 --- a/tests/dummyatk/my-atk-streamable-content.c +++ /dev/null @@ -1,96 +0,0 @@ -#include <atk/atk.h> - -#include "my-atk-object.h" -#include "my-atk-streamable-content.h" - -//*************************implementation*********************** -//implementation of virtual functions -//*****************get_n_mime_types************ -static gint my_atk_streamable_content_get_n_mime_types( - AtkStreamableContent *streamable) -{ - g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), 0); - - return sizeof(mime_types) / sizeof(mime_types[0]); -} -//*****************get_mime_type**************** -static const gchar* my_atk_streamable_content_get_mime_type( - AtkStreamableContent *streamable, - gint i) -{ - g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), NULL); - - if((i < 0) || (i >= sizeof(mime_types) / sizeof(mime_types[0]))) - { - return NULL; - } - return mime_types[i]; -} -//**********************get_stream******************* -static GIOChannel* my_atk_streamable_content_get_stream( - AtkStreamableContent *streamable, - const gchar* mime_type) -{ - gint i; - g_return_val_if_fail(MY_IS_ATK_STREAMABLE_CONTENT(streamable), NULL); - - for(i = 0; i < sizeof(mime_types) / sizeof(mime_types[0]); i++) - { - if(strcmp(mime_type, mime_types[i]) == 0) - { - GError *error = NULL; - gchar* full_filename = T2C_GET_DATA_PATH(file_names[i]); - GIOChannel* channel = g_io_channel_new_file(full_filename, "r", &error); - if(error != NULL) - { - TRACE("Cannot open file '%s' for read: %s", full_filename, - error->message); - g_error_free(error); - } - g_free(full_filename); - return channel; - } - } - return NULL; -} -//others functions -static void my_atk_streamable_content_interface_init(gpointer g_iface, gpointer iface_data) -{ - AtkStreamableContentIface *klass = (AtkStreamableContentIface*)g_iface; - - klass->get_n_mime_types = my_atk_streamable_content_get_n_mime_types; - klass->get_mime_type = my_atk_streamable_content_get_mime_type; - klass->get_stream = my_atk_streamable_content_get_stream; -} - -GType my_atk_streamable_content_get_type() -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo typeInfo = - { - sizeof(MyAtkStreamableContentClass), - NULL, //base_init - NULL, //base_finalize - NULL, //class_init - NULL, //class_finalize - NULL, //class_data - sizeof(MyAtkStreamableContent), - 0, //n_preallocs - NULL //instance_init - }; - - static const GInterfaceInfo iface_info = - { - my_atk_streamable_content_interface_init, /* interface_init*/ - NULL, /* interface_finalize*/ - NULL /* interface_data */ - }; - type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkStreamableContent", &typeInfo, 0); - g_type_add_interface_static(type, - ATK_TYPE_STREAMABLE_CONTENT, - &iface_info); - } - return type; -} diff --git a/tests/dummyatk/my-atk-streamable-content.h b/tests/dummyatk/my-atk-streamable-content.h deleted file mode 100644 index 7a476ac..0000000 --- a/tests/dummyatk/my-atk-streamable-content.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef MY_ATK_STREAMABLE_CONTENT_H -#define MY_ATK_STREAMABLE_CONTENT_H - -/* - * MyAtkStreamableContent: derives GObject and implements AtkStreamableContent - */ - -#include <atk/atk.h> - -#include "my-atk-object.h" - -#define MY_TYPE_ATK_STREAMABLE_CONTENT (my_atk_streamable_content_get_type ()) -#define MY_ATK_STREAMABLE_CONTENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContent)) -#define MY_ATK_STREAMABLE_CONTENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContentClass)) -#define MY_IS_ATK_STREAMABLE_CONTENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_STREAMABLE_CONTENT)) -#define MY_IS_ATK_STREAMABLE_CONTENT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_STREAMABLE_CONTENT)) -#define MY_ATK_STREAMABLE_CONTENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_STREAMABLE_CONTENT, MyAtkStreamableContentClass)) - -typedef struct _MyAtkStreamableContent MyAtkStreamableContent; -typedef struct _MyAtkStreamableContentClass MyAtkStreamableContentClass; - -static const gchar* mime_types[]={"text/plain", "text/richtext"}; -static const gchar* file_names[]={"file1", "file2"}; -struct _MyAtkStreamableContent -{ - MyAtkObject parent; -}; - -struct _MyAtkStreamableContentClass -{ - MyAtkObjectClass parent; -}; - -GType my_atk_streamable_content_get_type(); -#endif /*MY_ATK_STREAMABLE_CONTENT_H*/ diff --git a/tests/dummyatk/my-atk-table.c b/tests/dummyatk/my-atk-table.c deleted file mode 100644 index a76c70e..0000000 --- a/tests/dummyatk/my-atk-table.c +++ /dev/null @@ -1,177 +0,0 @@ -/* This file contains both declaration and definition of the MyAtkTable, - * a GObject that pretends to implement the AtkTableIface interface (it - * registers appropriate interface), but provides no implementation for any of the - * methods of this interface (NULL-filled vftbl). - */ - -#include <glib-object.h> -#include <atk/atk.h> - -#include "my-atk-object.h" -#include "my-atk-table.h" - -/////////////////////////////////////////////////////////////////////////// -// Helper functions and data -/////////////////////////////////////////////////////////////////////////// -void -my_atk_table_select_rows (MyAtkTable* table, gboolean sel_scheme[]) -{ - // the function does nothing -} - -void -my_atk_table_select_columns (MyAtkTable* table, gboolean sel_scheme[]) -{ - // the function does nothing -} - -/////////////////////////////////////////////////////////////////////////// -// Implementation -/////////////////////////////////////////////////////////////////////////// -static GObjectClass *parent_class_table = NULL; - -/******************************************************************/ -static void -table_interface_init (gpointer g_iface, gpointer iface_data) -{ - AtkTableIface *klass = (AtkTableIface *)g_iface; - - /* set up overrides here */ - klass-> ref_at = - (AtkObject* (*) (AtkTable *table, gint row, gint column)) NULL; - klass-> get_index_at = - (gint (*) (AtkTable *table, gint row, gint column)) NULL; - klass-> get_column_at_index = - (gint (*) (AtkTable *table, gint index_)) NULL; - klass-> get_row_at_index = - (gint (*) (AtkTable *table, gint index_)) NULL; - klass-> get_n_columns = - (gint (*) (AtkTable *table)) NULL; - klass-> get_n_rows = - (gint (*) (AtkTable *table)) NULL; - klass-> get_column_extent_at = - (gint (*) (AtkTable *table, gint row, gint column)) NULL; - klass-> get_row_extent_at = - (gint (*) (AtkTable *table, gint row, gint column)) NULL; - klass-> get_caption = - (AtkObject* (*) (AtkTable *table)) NULL; - klass-> get_column_description = - (const gchar* (*) (AtkTable *table, gint column)) NULL; - klass-> get_column_header = - (AtkObject* (*) (AtkTable *table, gint column)) NULL; - klass-> get_row_description = - (const gchar* (*) (AtkTable *table, gint row)) NULL; - klass-> get_row_header = - (AtkObject* (*) (AtkTable *table, gint row)) NULL; - klass-> get_summary = - (AtkObject* (*) (AtkTable *table)) NULL; - klass-> set_caption = - (void (*) (AtkTable *table, AtkObject *caption)) NULL; - klass-> set_column_description = - (void (*) (AtkTable *table, gint column, const gchar *description)) NULL; - klass-> set_column_header = - (void (*) (AtkTable *table, gint column, AtkObject *header)) NULL; - klass-> set_row_description = - (void (*) (AtkTable *table, gint row, const gchar *description)) NULL; - klass-> set_row_header = - (void (*) (AtkTable *table, gint row, AtkObject *header)) NULL; - klass-> set_summary = - (void (*) (AtkTable *table, AtkObject *accessible)) NULL; - klass-> get_selected_columns = - (gint (*) (AtkTable *table, gint **selected)) NULL; - klass-> get_selected_rows = - (gint (*) (AtkTable *table, gint **selected)) NULL; - klass-> is_column_selected = - (gboolean (*) (AtkTable *table, gint column)) NULL; - klass-> is_row_selected = - (gboolean (*) (AtkTable *table, gint row)) NULL; - klass-> is_selected = - (gboolean (*) (AtkTable *table, gint row, gint column)) NULL; - klass-> add_row_selection = - (gboolean (*) (AtkTable *table, gint row)) NULL; - klass-> remove_row_selection = - (gboolean (*) (AtkTable *table, gint row)) NULL; - klass-> add_column_selection = - (gboolean (*) (AtkTable *table, gint column)) NULL; - klass-> remove_column_selection = - (gboolean (*) (AtkTable *table, gint column)) NULL; -} - -static void -table_instance_init (GTypeInstance *instance, gpointer g_class) -{ - MyAtkTable *self = (MyAtkTable *)instance; - - self->disposed = FALSE; -} - -static void -my_atk_table_dispose (GObject *obj) -{ - MyAtkTable *self = (MyAtkTable *)obj; - - if (self->disposed) - { - return; - } - - /* Make sure dispose does not run twice. */ - self->disposed = TRUE; - - /* Chain up to the parent class */ - G_OBJECT_CLASS (parent_class_table)->dispose (obj); -} - -static void -my_atk_table_finalize (GObject *obj) -{ - /* Chain up to the parent class */ - G_OBJECT_CLASS (parent_class_table)->finalize (obj); -} - -static void -my_atk_table_class_init (gpointer g_class, gpointer g_class_data) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (g_class); - MyAtkTableClass *klass = MY_ATK_TABLE_CLASS (g_class); - - gobject_class->dispose = my_atk_table_dispose; - gobject_class->finalize = my_atk_table_finalize; - - parent_class_table = g_type_class_peek_parent (klass); -} - -GType -my_atk_table_get_type (void) -{ - static GType type = 0; - if (type == 0) - { - static const GTypeInfo info = - { - sizeof (MyAtkTableClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - my_atk_table_class_init, /* class_init */ - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (MyAtkTable), - 0, /* n_preallocs */ - table_instance_init /* instance_init */ - }; - - static const GInterfaceInfo iface_info = - { - (GInterfaceInitFunc) table_interface_init, /* interface_init */ - NULL, /* interface_finalize */ - NULL /* interface_data */ - }; - type = g_type_register_static (MY_TYPE_ATK_OBJECT, - "MyAtkTableType", - &info, 0); - g_type_add_interface_static (type, - ATK_TYPE_TABLE, - &iface_info); - } - return type; -} diff --git a/tests/dummyatk/my-atk-table.h b/tests/dummyatk/my-atk-table.h deleted file mode 100644 index 7860a2d..0000000 --- a/tests/dummyatk/my-atk-table.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef MY_ATK_TABLE_H -#define MY_ATK_TABLE_H - -#include <glib-object.h> -#include <atk/atk.h> -#include <my-atk-object.h> - -#define MY_TYPE_ATK_TABLE (my_atk_table_get_type ()) -#define MY_ATK_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_TABLE, MyAtkTable)) -#define MY_ATK_TABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_TABLE, MyAtkTableClass)) -#define MY_IS_ATK_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_TABLE)) -#define MY_IS_ATK_TABLE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_TABLE)) -#define MY_ATK_TABLE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_TABLE, MyAtkTableClass)) - -#define NROWS 4 /* row count */ -#define NCOLS 5 /* column count */ - -static gint ids[NROWS][NCOLS] = - { {0, 1, 2, 2, 3}, - {4, 5, 6, 7, 8}, - {9, 9, 10, 11, 12}, - {9, 9, 13, 14, -1} }; - -static gint row_ext[NROWS][NCOLS] = - { {1, 1, 1, 1, 1}, - {1, 1, 1, 1, 1}, - {2, 2, 1, 1, 1}, - {2, 2, 1, 1, 1} }; - -static gint col_ext[NROWS][NCOLS] = - { {1, 1, 2, 2, 1}, - {1, 1, 1, 1, 1}, - {2, 2, 1, 1, 1}, - {2, 2, 1, 1, 1} }; - -#define NCHILDREN 16 /* child object count */ - -// default string values -#define DEF_CAPTION_TEXT "Default table caption" -#define DEF_SUMMARY_TEXT "Default table summary" -#define DEF_ROW_DESCR_TPL "Row No%d" -#define DEF_COL_DESCR_TPL "Column No%d" - -/* row and column headers */ -typedef struct -{ - AtkObject* hdr; - gboolean selected; /* TRUE if the row/column is selected, FALSE otherwise */ -} TestSimpleHeaderStruct; - -/* This struct represents a table cell */ -typedef struct -{ - MyAtkObject* elem; /* the element */ - guint ext_row; /* its row extent */ - guint ext_col; /* its column extent */ -} TestSimpleCell; - -typedef struct _MyAtkTable MyAtkTable; -typedef struct _MyAtkTableClass MyAtkTableClass; - -struct _MyAtkTable -{ - MyAtkObject parent; - - gboolean disposed; - - MyAtkObject* child[NCHILDREN]; - MyAtkObject* not_a_child; - TestSimpleHeaderStruct row[NROWS]; - TestSimpleHeaderStruct col[NCOLS]; - guint nrows; - guint ncols; - AtkObject* caption; - AtkObject* summary; -}; - -struct _MyAtkTableClass -{ - MyAtkObjectClass parent; -}; - -GType -my_atk_table_get_type (void); - -#endif /*MY_ATK_TABLE_H*/ diff --git a/tests/dummyatk/my-atk-text.c b/tests/dummyatk/my-atk-text.c deleted file mode 100644 index 6729c4b..0000000 --- a/tests/dummyatk/my-atk-text.c +++ /dev/null @@ -1,1290 +0,0 @@ - -#include <atk/atk.h> -#include <string.h> -#include <limits.h> -#include <useful_functions.h> - -#include "my-atk-text.h" -//*************************implementation*********************** - -//Attributes -/* - * Auxiliary functions create/copy/print/free structures - * Use the same naming principe, as atk, but without 'atk' prefix - */ - //AtkAttribute -AtkAttribute* attribute_new(const gchar* name, const gchar* value) -{ - AtkAttribute* attr = g_malloc(sizeof(AtkAttribute)); - if(attr == NULL) return NULL; - attr->name = g_strdup(name); - attr->value = g_strdup(value); - return attr; -} -AtkAttribute* attribute_copy(AtkAttribute* attr) -{ - return attribute_new(attr->name, attr->value); -} -void attribute_print(AtkAttribute* attr) -{ - TRACE("name=%s, value=%s", attr->name, attr->value); -} - -//AtkAttributeSet -AtkAttributeSet* attribute_set_copy(AtkAttributeSet* attr) -{ - GSList *tmp; - AtkAttributeSet* result = g_slist_copy(attr); - for(tmp = result; tmp != NULL; tmp = tmp->next) - tmp->data = attribute_copy((AtkAttribute*)tmp->data); - return result; -} -void attribute_set_print(AtkAttributeSet *set) -{ - if(set == NULL) - TRACE0("(empty)"); - else - g_slist_foreach(set, (GFunc)attribute_print, NULL); -} - -// STATIC FUNCTIONS -// -//auxiliary functions for search tokens -//Number of different characters -#define TABLE_SIZE 256 -//modificator static isn't used because this tables will be use in tests -/*static*/ gboolean table_word_symbols[TABLE_SIZE], - table_sentence_symbols[TABLE_SIZE], - table_line_symbols[TABLE_SIZE]; -static gboolean *tables[7]={NULL, - table_word_symbols, - table_word_symbols, - table_sentence_symbols, - table_sentence_symbols, - table_line_symbols, - table_line_symbols - }; - -static gboolean current_token(const gchar* str, gint offset, gint *token_start, gint *token_end, - const gboolean table_token_symbols[TABLE_SIZE]) -{ - const gchar *current = str + offset; - if(!table_token_symbols[(guchar)*current]) - { - return FALSE; - } - for( --current; (current >= str) && table_token_symbols[(guchar)*current]; --current); - *token_start = current - str + 1; - for(current = str + offset + 1; - (*current != 0) && table_token_symbols[(guchar)*current]; ++current); - *token_end = current - str; - return TRUE; -} -static gboolean next_token(const gchar* str, gint offset, gint *token_start, gint *token_end, - const gboolean table_token_symbols[TABLE_SIZE]) -{ - const gchar *current = str + offset; - for( ; (*current != 0) && table_token_symbols[(guchar)*current]; ++current); - if(*current == 0) - return FALSE; - for(++current ; (*current != 0) && !table_token_symbols[(guchar)*current]; ++current); - if(!table_token_symbols[(guchar)*current]) - return FALSE; - return current_token(str, current - str, token_start, token_end, table_token_symbols); -} -static gboolean previous_token(const gchar* str, gint offset, gint *token_start, gint *token_end, - const gboolean table_token_symbols[TABLE_SIZE]) -{ - const gchar *current = str + offset; - for( ; (current > str) && table_token_symbols[(guchar)*current]; --current); - if(current == str) - return FALSE; - for( ; (current > str) && !table_token_symbols[(guchar)*current]; --current); - if(!table_token_symbols[(guchar)*current]) - return FALSE; - return current_token(str, current - str, token_start, token_end, table_token_symbols); -} - - -//Range: type of data, containing in list of attributes -typedef struct -{ - gint start,end;//range, containing this attributes - AtkAttributeSet* attributeSet; -} Range; -//auxiliary functions for ranges -Range* range_new(gint start, gint end) -{ - Range *range = g_malloc(sizeof(Range)); - range->start = start; - range->end = end; - range->attributeSet = NULL; - return range; -} - -void range_free(Range* range) -{ - atk_attribute_set_free(range->attributeSet); - g_free(range); -} -void range_print(const Range*range) -{ - TRACE("[%d,%d):", range->start, range->end); - attribute_set_print(range->attributeSet); -} -//only for correct list of ranges - ranges shouldn't intersect -gint range_compare(const Range* range1, const Range* range2) -{ - return range1->start - range2->start;//never equal -} -//Bounds of text -void text_bounds_init(TextBounds *bounds) -{ - bounds->base_x = 0; - bounds->base_y = 0; - bounds->pixels_above_line = 2; - bounds->pixels_below_line = 3; - bounds->size = 8; - bounds->pixels_between_characters = 1; - bounds->width = 3; -} - -//auxiliary function - create new range according to start_offset and end_offset -AtkTextRange* text_range_new(AtkText* text, - gint start_offset, gint end_offset, AtkCoordType coord_type) -{ - AtkTextRange* range = g_malloc(sizeof(AtkTextRange)); - if(range == NULL) return NULL; - range->start_offset = start_offset; - range->end_offset = end_offset; - range->content = atk_text_get_text(text, start_offset, end_offset); - atk_text_get_range_extents(text, start_offset, end_offset, coord_type, &range->bounds); - return range; -} -// Returns number of line, which contain given character. -// Also return relative offset - offset of this character from start of the line -gint get_character_line(MyAtkText *text, gint offset, gint *relative_offset) -{ - gint result = 0; - //simple realization - counts lines from start of the text, until reaches offset - const guchar *text_str = (guchar*)text->str; - gboolean state_FSM = table_line_symbols[text_str[0]]; - gint i, last_line_start = 0; - for(i = 1; i <= offset; state_FSM = table_line_symbols[text_str[i++]]) - { - if(state_FSM)continue; - result++; - last_line_start = i; - } - if(relative_offset != NULL) *relative_offset = offset - last_line_start; - return result; -} -// Compute extent of character, -// as it was at line 'line' and at offset 'relative_offset' in that line -//(geometry) -void get_extents(MyAtkText *text, gint line, gint relative_offset, AtkTextRectangle *rect) -{ - rect->x = text->bounds.base_x + relative_offset * - (text->bounds.width + text->bounds.pixels_between_characters); - rect->y = text->bounds.base_y + text->bounds.pixels_above_line + line * - (text->bounds.size + text->bounds.pixels_below_line + text->bounds.pixels_above_line); - rect->width = text->bounds.width; - rect->height = text->bounds.size; -} -//return line, corresponding to given y-coordinate -gint get_point_line(MyAtkText *text, gint y) -{ - //slightly differ from invers operation - if(y - text->bounds.base_y < 0)return -1; - return (y - text->bounds.base_y) - /(text->bounds.size + text->bounds.pixels_below_line + text->bounds.pixels_above_line); -} -// Returns offset from left boundary of text, correspondind to x-coordinate -gint get_point_relative_offset(MyAtkText *text, gint x) -{ - //slightly differ from invers operation - if(x - text->bounds.base_x < 0)return -1; - return (x - text->bounds.base_x) - /(text->bounds.width + text->bounds.pixels_between_characters); -} -// Returns offset where given line start(even if this line is empty) -// If line number too small(<0)return -1, if too big - return length of the text -gint get_offset_at_line_start(MyAtkText *text, gint line) -{ - gint i; - if(line < 0)return -1; - if(line == 0)return 0; - gint len = my_strlen(text->str); - guchar *str = (guchar*)text->str; - gint current_line = 0; - gboolean state_FSM = table_line_symbols[str[0]]; - for(i = 1; i < len; state_FSM = table_line_symbols[str[i++]]) - { - if(state_FSM || ++current_line != line)continue; - return i; - } - return len; - -} -// Return offset of character at the given line and at the given offset at this line -// If such character doesn't exist, return -1 -gint get_offset_at_line(MyAtkText *text, gint line, gint relative_offset) -{ - gint j; - if(line < 0 || relative_offset < 0)return -1; - const guchar* str = (guchar*)text->str; - gint len = my_strlen(text->str); - gint offset_at_line_start = get_offset_at_line_start(text, line); - if(offset_at_line_start + relative_offset >= len)return -1; - for(j = 0; j <= relative_offset; j++) - if(!table_line_symbols[str[offset_at_line_start + j]]) - return -1; - return offset_at_line_start + relative_offset; -} -/* - * Count ranges of text, which clipping by rel_start_offset and relative_end_offset. - * 'offset' stands start of search(start of first line), - * number_of_lines - maximum number of lines for search. - * If 'ranges' not NULL, writes ranges to it. 'coord_type' used only in this case. - */ -gint count_ranges(MyAtkText *text, gint offset, gint rel_start_offset, gint rel_end_offset, - gint number_of_lines, AtkTextRange** ranges, AtkCoordType coord_type) -{ - guchar *str = (guchar*)text->str; - gint len = my_strlen(text->str); - - gint number_of_ranges = 0; - gint current_line = 0; - gint current_line_start = offset; - for(;(current_line < number_of_lines) && (current_line_start < len); current_line ++) - { - if(!table_line_symbols[str[current_line_start]]) - { - current_line_start++; - continue; - } - gint start_offset,end_offset; - gchar *tmp_str = atk_text_get_text_at_offset((AtkText*)text, current_line_start, - ATK_TEXT_BOUNDARY_LINE_END, &start_offset, &end_offset); - g_free(tmp_str); - if(end_offset - current_line_start > rel_start_offset) - { - if(ranges != NULL) - { - gint range_start_offset = current_line_start + rel_start_offset; - gint range_end_offset = current_line_start + rel_end_offset + 1; - if(range_end_offset > end_offset) - range_end_offset = end_offset; - //add element - ranges[number_of_ranges] = text_range_new((AtkText*)text, - range_start_offset, range_end_offset, coord_type); - } - number_of_ranges++; - } - current_line_start = end_offset + 1; - } - if(ranges != NULL) ranges[number_of_ranges] = NULL; - return number_of_ranges; -} - -//"free"-functions(for internal using, because them don't emit signals) -void my_atk_text_free_run_attributes(MyAtkText *text) -{ - g_list_foreach(text->attributes, (GFunc)range_free, NULL); - g_list_free(text->attributes); - text->attributes = NULL; -} -void my_atk_text_free_default_attributes(MyAtkText *text) -{ - atk_attribute_set_free(text->default_attributes); - text->default_attributes = NULL; -} -void my_atk_text_clear_selections(MyAtkText *text) -{ - if(text->selections->len != 0) - g_array_remove_range(text->selections, 0, text->selections->len); -} -void table_symbols_init() -{ - //word - gint i; - for(i = TABLE_SIZE - 1;i > 0 ; --i) - table_word_symbols[i] = g_ascii_isalnum(i); - table_word_symbols['\0'] = FALSE; - //sentence - for(i = TABLE_SIZE - 1;i >= 0x20; --i) - table_sentence_symbols[i] = TRUE; - table_sentence_symbols['.'] = FALSE; - table_sentence_symbols['!'] = FALSE; - table_sentence_symbols['?'] = FALSE; - for(i = 0x1f;i > 0; --i) - table_sentence_symbols[i] = FALSE; - table_sentence_symbols['\0'] = FALSE; - //line - for(i = TABLE_SIZE - 1;i > 0 ; --i) - table_line_symbols[i] = TRUE; - table_line_symbols['\n'] = FALSE; - table_line_symbols['\0'] = FALSE; -} -void correct_selections_after_insert(MyAtkText *text, gint position, gint length) -{ - gint i; - GArray* selections = text->selections; - for(i = selections->len - 1; i >=0; i--) - { - TextSelection* sel = &g_array_index(selections, TextSelection, i); - if(sel->end_offset >= position) sel->end_offset+= length; - if(sel->start_offset >= position) sel->start_offset+= length; - else break; - } -} -void correct_selections_after_delete(MyAtkText *text, gint position, gint length) -{ - gint i; - GArray* selections = text->selections; - for(i = selections->len - 1; i >=0; i--) - { - TextSelection* sel = &g_array_index(selections, TextSelection, i); - if(sel->start_offset >= position) - { - if(sel->start_offset >= position + length) - { - sel->start_offset-= length; - sel->end_offset-= length; - } - //position <= sel->start_offset < position + length - else if(sel->end_offset > position + length) - { - sel->start_offset = position; - sel->end_offset -= length; - } - else - { - g_array_remove_index(selections, i); - } - continue; - } - /*sel->start_offset < position*/ - if(sel->end_offset > position + length) sel->end_offset-= length; - else if(sel->end_offset > position) sel->end_offset = position; - break; - } -} -void correct_attributes_after_insert(MyAtkText* text, gint position, gint length) -{ - GList *attributes = text->attributes; - GList *tmp; - //before inserted position - for(tmp = attributes; tmp != NULL; tmp = tmp -> next) - { - Range* range = (Range*)tmp->data; - if(range->end <= position)continue; - //range->end > position - if(range->start < position) - range->start -= length;//will be restore in the next loop - break; - } - //after inserted position - for(; tmp != NULL; tmp = tmp -> next) - { - Range* range = (Range*)tmp->data; - range->end += length; - range->start += length; - } -} -void correct_attributes_after_delete(MyAtkText* text, gint position, gint length) -{ - GList *attributes = text->attributes; - GList *tmp = attributes; - //before deleting range - for(tmp = attributes; tmp != NULL; tmp = tmp->next) - { - Range* range = (Range*)tmp->data; - if(range->end <= position) continue; - if(range->start < position) - { - if(range->end > position + length) range->end -= length; - else range->end = position; - tmp = tmp->next; - } - break; - } - //at deleting range - while(tmp != NULL) - { - Range* range = (Range*)tmp->data; - if(range->start >= position + length) break; - if(range->end <= position + length) - { - GList *tmp1 = tmp->next; - range_free(range); - attributes = g_list_remove_link(attributes, tmp); - tmp = tmp1; - continue; - } - //range->end > position + length - //range->start < position + length - range->start = position + length;//will be restored in next loop - break; - } - //after deleting range - for(;tmp != NULL; tmp = tmp->next) - { - Range* range = (Range*)tmp->data; - range->end -= length; - range->start -= length; - } - text->attributes = attributes; -} -void correct_caret_after_insert(MyAtkText* text, gint position, gint length) -{ - if(text->caret_offset > position)text->caret_offset += length; -} -void correct_caret_after_delete(MyAtkText* text, gint position, gint length) -{ - if(text->caret_offset >= position + length)text->caret_offset -= length; - else if(text->caret_offset > position) text->caret_offset = position; -} - -// Implementation of virtual functions -//******************************my_atk_text_get_character_count************************* -static gint my_atk_text_get_character_count(AtkText *text) -{ - MyAtkText *self = (MyAtkText*)text; - return my_strlen(self->str); -} -//**************************************my_atk_text_get_text***************************** -static gchar* my_atk_text_get_text(AtkText *text, gint start_offset, gint end_offset) -{ - gchar *str = ((MyAtkText*)text)->str; - if((start_offset < 0) || (end_offset > my_strlen(str)) || (end_offset <= start_offset)) - { - //incorrect bounds - return NULL; - } - return g_strndup(str + start_offset, end_offset - start_offset); - -} -//*******************************my_atk_text_get_character_at_offset************************ -static gunichar my_atk_text_get_character_at_offset(AtkText *text, gint offset) -{ - gchar *str = ((MyAtkText*)text)->str; - if(offset < 0 || offset >= my_strlen(str)) - { - return 0; - } - return (gunichar)str[offset]; -} -// In the next 3 functions some code is commented for verify tests themselves on 'mutants' -// in realization. -//******************************my_atk_text_get_text_after_offset*************************** -static gchar* my_atk_text_get_text_after_offset(AtkText *text, gint offset, - AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset) -{ - gchar *str = ((MyAtkText*)text)->str; - gint len = my_strlen(str); - if((offset < 0) || (offset >= len)) - { - return NULL;//incorrect offset - } - - // This variable is set in switch statement. If after that statement variable is TRUE, - // then return text from 'strat_offset' to 'end_offset'. Otherwise NULL will be returned. - gboolean is_successed = TRUE; - - gint start_tmp; - gint end_tmp; - - switch(boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - if(offset + 1 == len) - { - is_successed = FALSE; - break; - } - *start_offset = offset + 1; - *end_offset = offset + 2; - is_successed = TRUE; - break; - case ATK_TEXT_BOUNDARY_WORD_START: - case ATK_TEXT_BOUNDARY_SENTENCE_START: - case ATK_TEXT_BOUNDARY_LINE_START: - if(!next_token(str, offset, start_offset, &end_tmp, tables[boundary_type])) - { - //debug -// if(current_token(str, offset, start_offset, end_offset, tables[boundary_type])) -// { -// is_successed = TRUE; -// break; -// } - is_successed = FALSE; - break; - } - if(!next_token(str, end_tmp, end_offset, &end_tmp, tables[boundary_type])) - { - *end_offset = len; - } - is_successed = TRUE; - //debug -// (*start_offset)++; -// if(*start_offset > 10) ++(*start_offset); - break; - case ATK_TEXT_BOUNDARY_WORD_END: - case ATK_TEXT_BOUNDARY_SENTENCE_END: - case ATK_TEXT_BOUNDARY_LINE_END: - if(!current_token(str, offset, &start_tmp, start_offset, tables[boundary_type])) - { - if(!next_token(str, offset, &start_tmp, start_offset, tables[boundary_type])) - { - is_successed = FALSE; - break; - } - } - //debug -// else if(*start_offset > strlen(str) - 7) -// { -// *end_offset = *start_offset + 3; -// is_successed = TRUE; -// break; -// } - if(!next_token(str, *start_offset, &start_tmp, end_offset, tables[boundary_type])) - { - is_successed = FALSE; - break; - } - //debug -// --(*start_offset); - is_successed = TRUE; - - break; - default: - is_successed = FALSE; - } - - if(is_successed) - { - return my_atk_text_get_text(text, *start_offset, *end_offset); - } - else - { - return NULL; - } -} -//*******************************my_atk_text_get_text_at_offset******************************* -static gchar* my_atk_text_get_text_at_offset(AtkText *text, gint offset, - AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset) -{ - gchar *str = ((MyAtkText*)text)->str; - gint len = my_strlen(str); - if((offset < 0) || (offset >= len)) - { - return NULL; - } - - // This variable is set in switch statement. If after that statement variable is TRUE, - // then return text from 'strat_offset' to 'end_offset'. Otherwise NULL will be returned. - gboolean is_successed = TRUE; - - gint start_tmp; - gint end_tmp; - - switch(boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - *start_offset = offset; - *end_offset = offset + 1; - is_successed = TRUE; - break; - case ATK_TEXT_BOUNDARY_WORD_START: - case ATK_TEXT_BOUNDARY_SENTENCE_START: - case ATK_TEXT_BOUNDARY_LINE_START: - if(!current_token(str, offset, start_offset, &end_tmp, tables[boundary_type])) - { - if(!previous_token(str, offset, start_offset, &end_tmp, tables[boundary_type])) - { - is_successed = FALSE; - break; - } - } - if(!next_token(str, offset, end_offset, &end_tmp, tables[boundary_type])) - { - *end_offset = len; - } - is_successed = TRUE; - break; - case ATK_TEXT_BOUNDARY_WORD_END: - case ATK_TEXT_BOUNDARY_SENTENCE_END: - case ATK_TEXT_BOUNDARY_LINE_END: - if(!current_token(str, offset, &start_tmp, end_offset, tables[boundary_type])) - { - if(!next_token(str, offset, &start_tmp, end_offset, tables[boundary_type])) - { - is_successed = FALSE; - break; - } - } - if(!previous_token(str, start_tmp, &start_tmp, start_offset, tables[boundary_type])) - { - *start_offset = 0; - } - is_successed = TRUE; - //debug -// ++(*start_offset); - break; - default: - is_successed = FALSE; - } - - if(is_successed) - { - //debug -// if(boundary_type == ATK_TEXT_BOUNDARY_LINE_START) -// return my_atk_text_get_text(text, ++(*start_offset), *end_offset); - return my_atk_text_get_text(text, *start_offset, *end_offset); - } - else - { - return NULL; - } -} -//***********************************my_atk_text_get_text_before_offset****************** -static gchar* my_atk_text_get_text_before_offset(AtkText *text, gint offset, - AtkTextBoundary boundary_type, gint *start_offset, gint *end_offset) -{ - gchar *str = ((MyAtkText*)text)->str; - gint len = my_strlen(str); - if((offset < 0) || (offset >= len)) - { - return NULL; - } - - // This variable is set in switch statement. If after that statement variable is TRUE, - // then return text from 'strat_offset' to 'end_offset'. Otherwise NULL will be returned. - gboolean is_successed = TRUE; - - gint start_tmp; - gint end_tmp; - - switch(boundary_type) - { - case ATK_TEXT_BOUNDARY_CHAR: - if(offset == 0) - { - is_successed = FALSE; - break; - } - *start_offset = offset - 1; - *end_offset = offset; - is_successed = TRUE; - break; - case ATK_TEXT_BOUNDARY_WORD_START: - case ATK_TEXT_BOUNDARY_SENTENCE_START: - case ATK_TEXT_BOUNDARY_LINE_START: - if(!current_token(str, offset, end_offset, &end_tmp, tables[boundary_type])) - { - if(!previous_token(str, offset, end_offset, &end_tmp, tables[boundary_type])) - { - is_successed = FALSE; - break; - } - } - if(!previous_token(str, *end_offset, start_offset, &end_tmp, tables[boundary_type])) - { - is_successed = FALSE; - break; - } - is_successed = TRUE; - //debug -// ++(*start_offset); - break; - case ATK_TEXT_BOUNDARY_WORD_END: - case ATK_TEXT_BOUNDARY_SENTENCE_END: - case ATK_TEXT_BOUNDARY_LINE_END: - if(!previous_token(str, offset, &start_tmp, end_offset, tables[boundary_type])) - { - is_successed = FALSE; - break; - } - if(!previous_token(str, start_tmp, &start_tmp, start_offset, tables[boundary_type])) - { - *start_offset = 0; - } - is_successed = TRUE; - break; - default: - is_successed = FALSE; - } - - if(is_successed) - { - return my_atk_text_get_text(text, *start_offset, *end_offset); - } - else - { - return NULL; - } -} -//*********************************my_atk_text_get_run_attributes***************** -AtkAttributeSet* my_atk_text_get_run_attributes(AtkText* text, gint offset, - gint *start_offset, gint *end_offset) -{ - GList *tmp; - GList *attributes = ((MyAtkText*)text)->attributes; - if(offset < 0 || offset >= my_atk_text_get_character_count(text)) - { - TRACE0("Incorrect value of offset."); - return NULL; - } - gint start = -1, end = -1; - for(tmp = attributes; tmp != NULL; tmp = tmp->next) - { - Range* range = (Range*)(tmp->data); - if(range->end <= offset) - { - start = range->end; - continue; - } - if(range->start > offset) - { - end = range->start; - break; - } - - *start_offset = range->start; - *end_offset = range->end; - return attribute_set_copy(range->attributeSet); - } - *start_offset = (start == -1) ? 0 : start; - *end_offset = (end == -1) ? my_atk_text_get_character_count(text) : end; - return NULL; -} -//*********************************my_atk_text_get_default_attributes***************** -AtkAttributeSet* my_atk_text_get_default_attributes(AtkText* text) -{ - return attribute_set_copy(((MyAtkText*)text)->default_attributes); -} -//*********************************my_atk_text_get_character_extents***************** -void my_atk_text_get_character_extents(AtkText* text, gint offset, gint *x, gint *y, - gint *width, gint *height, AtkCoordType coord_type) -{ - AtkTextRectangle result; - gint relative_offset, line; - line = get_character_line((MyAtkText*)text, offset, &relative_offset); - get_extents((MyAtkText*)text, line, relative_offset, &result); - *x = result.x; - *y = result.y; - *width = result.width; - *height = result.height; -} -//*******************************my_atk_text_get_range_extents************************ -void my_atk_text_get_range_extents(AtkText *text, gint start_offset, gint end_offset, - AtkCoordType coord_type, AtkTextRectangle *rect) -{ - //simple - union of extents of the characters, contained in this range - AtkTextRectangle result, bounds_tmp; - gint i; - - atk_text_get_character_extents (text, start_offset, - &result.x, &result.y, - &result.width, &result.height, - coord_type); - - for (i = start_offset + 1; i < end_offset; i++) - { - my_atk_text_get_character_extents (text, i,&bounds_tmp.x, &bounds_tmp.y, - &bounds_tmp.width, &bounds_tmp.height, coord_type); - - if(bounds_tmp.x < result.x) - { - //corrects left boundary - result.width += result.x - bounds_tmp.x; - result.x = bounds_tmp.x; - } - if(bounds_tmp.x + bounds_tmp.width > result.x + result.width) - { - //corrects right boundary - result.width = bounds_tmp.x + bounds_tmp.width - result.x; - } - if(bounds_tmp.y < result.y) - { - //corrects top boundary - result.height += result.y - bounds_tmp.y; - result.y = bounds_tmp.y; - } - if(bounds_tmp.y + bounds_tmp.height > result.y + result.height) - { - //corrects buttom boundary - result.height = bounds_tmp.y + bounds_tmp.height - result.y; - } - } - *rect = result; -} -//**********************************my_atk_text_get_offset_at_point********************* -gint my_atk_text_get_offset_at_point(AtkText* text, gint x, gint y, AtkCoordType coord_type) -{ - gint line, relative_offset; - - line = get_point_line((MyAtkText*)text, y); - relative_offset = get_point_relative_offset((MyAtkText*)text, x); - - return get_offset_at_line((MyAtkText*)text, line, relative_offset); -} -//*****************************my_atk_text_get_bounded_ranges****************************** -AtkTextRange** my_atk_text_get_bounded_ranges(AtkText *text, AtkTextRectangle *rect, - AtkCoordType coord_type, AtkTextClipType x_clip_type, AtkTextClipType y_clip_type) -{ - MyAtkText *self = (MyAtkText*)text; - - gint start_line, end_line, start_rel_offset, end_rel_offset; - AtkTextRange** result; - gint len = my_strlen(self->str); -//macro for simplify return empty ranges when fail to do smth -#define RETURN_EMTPY_RANGES {result = g_malloc(sizeof(AtkTextRange*));result[0] = NULL;return result;} - //start line - start_line = (y_clip_type == ATK_TEXT_CLIP_NONE) || (y_clip_type == ATK_TEXT_CLIP_MAX) - ? 0 : get_point_line(self, rect->y); - if(start_line < 0) start_line = 0; - //end line - end_line = (y_clip_type == ATK_TEXT_CLIP_NONE) || (y_clip_type == ATK_TEXT_CLIP_MIN) - ? G_MAXINT/2 : get_point_line(self, rect->y + rect->height); - if(end_line < 0) RETURN_EMTPY_RANGES; - //start relative offset - start_rel_offset = (x_clip_type == ATK_TEXT_CLIP_NONE) || (x_clip_type == ATK_TEXT_CLIP_MAX) - ? 0 : get_point_relative_offset(self, rect->x); - if(start_rel_offset < 0) start_rel_offset = 0; - //end relative offset - end_rel_offset = (x_clip_type == ATK_TEXT_CLIP_NONE) || (x_clip_type == ATK_TEXT_CLIP_MIN) - ? G_MAXINT/2 : get_point_relative_offset(self, rect->x + rect->width); - if(end_rel_offset < 0) RETURN_EMTPY_RANGES; - //start offset(at the start of 'start_line') - gint start_offset = get_offset_at_line_start(self, start_line); - if(start_offset + start_rel_offset >= len) RETURN_EMTPY_RANGES; - - //count ranges - gint number_of_ranges = count_ranges(self, start_offset, - start_rel_offset, end_rel_offset, end_line - start_line + 1, NULL, coord_type); - //create array(with just getting size) - result = g_malloc(sizeof(AtkTextRange*) * (number_of_ranges + 1)); - //write ranges - count_ranges(self, start_offset, - start_rel_offset, end_rel_offset, end_line - start_line + 1, result, coord_type); -#undef RETURN_EMPTY_RANGES - return result; -} - -//********************************my_atk_text_get_n_selections******************************* -gint my_atk_text_get_n_selections(AtkText *text) -{ - MyAtkText *self = (MyAtkText*)text; - return self->selections->len; -} - -//********************************my_atk_text_get_selection******************************* -gchar* my_atk_text_get_selection(AtkText *text, - gint selection_num, gint *start_offset, gint *end_offset) -{ - MyAtkText *self = (MyAtkText*)text; - GArray *selections = self->selections; - if(selection_num < 0 || selection_num >= selections->len) return NULL; - *start_offset = g_array_index(selections, TextSelection, selection_num).start_offset; - *end_offset = g_array_index(selections, TextSelection, selection_num).end_offset; - return my_atk_text_get_text(text, *start_offset, *end_offset); -} -//********************************my_atk_text_remove_selection******************************* -gboolean my_atk_text_remove_selection(AtkText *text, gint selection_num) -{ - MyAtkText *self = (MyAtkText*)text; - GArray *selections = self->selections; - if(selection_num < 0 || selection_num >= selections->len) return FALSE; - g_array_remove_index(selections, selection_num); - - g_signal_emit_by_name(text, "text-selection-changed"); - return TRUE; -} -//********************************my_atk_text_add_selection******************************* -gboolean my_atk_text_add_selection(AtkText *text, gint start_offset, gint end_offset) -{ - if(start_offset < 0 || end_offset > my_atk_text_get_character_count(text) - || start_offset >= end_offset) return FALSE; - - MyAtkText *self = (MyAtkText*)text; - GArray *selections = self->selections; - gint i; - for(i = 0; i < selections->len; i++) - { - if(g_array_index(selections, TextSelection, i).start_offset >= start_offset) - { - if(g_array_index(selections, TextSelection, i).start_offset < end_offset) - return FALSE; - break; - } - } - TextSelection new_selection; - new_selection.start_offset = start_offset; - new_selection.end_offset = end_offset; - g_array_insert_val(selections, i, new_selection); - - g_signal_emit_by_name(text, "text-selection-changed"); - return TRUE; -} -//********************************my_atk_text_set_selection******************************* -gboolean my_atk_text_set_selection(AtkText *text, - gint selection_num, gint start_offset, gint end_offset) -{ - MyAtkText *self = (MyAtkText*)text; - GArray *selections = self->selections; - if(selection_num < 0 || selection_num >= selections->len) return NULL; - - if((selection_num == 0 - || g_array_index(selections, TextSelection, selection_num - 1).end_offset <= start_offset) - && (selection_num == selections->len - 1 - || g_array_index(selections, TextSelection, selection_num + 1).start_offset >= end_offset) - ) - { - //Arrange of selections won't change - g_array_index(selections, TextSelection, selection_num).start_offset = - start_offset; - g_array_index(selections, TextSelection, selection_num).end_offset = - end_offset; - g_signal_emit_by_name(text, "text-selection-changed"); - return TRUE; - } - gint start_offset_old = - g_array_index(selections, TextSelection, selection_num).start_offset; - gint end_offset_old = - g_array_index(selections, TextSelection, selection_num).end_offset; - - my_atk_text_remove_selection(text, selection_num); - if(!my_atk_text_add_selection(text, start_offset, end_offset)) - { - //fail when adding selection. Restore initial state. - my_atk_text_add_selection(text, start_offset_old, end_offset_old); - return FALSE; - } - g_signal_emit_by_name(text, "text-selection-changed"); - return TRUE; - -} - -//************************************my_atk_text_get_caret_offset****************** -gint my_atk_text_get_caret_offset(AtkText *text) -{ - MyAtkText *self = (MyAtkText*)text; - return self->caret_offset; -} -//************************************my_atk_text_set_caret_offset****************** -gboolean my_atk_text_set_caret_offset(AtkText *text, gint offset) -{ - MyAtkText *self = (MyAtkText*)text; - //caret may be set just after the last character - if(offset < 0 || offset > my_atk_text_get_character_count(text))return FALSE; - self->caret_offset = offset; - g_signal_emit_by_name(self, "text-caret-moved", offset); - return TRUE; -} - -//***********************my_atk_text_insert_text******************************* -void my_atk_text_insert_text(AtkEditableText* text, const gchar* string, - gint length, gint *position) -{ - gint i; - MyAtkText* myAtkText = (MyAtkText*)text; - gchar *str = myAtkText->str; - gint strlen_old = my_strlen(str); - - if(string == NULL) return; - //correct length - for(i = 0; i < length; i ++) - { - if(string[i] == '\0') {length = i; break;} - } - - if(*position < 0 || *position > strlen_old || length <= 0 )return; - - - gchar *new_str = g_malloc(strlen_old + length + 1); - if(new_str == NULL)return; - - if(*position != 0) - memcpy(new_str, str, (size_t)*position); - memcpy(new_str + *position, string, (size_t)length); - if(strlen_old != *position) - memcpy(new_str + *position + length, str + *position, - (size_t)(strlen_old - *position)); - new_str[strlen_old + length] = '\0'; - - g_free(str); - myAtkText->str = new_str; - correct_selections_after_insert(myAtkText, *position, length); - correct_attributes_after_insert(myAtkText, *position, length); - correct_caret_after_insert(myAtkText, *position, length); - g_signal_emit_by_name(text, "text-changed::insert", *position, length); - g_signal_emit_by_name(text, "text-selection-changed"); - g_signal_emit_by_name(text, "text-attributes-changed"); - g_signal_emit_by_name(text, "text-caret-moved", myAtkText->caret_offset); - - (*position) += length; -} -//*************************my_atk_text_delete_text******************* -void my_atk_text_delete_text(AtkEditableText* text, gint start_pos, gint end_pos) -{ - MyAtkText* myAtkText = (MyAtkText*)text; - gchar *str = myAtkText->str; - gint strlen_old = my_strlen(str); - - if(start_pos < 0 || end_pos > strlen_old || start_pos >= end_pos )return; - if(strlen_old != end_pos) - memmove(str + start_pos, str + end_pos, strlen_old - end_pos); - str[start_pos - end_pos + strlen_old] = '\0'; - - correct_selections_after_delete(myAtkText, start_pos, end_pos - start_pos); - correct_attributes_after_delete(myAtkText, start_pos, end_pos - start_pos); - correct_caret_after_delete(myAtkText, start_pos, end_pos - start_pos); - g_signal_emit_by_name(text, "text-changed::delete", start_pos, end_pos - start_pos); - g_signal_emit_by_name(text, "text-selection-changed"); - g_signal_emit_by_name(text, "text-attributes-changed"); - g_signal_emit_by_name(text, "text-caret-moved", myAtkText->caret_offset); -} -//***********************my_atk_text_set_text_contents************************* -void my_atk_text_set_text_contents(AtkEditableText* text, const gchar* string) -{ - my_atk_text_delete_text(text, 0, my_atk_text_get_character_count((AtkText*)text)); - gint position = 0; - my_atk_text_insert_text(text, string, my_strlen(string), &position); -} -//**********************my_atk_text_copy_text*************************** -void my_atk_text_copy_text(AtkEditableText* text, gint start_pos, gint end_pos) -{ - MyAtkText* myAtkText = (MyAtkText*)text; - const gchar *str = myAtkText->str; - gint strlen_old = my_strlen(str); - if(start_pos < 0 || end_pos > strlen_old || start_pos >= end_pos )return; - - MyAtkTextClass *parent = MY_ATK_TEXT_GET_CLASS(text); - g_free(parent->clipboard); - /*parent->clipboard = g_malloc(end_pos - start_pos + 1); - - strncpy(parent->clipboard, str + start_pos, end_pos - start_pos); - parent->clipboard[end_pos - start_pos] = '\0';*/ - parent->clipboard = g_strndup(str + start_pos, end_pos - start_pos); -} -//**********************my_atk_text_paste_text*************************** -void my_atk_text_paste_text(AtkEditableText *text, gint position) -{ - //NULL-clipboard process corretly - MyAtkTextClass* parent = MY_ATK_TEXT_GET_CLASS(text); - my_atk_text_insert_text(text, parent->clipboard, my_strlen(parent->clipboard), &position); -} -//**********************my_atk_text_cut_text*************************** -void my_atk_text_cut_text(AtkEditableText* text, gint start_pos, gint end_pos) -{ - my_atk_text_copy_text(text, start_pos, end_pos); - my_atk_text_delete_text(text, start_pos, end_pos); -} -//*********************my_atk_text_set_run_attributes************************ -gboolean my_atk_text_set_run_attributes(AtkEditableText* text, AtkAttributeSet* attrib_set, - gint start_offset, gint end_offset) -{ - MyAtkText* self = (MyAtkText*)text; - gint len = atk_text_get_character_count((AtkText*)text); - if(start_offset < 0 || start_offset >= end_offset || end_offset > len) - return FALSE; - GList *attributes = self->attributes; - GList *tmp = attributes; - - while(tmp != NULL) - { - Range *range = (Range*)tmp->data; - if(range->start < start_offset) - { - if(range->end <= end_offset) - { - if(range->end > start_offset) range->end = start_offset; - tmp = tmp->next; - continue; - } - /*range->end > end_offset*/ - Range* additional_range = range_new(end_offset, range->end); - additional_range->attributeSet = attribute_set_copy(range->attributeSet); - range->end = start_offset; - attributes = g_list_insert_before(attributes, tmp->next, additional_range); - tmp = tmp->next; - break; - } - else/*range->start >= start_offset*/ - { - if(range->end <= end_offset) - { - GList *tmp1 = tmp->next; - attributes = g_list_remove_link(attributes, tmp); - tmp = tmp1; - continue; - } - /*range->end > end_offset*/ - if(range->start < end_offset) range->start = end_offset; - break; - } - } - Range *new_range = range_new(start_offset, end_offset); - new_range->attributeSet = attribute_set_copy(attrib_set); - if(tmp == NULL)attributes = g_list_append(attributes, new_range); - else attributes = g_list_insert_before(attributes, tmp, new_range); - - self->attributes = attributes; - g_signal_emit_by_name(self, "text_attributes_changed"); - return TRUE; -} - -//others functions -//sets default attributes -void my_atk_text_set_default_attributes(MyAtkText* text, AtkAttributeSet *set) -{ - atk_attribute_set_free(text->default_attributes); - text->default_attributes = attribute_set_copy(set); - g_signal_emit_by_name(text, "text-attributes-changed"); -} - -void my_atk_text_print_run_attributes(MyAtkText *text) -{ - g_list_foreach(text->attributes, (GFunc)range_print, NULL); -} -void my_atk_text_print_default_attributes(MyAtkText *text) -{ - attribute_set_print(text->default_attributes); -} -//need for separate testing interfaces -void auxiliary_atk_text_set_text_contents(MyAtkText* text, const gchar* string) -{ - my_atk_text_set_text_contents((AtkEditableText*)text, string); -} -void auxiliary_atk_text_set_run_attributes(MyAtkText* text, AtkAttributeSet* attrib_set, - gint start_offset, gint end_offset) -{ - my_atk_text_set_run_attributes((AtkEditableText*)text, attrib_set, start_offset, end_offset); -} - -//initialize/finalize functions -static void my_atk_text_instance_init(GTypeInstance *obj, gpointer g_class) -{ - MyAtkText *self = (MyAtkText*)obj; - - self->str = NULL; - self->attributes = NULL; - self->default_attributes = NULL; - text_bounds_init(&self->bounds); - - self->selections = g_array_new(FALSE, FALSE, sizeof(TextSelection)); - - self->caret_offset = 0; -} -static void my_atk_text_instance_finalize(GObject* obj) -{ - MyAtkText *self = (MyAtkText*)obj; - g_free(self->str); - my_atk_text_free_run_attributes(self); - my_atk_text_free_default_attributes(self); - if(self->selections != NULL)g_array_free(self->selections, FALSE); -} - -static void my_atk_text_class_init(gpointer g_class, gpointer class_data) -{ - GObjectClass* g_object_class = (GObjectClass*)g_class; - //GObject virtual table - g_object_class->finalize = my_atk_text_instance_finalize; - //Fills tables of symbols - table_symbols_init(); - //initialize clipboard - ((MyAtkTextClass*)g_class)->clipboard = NULL; -} -//Because of static registration of type, finalization function will never been called -//And glib prints warning if use it in registration. -/*static void my_atk_text_class_finalize(gpointer g_class, gpointer class_data) -{ - MyAtkTextClass *self = (MyAtkTextClass*)g_class; - - g_free(self->clipboard); - self->clipboard = NULL; -}*/ -void my_atk_text_interface_init(gpointer g_iface, gpointer iface_data) -{ - AtkTextIface *klass = (AtkTextIface*)g_iface; - //"get_text" - klass->get_character_count = my_atk_text_get_character_count; - klass->get_text = my_atk_text_get_text; - klass->get_character_at_offset = my_atk_text_get_character_at_offset; - klass->get_text_after_offset = my_atk_text_get_text_after_offset; - klass->get_text_at_offset = my_atk_text_get_text_at_offset; - klass->get_text_before_offset = my_atk_text_get_text_before_offset; - //"attributes" - klass->get_run_attributes = my_atk_text_get_run_attributes; - klass->get_default_attributes = my_atk_text_get_default_attributes; - //"bounds" - klass->get_character_extents = my_atk_text_get_character_extents; - klass->get_range_extents = my_atk_text_get_range_extents; - klass->get_offset_at_point = my_atk_text_get_offset_at_point; - klass->get_bounded_ranges = my_atk_text_get_bounded_ranges; - //"selection" - klass->get_n_selections = my_atk_text_get_n_selections; - klass->get_selection = my_atk_text_get_selection; - klass->remove_selection = my_atk_text_remove_selection; - klass->add_selection = my_atk_text_add_selection; - klass->set_selection = my_atk_text_set_selection; - //"caret" - klass->get_caret_offset = my_atk_text_get_caret_offset; - klass->set_caret_offset = my_atk_text_set_caret_offset; -} - -static void my_atk_editable_text_interface_init(gpointer g_iface, gpointer iface_data) -{ - AtkEditableTextIface *klass = (AtkEditableTextIface*)g_iface; - - klass->set_text_contents = my_atk_text_set_text_contents; - klass->set_run_attributes = my_atk_text_set_run_attributes; - klass->copy_text = my_atk_text_copy_text; - klass->insert_text = my_atk_text_insert_text; - klass->paste_text = my_atk_text_paste_text; - klass->cut_text = my_atk_text_cut_text; - klass->delete_text = my_atk_text_delete_text; -} -GType my_atk_text_get_type() -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo typeInfo = - { - sizeof(MyAtkTextClass), - NULL, //base_init - NULL, //base_finalize - my_atk_text_class_init, //class_init - NULL, //class_finalize - NULL, //class_data - sizeof(MyAtkText), - 0, //n_preallocs - my_atk_text_instance_init //instance_init - }; - - static const GInterfaceInfo AtkTextIface_info = - { - my_atk_text_interface_init, /* interface_init*/ - NULL, /* interface_finalize*/ - NULL /* interface_data */ - }; - static const GInterfaceInfo AtkEditableTextIface_info = - { - my_atk_editable_text_interface_init,/* interface_init*/ - NULL, /* interface_finalize*/ - NULL /* interface_data */ - }; - type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkText", &typeInfo, 0); - g_type_add_interface_static(type, - ATK_TYPE_TEXT, - &AtkTextIface_info); - - g_type_add_interface_static(type, - ATK_TYPE_EDITABLE_TEXT, - &AtkEditableTextIface_info); - } - return type; -} diff --git a/tests/dummyatk/my-atk-text.h b/tests/dummyatk/my-atk-text.h deleted file mode 100644 index 7a6a73e..0000000 --- a/tests/dummyatk/my-atk-text.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef MY_ATK_TEXT_H -#define MY_ATK_TEXT_H -/* - * MyAtkText: implements AtkText and AtkEditableText - */ -#include <atk/atk.h> - -#include "my-atk-object.h" - -#define MY_TYPE_ATK_TEXT (my_atk_text_get_type ()) -#define MY_ATK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_TEXT, MyAtkText)) -#define MY_ATK_TEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_TEXT, MyAtkTextClass)) -#define MY_IS_ATK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_TEXT)) -#define MY_IS_ATK_TEXT_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_TEXT)) -#define MY_ATK_TEXT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_TEXT, MyAtkTextClass)) - -typedef struct _MyAtkText MyAtkText; -typedef struct _MyAtkTextClass MyAtkTextClass; - -//Struct, describing bounds of one selection. -typedef struct -{ - gint start_offset, end_offset; -}TextSelection; -//Struct, describing values, needed for determine extent of characters -typedef struct -{ - gint base_x, base_y;//coordinates of the top-left corner of text - gint pixels_above_line; - gint pixels_below_line; - gint size;//size of the character(height in pixels) - gint pixels_between_characters;//monoscaped font - gint width;//width of character -}TextBounds; - -struct _MyAtkText -{ - MyAtkObject parent; - - gchar* str;//string, containing text - GList* attributes;//running atributes - AtkAttributeSet *default_attributes;//default attributes - - TextBounds bounds; - - GArray* selections; - - gint caret_offset; -}; - -struct _MyAtkTextClass -{ - MyAtkObjectClass parent; - gchar* clipboard; -}; - -GType my_atk_text_get_type(); - -void my_atk_text_interface_init(gpointer g_iface, gpointer iface_data); -#endif /*MY_ATK_TEXT_H*/ diff --git a/tests/dummyatk/my-atk-value.c b/tests/dummyatk/my-atk-value.c deleted file mode 100644 index 3530d4f..0000000 --- a/tests/dummyatk/my-atk-value.c +++ /dev/null @@ -1,113 +0,0 @@ -#include <atk/atk.h> -#include <limits.h> - -#include "my-atk-object.h" -#include "my-atk-value.h" - -//*************************implementation*********************** -//implementation of virtual functions -//******************get_current_value******************* -static void my_atk_value_get_current_value(AtkValue *obj, GValue *value) -{ - g_return_if_fail(MY_IS_ATK_VALUE(obj)); - MyAtkValue* self = (MyAtkValue*)obj; - - g_value_init(value, G_TYPE_INT); - g_value_set_int(value, self->current); -} -//******************get_maximum_value******************* -static void my_atk_value_get_maximum_value(AtkValue *obj, GValue *value) -{ - g_return_if_fail(MY_IS_ATK_VALUE(obj)); - MyAtkValue* self = (MyAtkValue*)obj; - - g_value_init(value, G_TYPE_INT); - g_value_set_int(value, self->maximum); -} -//******************get_minimum_value******************* -static void my_atk_value_get_minimum_value(AtkValue *obj, GValue *value) -{ - g_return_if_fail(MY_IS_ATK_VALUE(obj)); - MyAtkValue* self = (MyAtkValue*)obj; - - g_value_init(value, G_TYPE_INT); - g_value_set_int(value, self->minimum); -} -//******************set_current_value******************* -static gboolean my_atk_value_set_current_value(AtkValue *obj, const GValue *value) -{ - g_return_val_if_fail(MY_IS_ATK_VALUE(obj), FALSE); - MyAtkValue* self = (MyAtkValue*)obj; - - if(self->readonly) return FALSE; - - gint new_value = g_value_get_int(value); - if(new_value < self->minimum || new_value > self->maximum) return FALSE; - - self->current = new_value; - return TRUE; -} - -//others -MyAtkValue* my_atk_value_new(gint minimum, gint maximum, gint current) -{ - MyAtkValue* result = g_object_new(MY_TYPE_ATK_VALUE, NULL); - if(result == NULL) return NULL; - result->minimum = minimum; - result->maximum = maximum; - result->current = current; - - return result; -} -static void my_atk_value_instance_init(GTypeInstance *obj, gpointer g_class) -{ - MyAtkValue *self = (MyAtkValue*)obj; - - self->minimum = 0; - self->maximum = 0; - self->current = 0; - - self->readonly = FALSE; -} -static void my_atk_value_interface_init(gpointer g_iface, gpointer iface_data) -{ - AtkValueIface *klass = (AtkValueIface*)g_iface; - - klass->get_current_value = my_atk_value_get_current_value; - klass->get_minimum_value = my_atk_value_get_minimum_value; - klass->get_maximum_value = my_atk_value_get_maximum_value; - - klass->set_current_value = my_atk_value_set_current_value; -} - -GType my_atk_value_get_type() -{ - static GType type = 0; - if(type == 0) - { - static const GTypeInfo typeInfo = - { - sizeof(MyAtkValueClass), - NULL, //base_init - NULL, //base_finalize - NULL, //class_init - NULL, //class_finalize - NULL, //class_data - sizeof(MyAtkValue), - 0, //n_preallocs - my_atk_value_instance_init //instance_init - }; - - static const GInterfaceInfo iface_info = - { - my_atk_value_interface_init, /* interface_init*/ - NULL, /* interface_finalize*/ - NULL /* interface_data */ - }; - type = g_type_register_static(MY_TYPE_ATK_OBJECT, "MyAtkValue", &typeInfo, 0); - g_type_add_interface_static(type, - ATK_TYPE_VALUE, - &iface_info); - } - return type; -} diff --git a/tests/dummyatk/my-atk-value.h b/tests/dummyatk/my-atk-value.h deleted file mode 100644 index 03ed6d1..0000000 --- a/tests/dummyatk/my-atk-value.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef MY_ATK_VALUE_H -#define MY_ATK_VALUE_H -/* - * MyAtkValue: derives AtkObject - * and implements AtkValue - */ -#include <atk/atk.h> - -#define MY_TYPE_ATK_VALUE (my_atk_value_get_type ()) -#define MY_ATK_VALUE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MY_TYPE_ATK_VALUE, MyAtkValue)) -#define MY_ATK_VALUE_CLASS(vtable) (G_TYPE_CHECK_CLASS_CAST ((vtable), MY_TYPE_ATK_VALUE, MyAtkValueClass)) -#define MY_IS_ATK_VALUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_ATK_VALUE)) -#define MY_IS_ATK_VALUE_CLASS(vtable) (G_TYPE_CHECK_CLASS_TYPE ((vtable), MY_TYPE_ATK_VALUE)) -#define MY_ATK_VALUE_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), MY_TYPE_ATK_VALUE, MyAtkValueClass)) - -typedef struct _MyAtkValue MyAtkValue; -typedef struct _MyAtkValueClass MyAtkValueClass; - -struct _MyAtkValue -{ - MyAtkObject parent; - - gint minimum, maximum, current; - gboolean readonly; -}; - -struct _MyAtkValueClass -{ - MyAtkObjectClass parent; -}; - -MyAtkValue* my_atk_value_new(gint minimum, gint maximium, gint current); -GType my_atk_value_get_type(); -#endif /*MY_ATK_VALUE_H*/ diff --git a/tests/dummyatk/my-atk.h b/tests/dummyatk/my-atk.h deleted file mode 100644 index 935d3d8..0000000 --- a/tests/dummyatk/my-atk.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef MY_ATK_H -#define MY_ATK_H - -#include <my-atk-action.h> -#include <my-atk-component.h> -#include <my-atk.h> -#include <my-atk-hyperlink.h> -#include <my-atk-hypertext.h> -#include <my-atk-object.h> -#include <my-atk-streamable-content.h> -#include <my-atk-text.h> -#include <my-atk-value.h> - -#endif /*MY_ATK_H*/ diff --git a/tests/dummyatk/resources_storage.c b/tests/dummyatk/resources_storage.c deleted file mode 100644 index e86051d..0000000 --- a/tests/dummyatk/resources_storage.c +++ /dev/null @@ -1,34 +0,0 @@ -#include <atk/atk.h> - -GHashTable* resources = NULL; - -void resource_storage_init() -{ - if(resources == NULL) - resources = g_hash_table_new_full(g_str_hash, g_str_equal, - (GDestroyNotify)g_free, (GDestroyNotify)g_object_unref); -} - -void resource_storage_free() -{ - if(resources == NULL) return; - g_hash_table_destroy(resources); - resources = NULL; -} - -void resource_storage_add(const gchar* name, AtkObject* resource) -{ - if(resources == NULL) return; - g_hash_table_insert(resources, g_strdup(name), g_object_ref(resource)); -} - -AtkObject* resource_storage_get(const gchar* name) -{ - if(resources == NULL) return NULL; - return g_hash_table_lookup(resources, name); -} -void resources_storage_remove(const gchar* name) -{ - if(resources == NULL) return; - g_hash_table_remove(resources, name); -} diff --git a/tests/dummyatk/resources_storage.h b/tests/dummyatk/resources_storage.h deleted file mode 100644 index 3decd86..0000000 --- a/tests/dummyatk/resources_storage.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef RESOURCES_STORAGE_H -#define RESOURCES_STORAGE_H - -#include <glib.h> - -void resource_storage_init(); - -void resource_storage_free(); - -void resource_storage_add(const gchar* name, AtkObject* resource); - -AtkObject* resource_storage_get(const gchar* name); - -void resources_storage_remove(const gchar* name); - -#endif /*RESOURCES_STORAGE_H*/ diff --git a/tests/dummyatk/useful_functions.c b/tests/dummyatk/useful_functions.c deleted file mode 100644 index 49b6a82..0000000 --- a/tests/dummyatk/useful_functions.c +++ /dev/null @@ -1,29 +0,0 @@ -#include <string.h> -#include <glib.h> -/* - * Functions and macros widely used in the tests. - */ - -//same as strcmp() == 0 but works properly for NULL pointers -gboolean my_strcmp(const gchar* str1, const gchar* str2) -{ - if(str1 == str2) return TRUE; - if(str1 == NULL || str2 == NULL) return FALSE; - - return strcmp(str1,str2) == 0; -} -//same as strlen but works properly for NULL pointer and returns gint instead of guint -gint my_strlen(const gchar* str) -{ - if(str == NULL)return 0; - return (gint)strlen(str); -} -//same as strncmp() == 0 but works properly for NULL pointers -gboolean my_strncmp(const gchar* str1, const gchar* str2, gint n) -{ - if(n <= 0)return TRUE; - if(str1 == str2)return TRUE; - if(str1 == NULL || str2 == NULL)return FALSE; - - return strncmp(str1, str2, n) == 0; -} diff --git a/tests/dummyatk/useful_functions.h b/tests/dummyatk/useful_functions.h deleted file mode 100644 index 4fbce6c..0000000 --- a/tests/dummyatk/useful_functions.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef USEFUL_FUNCTIONS_H -#define USEFUL_FUNCTIONS_H -/* - * Functions and macros widely used in the tests. - */ - -//macro for creating objects in startup section -#define OBJECT_NEW(obj, type, type_str) obj = g_object_new(type,NULL);\ - if(obj == NULL)\ - {\ - INIT_FAILED("Cannot create instance of type" type_str ".\n");\ - } -//macro for destroying object -#define OBJECT_UNREF(obj) if(obj != NULL)\ - {\ - g_object_unref((gpointer)obj);\ - } -//for testing signals -#define HANDLER_DISCONNECT(obj, h) if((h) != 0)\ - {\ - g_signal_handler_disconnect(obj, h);\ - } - -gboolean my_strcmp(const gchar* str1, const gchar* str2); - -gint my_strlen(const gchar* str); - -gboolean my_strncmp(const gchar* str1, const gchar* str2, gint n); - -#endif /*USEFUL_FUNCTIONS_H*/ diff --git a/tests/dummyatk/user_marshal.c b/tests/dummyatk/user_marshal.c deleted file mode 100644 index 1f8ecf0..0000000 --- a/tests/dummyatk/user_marshal.c +++ /dev/null @@ -1,41 +0,0 @@ -#include <glib-object.h> - -/* INT:BOXED (marshal.list:1) */ -void -g_cclosure_user_marshal_INT__BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data) -{ - typedef gint (*GMarshalFunc_INT__BOXED) (gpointer data1, - gpointer arg_1, - gpointer data2); - register GMarshalFunc_INT__BOXED callback; - register GCClosure *cc = (GCClosure*) closure; - register gpointer data1, data2; - gint v_return; - - g_return_if_fail (return_value != NULL); - g_return_if_fail (n_param_values == 2); - - if (G_CCLOSURE_SWAP_DATA (closure)) - { - data1 = closure->data; - data2 = g_value_peek_pointer (param_values + 0); - } - else - { - data1 = g_value_peek_pointer (param_values + 0); - data2 = closure->data; - } - callback = (GMarshalFunc_INT__BOXED) (marshal_data ? marshal_data : cc->callback); - - v_return = callback (data1, - g_marshal_value_peek_boxed (param_values + 1), - data2); - - g_value_set_int (return_value, v_return); -} - diff --git a/tests/dummyatk/user_marshal.h b/tests/dummyatk/user_marshal.h deleted file mode 100644 index a845925..0000000 --- a/tests/dummyatk/user_marshal.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef USER_MARSHAL_H -#define USER_MARSHAL_H - -#include <glib-object.h> - - -#ifdef G_ENABLE_DEBUG -#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) -#define g_marshal_value_peek_char(v) g_value_get_char (v) -#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) -#define g_marshal_value_peek_int(v) g_value_get_int (v) -#define g_marshal_value_peek_uint(v) g_value_get_uint (v) -#define g_marshal_value_peek_long(v) g_value_get_long (v) -#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) -#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) -#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) -#define g_marshal_value_peek_enum(v) g_value_get_enum (v) -#define g_marshal_value_peek_flags(v) g_value_get_flags (v) -#define g_marshal_value_peek_float(v) g_value_get_float (v) -#define g_marshal_value_peek_double(v) g_value_get_double (v) -#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) -#define g_marshal_value_peek_param(v) g_value_get_param (v) -#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) -#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) -#define g_marshal_value_peek_object(v) g_value_get_object (v) -#else /* !G_ENABLE_DEBUG */ -/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. - * Do not access GValues directly in your code. Instead, use the - * g_value_get_*() functions - */ -#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int -#define g_marshal_value_peek_char(v) (v)->data[0].v_int -#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint -#define g_marshal_value_peek_int(v) (v)->data[0].v_int -#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint -#define g_marshal_value_peek_long(v) (v)->data[0].v_long -#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 -#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 -#define g_marshal_value_peek_enum(v) (v)->data[0].v_long -#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong -#define g_marshal_value_peek_float(v) (v)->data[0].v_float -#define g_marshal_value_peek_double(v) (v)->data[0].v_double -#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer -#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer -#endif /* !G_ENABLE_DEBUG */ - - -void -g_cclosure_user_marshal_INT__BOXED (GClosure *closure, - GValue *return_value, - guint n_param_values, - const GValue *param_values, - gpointer invocation_hint, - gpointer marshal_data); - -#endif /*USER_MARSHAL_H*/ diff --git a/tests/pyatspi/Makefile.am b/tests/pyatspi/Makefile.am deleted file mode 100644 index 97213ce..0000000 --- a/tests/pyatspi/Makefile.am +++ /dev/null @@ -1,20 +0,0 @@ -SUBDIRS = pasytest - -EXTRA_DIST = \ - accessibletest.py\ - actiontest.py\ - componenttest.py\ - desktoptest.py\ - statetest.py\ - Makefile.am\ - Makefile.in\ - setvars.sh\ - relationtest.py\ - runtests.sh\ - testrunner - -TESTS_ENVIRONMENT = top_builddir=$(top_builddir) top_srcdir=$(top_srcdir) - -TESTS = runtests.sh - -CLEANFILES = *.pyc diff --git a/tests/pyatspi/accessibletest.py b/tests/pyatspi/accessibletest.py deleted file mode 100644 index 6cd2cdd..0000000 --- a/tests/pyatspi/accessibletest.py +++ /dev/null @@ -1,219 +0,0 @@ -import dbus -import gobject -import os.path - -from xml.dom import minidom -import os - -from pasytest import PasyTest as _PasyTest - -import pyatspi -from pyatspi import StateSet - -st = [pyatspi.STATE_MULTI_LINE, - pyatspi.STATE_MODAL, - pyatspi.STATE_INDETERMINATE, - pyatspi.STATE_SUPPORTS_AUTOCOMPLETION, - pyatspi.STATE_VERTICAL,] - -def _createNode(accessible, parentElement): - e = minidom.Element("accessible") - - e.attributes["name"] = accessible.name - e.attributes["role"] = str(int(accessible.getRole())) - e.attributes["description"] = accessible.description - - for i in range(0, accessible.childCount): - _createNode(accessible.getChildAtIndex(i), e) - - parentElement.appendChild(e) - -class AccessibleTest(_PasyTest): - - __tests__ = ["setup", - "test_name", - "test_getChildAtIndex", - "test_isEqual", - "test_getApplication", - "test_getAttributes", - "test_parent", - "test_getIndexInParent", - "test_getLocalizedRoleName", - "test_getRelationSet", - "test_getRole", - "test_getRoleName", - "test_getState", - "test_childCount", - "test_description", - "test_tree", - "teardown", - ] - - def __init__(self, bus, path): - _PasyTest.__init__(self, "Accessible", False) - self._bus = bus - self._path = path - - def setup(self, test): - self._registry = pyatspi.Registry() - print self._path - self._desktop = self._registry.getDesktop(0) - - def test_name(self, test): - root = self._desktop.getChildAtIndex(0) - test.assertEqual(root.name, "main", "Expected name - \"main\". Recieved - \"%s\"" % (root.name,)) - - def test_getChildAtIndex(self, test): - root = self._desktop.getChildAtIndex(0) - a = root.getChildAtIndex(0) - test.assertEqual(a.name, "gnome-settings-daemon", - "Expected name - \"gnome-settings-daemon\". Recieved - \"%s\"" % (a.name,)) - b = root.getChildAtIndex(1) - test.assertEqual(b.name, "gnome-panel", - "Expected name - \"gnome-panel\". Recieved - \"%s\"" % (b.name,)) - c = root.getChildAtIndex(2) - test.assertEqual(c.name, "nautilus", - "Expected name - \"nautilus\". Recieved - \"%s\"" % (c.name,)) - - def test_isEqual(self, test): - root = self._desktop.getChildAtIndex(0) - - a = root.getChildAtIndex(1) - if not a.isEqual(a): - test.fail("Same accessible found unequal to self") - - b = root.getChildAtIndex(1) - if not a.isEqual(b): - test.fail("Similar accessibles found unequal") - if not b.isEqual(a): - test.fail("Similar accessibles found unequal") - - c = root.getChildAtIndex(2) - if c.isEqual(a): - test.fail("Different accessibles found equal") - if a.isEqual(c): - test.fail("Different accessibles found equal") - - def test_getApplication(self, test): - root = self._desktop.getChildAtIndex(0) - application = root.getApplication() - if not root.isEqual(application): - test.fail("Root accessible does not provide itself as its Application") - - a = root.getChildAtIndex(1) - application = a.getApplication() - if not root.isEqual(application): - test.fail("Child accessible does not provide the root as its Application") - - - def test_getAttributes(self, test): - root = self._desktop.getChildAtIndex(0) - attr = root.getAttributes() - res = ["foo:bar", "baz:qux", "quux:corge"] - attr.sort() - res.sort() - test.assertEqual(attr, res, "Attributes expected %s, recieved %s" % (attr, res)) - - def test_parent(self, test): - root = self._desktop.getChildAtIndex(0) - - a = root.getChildAtIndex(1) - pa = a.parent - if not root.isEqual(pa): - test.fail("Child does not correctly report its parent") - - def test_getIndexInParent(self, test): - root = self._desktop.getChildAtIndex(0) - - for i in range(0, root.childCount): - child = root.getChildAtIndex(i) - test.assertEqual(i, child.getIndexInParent(), "Childs index in parent reported incorrectly") - - def test_getLocalizedRoleName(self, test): - root = self._desktop.getChildAtIndex(0) - - ans = "window" - res = root.getLocalizedRoleName() - test.assertEqual(ans, res, - "Expected LocalizedRoleName - \"%s\". Recieved - \"%s\"" % (ans, res,)) - - a = root.getChildAtIndex(1) - a = a.getChildAtIndex(0) - ans = "html container" - res = a.getLocalizedRoleName() - test.assertEqual(ans, res, - "Expected LocalizedRoleName - \"%s\". Recieved - \"%s\"" % (ans, res,)) - - def test_getRelationSet(self, test): - root = self._desktop.getChildAtIndex(0) - # Complete test of Relation interface is separate - rset = root.getRelationSet() - - def test_getRole(self, test): - root = self._desktop.getChildAtIndex(0) - test.assertEqual(root.getRole(), 69, - "Expected role - \"69\". Recieved - \"%d\"" % (int(root.getRole()),)) - - def test_getRoleName(self, test): - root = self._desktop.getChildAtIndex(0) - - ans = "window" - res = root.getRoleName() - test.assertEqual(ans, res, - "Expected roleName - \"%s\". Recieved - \"%s\"" % (ans, res,)) - - a = root.getChildAtIndex(1) - a = a.getChildAtIndex(0) - ans = "html container" - res = a.getRoleName() - test.assertEqual(ans, res, - "Expected roleName - \"%s\". Recieved - \"%s\"" % (ans, res,)) - - def test_getState(self, test): - root = self._desktop.getChildAtIndex(0) - state = root.getState() - res = StateSet(*st) - if not res.equals(state): - test.fail("States not reported correctly") - - def test_childCount(self, test): - root = self._desktop.getChildAtIndex(0) - test.assertEqual(root.childCount, 11, - "Expected role - \"11\". Recieved - \"%d\"" % (root.childCount,)) - - def test_description(self, test): - root = self._desktop.getChildAtIndex(0) - description = "The main accessible object, root of the accessible tree" - test.assertEqual(root.description, description, - "Expected description - \"%s\". Recieved - \"%s\"" % (description, root.description,)) - - def test_tree(self, test): - """ - This is a mild stress test for the - methods: - - getChildAtIndex - - And the attributes: - - name - description - - It checks a tree of these values is correctly - passed from Application to AT. - """ - root = self._desktop.getChildAtIndex(0) - - doc = minidom.Document() - _createNode(root, doc) - answer = doc.toprettyxml() - - correct = os.path.join(os.environ["TEST_DATA_DIRECTORY"], - "accessible-test-results.xml") - file = open(correct) - cstring = file.read() - - test.assertEqual(answer, cstring, "Object tree not passed correctly") - - def teardown(self, test): - pass diff --git a/tests/pyatspi/actiontest.py b/tests/pyatspi/actiontest.py deleted file mode 100644 index 405f898..0000000 --- a/tests/pyatspi/actiontest.py +++ /dev/null @@ -1,73 +0,0 @@ -import dbus -import gobject -import os.path - -from xml.dom import minidom -import os - -from pasytest import PasyTest as _PasyTest - -import pyatspi - -class ActionTest(_PasyTest): - - __tests__ = ["setup", - "test_nActions", - "test_getDescription", - "test_getName", - "test_doAction", - "test_getKeyBinding", - "teardown", - ] - - def __init__(self, bus, path): - _PasyTest.__init__(self, "Action", False) - self._bus = bus - self._path = path - - def setup(self, test): - self._registry = pyatspi.Registry() - self._desktop = self._registry.getDesktop(0) - - def test_nActions(self, test): - root = self._desktop[0] - root = root.queryAction() - nact = root.nActions - test.assertEqual(nact, 10, "nActions expected %d, recieved %d" % (10, nact)) - - def test_getName(self, test): - root = self._desktop[0] - root = root.queryAction() - name = root.getName(0) - test.assertEqual(name, "First action", "Name expected %s, recieved %s" % ("First action", name)) - name = root.getName(1) - test.assertEqual(name, "Action", "Name expected %s, recieved %s" % ("Action", name)) - - def test_getDescription(self, test): - root = self._desktop[0] - root = root.queryAction() - description = root.getDescription(0) - expected = "First action performed" - test.assertEqual(description, expected, "Description expected %s, recieved %s" % (expected, description)) - description = root.getDescription(1) - expected = "Description of action" - test.assertEqual(description, expected, "Description expected %s, recieved %s" % (expected, description)) - - def test_doAction(self, test): - root = self._desktop[0] - root = root.queryAction() - #TODO have event emitted to check action has been performed - for i in range(0, root.nActions): - root.doAction(i) - - def test_getKeyBinding(self, test): - root = self._desktop[0] - root = root.queryAction() - for i in range(0, root.nActions): - keybinding = root.getKeyBinding(i) - expected = "%s" % (i,) - test.assertEqual(keybinding, expected, - "Keybinding expected %s, recieved %s" % (expected, keybinding)) - - def teardown(self, test): - pass diff --git a/tests/pyatspi/componenttest.py b/tests/pyatspi/componenttest.py deleted file mode 100644 index fe30c88..0000000 --- a/tests/pyatspi/componenttest.py +++ /dev/null @@ -1,145 +0,0 @@ -import dbus -import gobject -import os.path - -from xml.dom import minidom -import os - -from pasytest import PasyTest as _PasyTest - -import pyatspi -from pyatspi import Accessible -from pyatspi import BoundingBox - -ATSPI_LAYER_WIDGET = 3 -ATSPI_LAYER_MDI = 4 -ATSPI_LAYER_WINDOW = 7 - -extents_expected = [(0,0,30,20), (40,30,30,40), (0,0,70,70)] -sizes_expected = [(30,20), (30,40), (70,70)] -positions_expected = [(0,0), (40,30), (0,0)] -layers_expected = [ATSPI_LAYER_WINDOW, ATSPI_LAYER_WIDGET, ATSPI_LAYER_MDI] -zorders_expected = [-100, 100] - -class ComponentTest(_PasyTest): - - __tests__ = ["setup", - "test_contains", - "test_getAccessibleAtPoint", - "test_getExtents", - "test_getPosition", - "test_getSize", - "test_getLayer", - "test_getMDIZOrder", - "test_grabFocus", - "test_registerFocusHandler", - "test_deregisterFocusHandler", - "test_getAlpha", - "teardown", - ] - - def __init__(self, bus, path): - _PasyTest.__init__(self, "Component", False) - self._bus = bus - self._path = path - - def setup(self, test): - self._registry = pyatspi.Registry() - self._desktop = self._registry.getDesktop(0) - - def test_contains(self, test): - pass - - def test_getAccessibleAtPoint(self, test): - pass - - def test_getExtents(self, test): - root = self._desktop.getChildAtIndex(0) - one = root.getChildAtIndex(0) - two = root.getChildAtIndex(1) - - comps = [one.queryComponent(), - two.queryComponent(), - root.queryComponent(),] - - for expected, comp in zip(extents_expected, comps): - extents = comp.getExtents(0) - test.assertEqual(extents, BoundingBox(*expected), - "Extents not correct. Expected (%d, %d, %d, %d), Recieved (%d, %d, %d, %d)" - % (expected[0], expected[1], expected[2], expected[3], - extents[0], extents[1], extents[2], extents[3])) - - def test_getPosition(self, test): - pass - root = self._desktop.getChildAtIndex(0) - one = root.getChildAtIndex(0) - two = root.getChildAtIndex(1) - - comps = [one.queryComponent(), - two.queryComponent(), - root.queryComponent(),] - - for expected, comp in zip(positions_expected, comps): - position = comp.getPosition(0) - test.assertEqual(position, expected, - "Position not correct. Expected (%d, %d) Recieved (%d, %d)" - % (expected[0], expected[1], position[0], position[1])) - - def test_getSize(self, test): - root = self._desktop.getChildAtIndex(0) - one = root.getChildAtIndex(0) - two = root.getChildAtIndex(1) - - comps = [one.queryComponent(), - two.queryComponent(), - root.queryComponent(),] - - for expected, comp in zip(sizes_expected, comps): - size = comp.getSize() - test.assertEqual(size, expected, - "Size not correct. Expected (%d, %d) Recieved (%d, %d)" - % (expected[0], expected[1], size[0], size[1])) - - def test_getLayer(self, test): - root = self._desktop.getChildAtIndex(0) - one = root.getChildAtIndex(0) - two = root.getChildAtIndex(1) - - comps = [one.queryComponent(), - two.queryComponent(), - root.queryComponent(),] - - for expected, comp in zip(layers_expected, comps): - layer = comp.getLayer() - test.assertEqual(layer, expected, - "Layer not correct. Expected %d, Recieved %d" - % (int(layer), int(expected))) - - def test_getMDIZOrder(self, test): - root = self._desktop.getChildAtIndex(0) - one = root.getChildAtIndex(0) - two = root.getChildAtIndex(1) - - comps = [two.queryComponent(), - root.queryComponent(),] - - for expected, comp in zip(zorders_expected, comps): - mdizo = comp.getMDIZOrder() - test.assertEqual(mdizo, expected, - "ZOrder not correct. Expected %d, Recieved %d" - % (expected, mdizo)) - - def test_grabFocus(self, test): - pass - - def test_registerFocusHandler(self, test): - pass - - def test_deregisterFocusHandler(self, test): - pass - - def test_getAlpha(self, test): - pass - - def teardown(self, test): - pass diff --git a/tests/pyatspi/desktoptest.py b/tests/pyatspi/desktoptest.py deleted file mode 100644 index 409f634..0000000 --- a/tests/pyatspi/desktoptest.py +++ /dev/null @@ -1,184 +0,0 @@ -import dbus -import gobject -import os.path - -from xml.dom import minidom -import os - -from pasytest import PasyTest as _PasyTest - -import pyatspi - -class DesktopTest(_PasyTest): - - __tests__ = ["setup", - "test_name", - "test_getChildAtIndex", - "test_isEqual", - "test_getApplication", - "test_getAttributes", - "test_parent", - "test_getIndexInParent", - "test_getLocalizedRoleName", - "test_getRelationSet", - "test_getRole", - "test_getRoleName", - "test_getState", - "test_childCount", - "test_description", - "test_contains", - "test_getAccessibleAtPoint", - "test_getExtents", - "test_getPosition", - "test_getSize", - "test_getLayer", - "test_getMDIZOrder", - "test_grabFocus", - "test_registerFocusHandler", - "test_deregisterFocusHandler", - "test_getAlpha", - "teardown", - ] - - def __init__(self, bus, path): - _PasyTest.__init__(self, "Desktop", False) - self._bus = bus - self._path = path - - def setup(self, test): - self._registry = pyatspi.Registry() - self._desktop = self._registry.getDesktop(0) - - def test_name(self, test): - name = self._desktop.name - test.assertEqual(name, "main", "Expected name - \"main\". Recieved - \"%s\"" % (name,)) - - def test_getChildAtIndex(self, test): - root = self._desktop.getChildAtIndex(0) - test.assertEqual(root.name, "main", - "Expected name - \"main\". Recieved - \"%s\"" % (root.name,)) - - def test_isEqual(self, test): - if not self._desktop.isEqual(self._desktop): - test.fail("Same accessible found unequal to self") - - root = self._desktop.getChildAtIndex(0) - if root.isEqual(self._desktop): - test.fail("Different accessibles found equal") - if self._desktop.isEqual(root): - test.fail("Different accessibles found equal") - - def test_getApplication(self, test): - test.assertEqual(self._desktop.getApplication(), None, - "Expected application - \"None\". Recieved - \"%s\"" % (self._desktop.getApplication(),)) - - def test_getAttributes(self, test): - test.assertEqual(self._desktop.getAttributes(), [], - "Expected attributes - \"[]\". Recieved - \"%s\"" % (self._desktop.getAttributes(),)) - - def test_parent(self, test): - test.assertEqual(self._desktop.parent, None, - "Expected parent - \"None\". Recieved - \"%s\"" % (self._desktop.parent,)) - - def test_getIndexInParent(self, test): - test.assertEqual(self._desktop.getIndexInParent(), -1, - "Expected index - \"-1\". Recieved - \"%d\"" % (self._desktop.getIndexInParent(),)) - - def test_getLocalizedRoleName(self, test): - ans = "unknown" - res = self._desktop.getLocalizedRoleName() - test.assertEqual(ans, res, - "Expected LocalizedRoleName - \"%s\". Recieved - \"%s\"" % (ans, res,)) - - def test_getRelationSet(self, test): - rset = self._desktop.getRelationSet() - test.assertEqual(rset, [], - "Expected relation set - \"[]\". Recieved - \"%s\"" % (rset,)) - - def test_getRole(self, test): - test.assertEqual(self._desktop.getRole(), pyatspi.ROLE_UNKNOWN, - "Expected role - \"ROLE_UNKNOWN\". Recieved - \"%s\"" % (self._desktop.getRole(),)) - - def test_getRoleName(self, test): - ans = "unknown" - res = self._desktop.getRoleName() - test.assertEqual(ans, res, - "Expected RoleName - \"%s\". Recieved - \"%s\"" % (ans, res,)) - - def test_getState(self, test): - state = self._desktop.getState() - res = pyatspi.StateSet() - if not state.equals(res): - test.fail("Desktop state set is not empty") - - def test_childCount(self, test): - test.assertEqual(self._desktop.childCount, 1, - "Expected childCount - \"1\". Recieved - \"%d\"" % (self._desktop.childCount,)) - - def test_description(self, test): - description = "" - test.assertEqual(self._desktop.description, description, - "Expected description - \"%s\". Recieved - \"%s\"" % (description, self._desktop.description,)) - - def test_contains(self, test): - pass - - def test_getAccessibleAtPoint(self, test): - pass - - def test_getExtents(self, test): - comp = self._desktop.queryComponent() - - extents = comp.getExtents(0) - expected = pyatspi.BoundingBox(*(0,0,1024, 768)) - test.assertEqual(extents, expected, - "Extents not correct. Expected (%d, %d, %d, %d), Recieved (%d, %d, %d, %d)" - % (expected[0], expected[1], expected[2], expected[3], - extents[0], extents[1], extents[2], extents[3])) - - def test_getPosition(self, test): - comp = self._desktop.queryComponent() - - position = comp.getPosition(0) - test.assertEqual(position, (0,0), - "Position not correct. Expected (%d, %d) Recieved (%d, %d)" - % (0, 0, position[0], position[1])) - - def test_getSize(self, test): - comp = self._desktop.queryComponent() - - size = comp.getSize() - test.assertEqual(size, (1024, 768), - "Size not correct. Expected (%d, %d) Recieved (%d, %d)" - % (1024, 768, size[0], size[1])) - - def test_getLayer(self, test): - comp = self._desktop.queryComponent() - - layer = comp.getLayer() - test.assertEqual(layer, pyatspi.LAYER_WIDGET, - "Layer not correct. Expected %d, Recieved %d" - % (layer, pyatspi.LAYER_WIDGET)) - - def test_getMDIZOrder(self, test): - comp = self._desktop.queryComponent() - - mdizo = comp.getMDIZOrder() - test.assertEqual(mdizo, 0, - "ZOrder not correct. Expected %d, Recieved %d" - % (0, mdizo)) - - def test_grabFocus(self, test): - pass - - def test_registerFocusHandler(self, test): - pass - - def test_deregisterFocusHandler(self, test): - pass - - def test_getAlpha(self, test): - pass - - def teardown(self, test): - pass diff --git a/tests/pyatspi/pasytest/Events.py b/tests/pyatspi/pasytest/Events.py deleted file mode 100644 index 8e340ff..0000000 --- a/tests/pyatspi/pasytest/Events.py +++ /dev/null @@ -1,78 +0,0 @@ -#C#-Style Events in Python -#Taken from http://code.activestate.com/recipes/410686/ -#By Zoran Isailovski - -class Events: - def __getattr__(self, name): - if hasattr(self.__class__, '__events__'): - assert name in self.__class__.__events__, \ - "Event '%s' is not declared" % name - self.__dict__[name] = ev = _EventSlot(name) - return ev - def __repr__(self): return 'Events' + str(list(self)) - __str__ = __repr__ - def __len__(self): return NotImplemented - def __iter__(self): - def gen(dictitems=self.__dict__.items()): - for attr, val in dictitems: - if isinstance(val, _EventSlot): - yield val - return gen() - -#------------------------------------------------------------------------------ - -class _EventSlot: - def __init__(self, name): - self.targets = [] - self.__name__ = name - def __repr__(self): - return 'event ' + self.__name__ - def __call__(self, *a, **kw): - for f in self.targets: f(*a, **kw) - def __iadd__(self, f): - self.targets.append(f) - return self - def __isub__(self, f): - while f in self.targets: self.targets.remove(f) - return self - -#------------------------------------------------------------------------------ - -if __name__ == '__main__': - - class MyEvents(Events): - __events__ = ('OnChange', ) - - class ValueModel(object): - def __init__(self): - self.events = MyEvents() - self.__value = None - def __set(self, value): - if (self.__value == value): return - self.__value = value - self.events.OnChange() - ##self.events.OnChange2() # would fail - def __get(self): - return self.__value - Value = property(__get, __set, None, 'The actual value') - - class SillyView(object): - def __init__(self, model): - self.model = model - model.events.OnChange += self.DisplayValue - ##model.events.OnChange2 += self.DisplayValue # would raise exeception - def DisplayValue(self): - print self.model.Value - - - model = ValueModel() - view = SillyView(model) - - print '\n--- Events Demo ---' - # Events in action - for i in range(5): - model.Value = 2*i + 1 - # Events introspection - print model.events - for event in model.events: - print event diff --git a/tests/pyatspi/pasytest/Makefile.am b/tests/pyatspi/pasytest/Makefile.am deleted file mode 100644 index 1fa89ed..0000000 --- a/tests/pyatspi/pasytest/Makefile.am +++ /dev/null @@ -1,6 +0,0 @@ -EXTRA_DIST = \ - Events.py\ - Pasy.py\ - __init__.py - -CLEANFILES = *.pyc diff --git a/tests/pyatspi/pasytest/Pasy.py b/tests/pyatspi/pasytest/Pasy.py deleted file mode 100644 index 80318ee..0000000 --- a/tests/pyatspi/pasytest/Pasy.py +++ /dev/null @@ -1,146 +0,0 @@ -#Copyright (C) 2008 Codethink Ltd - -#his program is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 2 of the License, or -#(at your option) any later version. - -#This program 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 General Public License for more details. -#You should have received a copy of the GNU General Public License -#along with this program; if not, write to the Free Software -#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import gobject -from Events import Events - -import traceback - -PASY_TEST_NOT_STARTED = 0 -PASY_TEST_IN_PROGRESS = 1 -PASY_TEST_FAIL = 2 -PASY_TEST_WIN = 3 - -class PasyEvents(Events): - __events__ = ('finished', ) - -class PasyTestStep(object): - - def __init__(self, name): - self.events = PasyEvents() - self._state = PASY_TEST_NOT_STARTED - - self._name = name - - def win(self): - if self._state == PASY_TEST_IN_PROGRESS: - self._state = PASY_TEST_WIN - self.events.finished() - - def fail(self, msg): - if self._state == PASY_TEST_IN_PROGRESS: - self._state = PASY_TEST_FAIL - self.failMsg = msg - self.events.finished() - - def assertEqual(self, a, b, msg): - if a != b: - self.fail(msg) - - def assertNotEqual(self, a, b, msg): - if a == b: - self.fail(msg) - - def run(self): - self._state = PASY_TEST_IN_PROGRESS - self.entry() - - def report(self): - if self._state == PASY_TEST_WIN: - return "%s - PASSED" % (self._name,) - elif self._state == PASY_TEST_FAIL: - return "%s - FAILED - %s" % (self._name, self.failMsg) - else: - return "%s - INCOMPLETE" % (self._name,) - - @property - def state(self): - return self._state - -class PasyTestFunc(PasyTestStep): - - def __init__(self, name, func): - PasyTestStep.__init__(self, name) - self._func = func - - def entry(self): - try: - self._func(self) - except Exception, e: - self.fail(e.message) - traceback.print_exc() - self.win() - -class PasyTest(PasyTestStep): - - __tests__ = [] - - def __init__(self, name, cont): - PasyTestStep.__init__(self, name) - - self._cont = cont - self._tests = [] - - for name in self.__tests__: - func = getattr(self, name) - self._addfunc(func.func_name, func) - - def _addfunc(self, name, func): - functest = PasyTestFunc(func.func_name, func) - self._tests.append(functest) - - def entry(self): - self._iter = self._test_iterator() - gobject.idle_add(self.idle_handler) - - def idle_handler(self): - try: - step = self._iter.next() - def finished_handler(): - if step.state == PASY_TEST_WIN or self._cont == True: - gobject.idle_add(self.idle_handler) - elif step.state == PASY_TEST_FAIL and self._cont == False: - self.fail("Sub test %s Failed" % step._name) - step.events.finished += finished_handler - step.run() - except StopIteration: - # No More tests, check for success or fail - succeeded = True - for test in self._tests: - succeeded = succeeded and (test.state == PASY_TEST_WIN) - if succeeded: - self.win() - else: - self.fail() - return False - - def _test_iterator(self): - for test in self._tests: - yield test - - def report(self): - if self._state == PASY_TEST_WIN: - header = "%s - PASSED" % (self._name,) - elif self._state == PASY_TEST_FAIL: - header = "%s - FAILED" % (self._name,) - else: - header = "%s - INCOMPLETE" %s (self._name,) - - step_messages = [] - for test in self._tests: - step_messages.append(test.report()) - - step_report = "\n\t".join(step_messages) - return header + "\n\t" + step_report diff --git a/tests/pyatspi/pasytest/__init__.py b/tests/pyatspi/pasytest/__init__.py deleted file mode 100644 index c54bff1..0000000 --- a/tests/pyatspi/pasytest/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -#Copyright (C) 2008 Codethink Ltd - -#his program is free software; you can redistribute it and/or modify -#it under the terms of the GNU General Public License as published by -#the Free Software Foundation; either version 2 of the License, or -#(at your option) any later version. - -#This program 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 General Public License for more details. -#You should have received a copy of the GNU General Public License -#along with this program; if not, write to the Free Software -#Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from Pasy import PasyTestStep, PasyTestFunc, PasyTest diff --git a/tests/pyatspi/relationtest.py b/tests/pyatspi/relationtest.py deleted file mode 100644 index 77ce31c..0000000 --- a/tests/pyatspi/relationtest.py +++ /dev/null @@ -1,70 +0,0 @@ -import dbus -import gobject -import os.path - -from xml.dom import minidom -import os - -from pasytest import PasyTest as _PasyTest - -import pyatspi - -class RelationTest(_PasyTest): - - __tests__ = ["setup", - "teardown", - "test_getRelationType", - "test_getRelationTypeName", - "test_getNTargets", - "test_getTarget", - ] - - def __init__(self, bus, path): - _PasyTest.__init__(self, "Relation", False) - self._bus = bus - self._path = path - - def setup(self, test): - self._registry = pyatspi.Registry() - self._desktop = self._registry.getDesktop(0) - self._root = self._desktop[0] - self._rset = self._root.getRelationSet() - test.assertEqual(len(self._rset), 4, "Num relations expected %d, recieved %d" % (6, len(self._rset))) - - def test_getRelationType(self, test): - expected = [pyatspi.RELATION_EMBEDS, - pyatspi.RELATION_PARENT_WINDOW_OF, - pyatspi.RELATION_DESCRIBED_BY, - pyatspi.RELATION_POPUP_FOR,] - rtypes = [rel.getRelationType() for rel in self._rset] - for exp, type in zip(expected, rtypes): - test.assertEqual(exp, type, "Relation type expected %s, recieved %s" % (exp, type)) - - def test_getRelationTypeName(self, test): - # FIXME This may not have been implemented in CORBA. - # Completely unused? - pass - - def test_getNTargets(self, test): - expected = [1, 1, 1, 3] - ntargs = [rel.getNTargets() for rel in self._rset] - for exp, ntarg in zip(expected, ntargs): - test.assertEqual(exp, ntarg, "Number of targets expected %s, recieved %s" % (exp, ntarg)) - - def test_getTarget(self, test): - rone = self._rset[0] - tone = rone.getTarget(0) - tonename = tone.name - test.assertEqual(tonename, "r1", "Target name expected %s, recieved %s" % ("r1", tonename)) - tonerole = tone.getRoleName() - test.assertEqual(tonerole, "invalid", "Target RoleName expected %s, recieved %s" % ("invalid", tonename)) - - rtwo = self._rset[3] - ttwo = rtwo.getTarget(2) - ttwoname = ttwo.name - test.assertEqual(ttwoname, "m3", "Target name expected %s, recieved %s" % ("m3", ttwoname)) - ttworole = ttwo.getRoleName() - test.assertEqual(ttworole, "invalid", "Target RoleName expected %s, recieved %s" % ("invalid", ttwoname)) - - def teardown(self, test): - pass diff --git a/tests/pyatspi/runtests.sh b/tests/pyatspi/runtests.sh deleted file mode 100755 index 1ef1295..0000000 --- a/tests/pyatspi/runtests.sh +++ /dev/null @@ -1,12 +0,0 @@ -export PYTHONPATH=$top_srcdir - -export TEST_DATA_DIRECTORY=$top_srcdir/tests/data -export TEST_ATSPI_LIBRARY=$top_builddir/atk-adaptor/.libs/libspiatk.so -export TEST_MODULES_DIRECTORY=$top_builddir/tests/apps/.libs -export TEST_APPLICATION=$top_builddir/tests/apps/test-application - -$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libaccessibleapp.so -m accessibletest -n AccessibleTest -$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libactionapp.so -m actiontest -n ActionTest -$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libcomponentapp.so -m componenttest -n ComponentTest -$PYTHON $top_srcdir/tests/pyatspi/testrunner -l librelationapp.so -m relationtest -n RelationTest -$PYTHON $top_srcdir/tests/pyatspi/testrunner -l libaccessibleapp.so -m statetest -n StateTest diff --git a/tests/pyatspi/setvars.sh b/tests/pyatspi/setvars.sh deleted file mode 100644 index d9638a2..0000000 --- a/tests/pyatspi/setvars.sh +++ /dev/null @@ -1,6 +0,0 @@ -export PYTHONPATH=../../ - -export TEST_DATA_DIRECTORY=../data -export TEST_ATSPI_LIBRARY=../../atk-adaptor/.libs/libspiatk.so -export TEST_MODULES_DIRECTORY=../apps/.libs -export TEST_APPLICATION=../apps/test-application diff --git a/tests/pyatspi/statetest.py b/tests/pyatspi/statetest.py deleted file mode 100644 index 223cf6e..0000000 --- a/tests/pyatspi/statetest.py +++ /dev/null @@ -1,101 +0,0 @@ -import dbus -import gobject -import os.path - -from xml.dom import minidom -import os - -from pasytest import PasyTest as _PasyTest - -import pyatspi -from pyatspi import StateSet - -os = [pyatspi.STATE_MULTISELECTABLE, - pyatspi.STATE_PRESSED, - pyatspi.STATE_SHOWING, - pyatspi.STATE_TRANSIENT, - pyatspi.STATE_COLLAPSED, - pyatspi.STATE_EDITABLE,] - -class StateTest(_PasyTest): - - __tests__ = ["setup", - "test_contains", - "test_add", - "test_remove", - "test_equals", - "test_compare", - "test_isEmpty", - "test_getStates", - "teardown", - ] - - def __init__(self, bus, path): - _PasyTest.__init__(self, "State", False) - - def setup(self, test): - pass - - def test_contains(self, test): - state = StateSet(*os) - if not state.contains(pyatspi.STATE_PRESSED): - test.fail("Does not find contained state") - if state.contains(pyatspi.STATE_ACTIVE): - test.fail("Finds state not contained") - - def test_add(self, test): - state = StateSet() - state.add(pyatspi.STATE_PRESSED) - if not state.contains(pyatspi.STATE_PRESSED): - test.fail("State not added") - - def test_remove(self, test): - state = StateSet(*os) - state.remove(pyatspi.STATE_PRESSED) - if state.contains(pyatspi.STATE_PRESSED): - test.fail("State not removed") - - def test_equals(self, test): - one = StateSet(*os) - two = StateSet(*os) - if not one.equals(two): - test.fail("Same states not found equal") - two.remove(pyatspi.STATE_PRESSED) - if two.equals(one): - test.fail("Unequal states found equal") - - def test_isEmpty(self, test): - emp = StateSet() - if not emp.isEmpty(): - test.fail("Empty state found non-empty") - emp.add(pyatspi.STATE_PRESSED) - if emp.isEmpty(): - test.fail("State incorrectly found empty") - - def test_compare(self, test): - one = StateSet(*os) - two = StateSet(*os) - - onemtwo = one.compare(two) - if not onemtwo.isEmpty(): - test.fail("Equal states when compared yeilds non-empty state") - - one.add(pyatspi.STATE_ACTIVE) - onemtwo = one.compare(two) - - act = StateSet(pyatspi.STATE_ACTIVE) - if not onemtwo.equals(act): - test.fail("Compared states do not yeild correct state") - - def test_getStates(self, test): - state = StateSet(*os) - - states = state.getStates() - cone = set(states) - ctwo = set(os) - - if not (cone.issubset(ctwo) and ctwo.issubset(cone)): - test.fail("States not reported correctly") - - def teardown(self, test): - pass diff --git a/tests/pyatspi/testrunner b/tests/pyatspi/testrunner deleted file mode 100755 index 92531e2..0000000 --- a/tests/pyatspi/testrunner +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/python - -import gobject -import dbus -import sys -import os -import time -from random import randint - -from optparse import OptionParser -from pasytest import PasyTest - -from dbus.mainloop.glib import DBusGMainLoop - -DBusGMainLoop(set_as_default=True) - -def run_test_app(module_name, dbus_name=None, wait_for_debug=False): - import os - from subprocess import Popen - - test_data_directory = os.environ["TEST_DATA_DIRECTORY"] - test_modules_directory = os.environ["TEST_MODULES_DIRECTORY"] - test_atspi_library = os.environ["TEST_ATSPI_LIBRARY"] - test_application = os.environ["TEST_APPLICATION"] - - test_module = os.path.join(test_modules_directory, module_name) - - if (dbus_name): - print " ".join([test_application, - "--atspi-dbus-name", dbus_name, - "--test-atspi-library", test_atspi_library, - "--test-module", test_module, - "--test-data-directory", test_data_directory,]) - pop = Popen([test_application, - "--atspi-dbus-name", dbus_name, - "--test-atspi-library", test_atspi_library, - "--test-module", test_module, - "--test-data-directory", test_data_directory,]) - else: - print " ".join([test_application, - "--test-atspi-library", test_atspi_library, - "--test-module", test_module, - "--test-data-directory", test_data_directory,]) - pop = Popen([test_application, - "--test-atspi-library", test_atspi_library, - "--test-module", test_module, - "--test-data-directory", test_data_directory,]) - - wait_message = """ - The test application %s has been started with PID %d. - - To continue the test press ENTER.\n\n - """ - if (wait_for_debug): - raw_input(wait_message % (module_name, pop.pid)) - -def main(argv): - parser = OptionParser() - parser.add_option("-l", "--library", dest="test_library") - parser.add_option("-m", "--module", dest="test_module") - parser.add_option("-n", "--name", dest="test_name") - parser.add_option("-w", "--wait", action="store_true", dest="wait", default=False) - (options, args) = parser.parse_args() - - bus = dbus.SessionBus() - name = "test.atspi.R" + str(randint(1, 1000)) - - app = run_test_app(options.test_library, name, wait_for_debug=options.wait) - time.sleep(1) - print "Started test app on bus name %s" % (name,) - - to = bus.get_object(name, "/org/codethink/atspi/test") - test = dbus.Interface(to, "org.codethink.atspi.test") - - # Run the test script here - os.environ["ATSPI_TEST_APP_NAME"] = name - module = __import__(options.test_module) - test_class = getattr(module, options.test_name) - test_object = test_class(bus, name) - test_object.run() - - loop = gobject.MainLoop() - - def finished_handler(): - loop.quit() - print "\n" + test_object.report() + "\n" - test.finish() - - test_object.events.finished += finished_handler - - loop.run() - -if __name__=="__main__": - sys.exit(main(sys.argv)) |