From 4c2aee06d56e5bff448411965139fe7913fd670d Mon Sep 17 00:00:00 2001 From: Patryk Kaczmarek Date: Mon, 16 Feb 2015 15:15:42 +0100 Subject: Action tests added and some test framework refactor * Accessible Action Test addded * XML loader unificated for different Atk Object types * Atk Suite now can run single interface tests * get_root_obj function changed * Created tests utils for test unification * Makefile.am files formating changed and unused parts deleted * MyAtkObject attributes receiving fixed --- tests/Makefile.am | 48 +++++--- tests/README | 8 ++ tests/atk-object-xml-loader.c | 103 ++++++++++------ tests/atk_suite.c | 32 ++++- tests/atk_suite.h | 2 + tests/atk_test_accessible.c | 211 ++++++++++++-------------------- tests/atk_test_action.c | 120 ++++++++++++++++++ tests/atk_test_util.c | 80 ++++++++++++ tests/atk_test_util.h | 45 +++++++ tests/data/test-accessible.xml | 16 +++ tests/data/test-action.xml | 11 ++ tests/dummyatk/Makefile.am | 19 +-- tests/dummyatk/my-atk-action.c | 270 +++++++++++++++++++++++++++++++++++++++++ tests/dummyatk/my-atk-action.h | 63 ++++++++++ tests/dummyatk/my-atk-object.c | 45 ++----- tests/dummyatk/my-atk-object.h | 12 ++ tests/dummyatk/my-atk.h | 1 + tests/test-application.c | 7 +- 18 files changed, 848 insertions(+), 245 deletions(-) create mode 100644 tests/atk_test_action.c create mode 100644 tests/atk_test_util.c create mode 100644 tests/atk_test_util.h create mode 100644 tests/data/test-accessible.xml create mode 100644 tests/data/test-action.xml create mode 100644 tests/dummyatk/my-atk-action.c create mode 100644 tests/dummyatk/my-atk-action.h diff --git a/tests/Makefile.am b/tests/Makefile.am index c8d9a3a..c03d3fe 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -2,28 +2,30 @@ SUBDIRS = dummyatk noinst_PROGRAMS = atk-test app-test TESTS = atk-test -lib_LTLIBRARIES =libxmlloader.la +lib_LTLIBRARIES =libxmlloader.la libtestutils.la atk_test_CFLAGS = $(DBUS_CFLAGS) \ - -I$(top_builddir)\ - $(GLIB_CFLAGS) \ - $(ATSPI_CFLAGS) \ - -I$(top_srcdir)/tests/dummyatk/ \ - -I$(top_srcdir)/tests/dummyatk/.libs \ - -I$(top_srcdir)/tests/dummyatk/.deps \ - -I$(top_srcdir) + $(GLIB_CFLAGS) \ + $(ATSPI_CFLAGS) \ + -I$(top_builddir)\ + -I$(top_srcdir)/tests/dummyatk/ \ + -I$(top_srcdir)/tests/dummyatk/.libs \ + -I$(top_srcdir)/tests/dummyatk/.deps \ + -I$(top_srcdir) atk_test_LDFLAGS = libxmlloader.la \ - $(GLIB_LIBS) \ - $(ATSPI_LIBS) \ - $(top_srcdir)/tests/dummyatk/libdummyatk.la + libtestutils.la \ + $(GLIB_LIBS) \ + $(ATSPI_LIBS) \ + $(top_srcdir)/tests/dummyatk/libdummyatk.la atk_test_CPPFLAGS = -DTESTS_BUILD_DIR=\"$(top_builddir)/tests\" \ -DTESTS_SRC_DIR=\"$(top_srcdir)/tests\" \ -DTESTS_DATA_DIR=\"$(top_srcdir)/tests/data\" atk_test_SOURCES = atk_suite.c \ - atk_test_accessible.c + atk_test_accessible.c \ + atk_test_action.c app_test_CFLAGS = -I$(top_builddir) \ $(GLIB_CFLAGS) \ @@ -32,6 +34,7 @@ app_test_CFLAGS = -I$(top_builddir) \ -I$(top_srcdir)/atk-adaptor app_test_LDFLAGS = libxmlloader.la \ + libtestutils.la \ $(GLIB_LIBS) \ $(ATK_LIBS) \ $(top_srcdir)/tests/dummyatk/libdummyatk.la \ @@ -39,20 +42,27 @@ app_test_LDFLAGS = libxmlloader.la \ app_test_SOURCES = test-application.c -libxmlloader_la_CFLAGS = \ - $(GLIB_CFLAGS) \ +libxmlloader_la_CFLAGS = $(GLIB_CFLAGS) \ $(GOBJ_CFLAGS) \ $(XML_CFLAGS) \ $(ATK_CFLAGS) \ -I$(top_srcdir)/tests/dummyatk/ -libxmlloader_la_LIBADD = \ - $(GLIB_LIBS) \ +libxmlloader_la_LIBADD = $(GLIB_LIBS) \ $(XML_LIBS) \ $(GOBJ_LIBS) \ $(top_srcdir)/tests/dummyatk/libdummyatk.la \ $(ATK_LIBS) -libxmlloader_la_SOURCES =\ - atk-object-xml-loader.c\ - atk-object-xml-loader.h +libxmlloader_la_SOURCES = atk-object-xml-loader.c\ + atk-object-xml-loader.h + +libtestutils_la_CFLAGS = -I$(top_builddir) \ + $(GLIB_CFLAGS) \ + $(ATSPI_CFLAGS) + +libtestutils_la_LIBADD = $(GLIB_LIBS) \ + $(ATSPI_LIBS) + +libtestutils_la_SOURCES = atk_test_util.c \ + atk_test_util.h diff --git a/tests/README b/tests/README index b48cb51..b49f270 100644 --- a/tests/README +++ b/tests/README @@ -72,3 +72,11 @@ AVAILABLE TESTS: -accessible_set_cache_mask -accessible_clear_cache -accessible_get_process_id +- Action: + -get_action_interface + -action_get_action_description + -action_get_action_name + -action_get_n_actions + -action_get_key_binding + -action_get_localized_name + -action_do_action diff --git a/tests/atk-object-xml-loader.c b/tests/atk-object-xml-loader.c index a05b4ea..2174584 100644 --- a/tests/atk-object-xml-loader.c +++ b/tests/atk-object-xml-loader.c @@ -29,6 +29,8 @@ #include "my-atk.h" #define ACCESSIBLE_NODE ((const xmlChar *) "accessible") +#define ACC_ACTION_NODE ((const xmlChar *) "accessible_action") +#define ACTION_NODE ((const xmlChar *) "action") #define INTERFACE_NODE ((const xmlChar *) "interface") #define RELATION_NODE ((const xmlChar *) "relation") #define STATE_NODE ((const xmlChar *) "state") @@ -40,22 +42,26 @@ #define RELATION_TYPE_ATTR ((const xmlChar *) "relation_type") #define RELATION_TARGET_NAME_ATTR ((const xmlChar *) "target_name") #define STATE_TYPE_ATTR ((const xmlChar *) "state_enum") +#define ACTION_NAME_ATTR ((const xmlChar *) "action_name") +#define ACTION_DES_ATTR ((const xmlChar *) "action_description") +#define ACTION_KEY_BIND_ATTR ((const xmlChar *) "key_binding") MyAtkObject *relation_target = NULL; -static MyAtkObject * +static gpointer create_atk_object_from_element (xmlNode *element) { xmlNode *child_node; xmlNode *child_node2; - MyAtkObject *obj = NULL; - MyAtkObject *child_obj = NULL; + gpointer obj; + gpointer child_obj; AtkRelationSet *relation_set = NULL; AtkObject *array[1]; AtkRelation *relation; AtkStateSet *state_set = NULL; AtkStateType state_type; + AtkAction *action; xmlChar *name; xmlChar *description; @@ -65,51 +71,66 @@ create_atk_object_from_element (xmlNode *element) xmlChar *role; gint relation_type; xmlChar *relation_target_name; - GType type = MY_TYPE_ATK_OBJECT; + xmlChar *action_name; + xmlChar *action_des; + xmlChar *action_key_bind; name = xmlGetProp (element, NAME_ATTR); description = xmlGetProp (element, DESC_ATTR); role = xmlGetProp (element, ROLE_ATTR); type_text = xmlGetProp (element, TYPE_ATTR); + GType type = MY_TYPE_ATK_OBJECT; + + if (!xmlStrcmp (element->name, ACCESSIBLE_NODE)) + type = MY_TYPE_ATK_OBJECT; + + if (!xmlStrcmp (element->name, ACC_ACTION_NODE)) + type = MY_TYPE_ATK_ACTION; - obj = MY_ATK_OBJECT (g_object_new (type, - "accessible-name", name, - "accessible-description", description, - "accessible-role", atk_role_for_name (role), - NULL)); + obj = g_object_new (type, + "accessible-name", name, + "accessible-description", description, + "accessible-role", atk_role_for_name (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_node2 = child_node->xmlChildrenNode; - while (child_node2 != NULL) { - if (!xmlStrcmp (child_node2->name, RELATION_NODE)) { - relation_type_text = xmlGetProp (child_node2, RELATION_TYPE_ATTR); - relation_type = atoi (relation_type_text); - relation_target_name = xmlGetProp (child_node2, RELATION_TARGET_NAME_ATTR); - relation_set = atk_object_ref_relation_set (ATK_OBJECT(child_obj)); - array[0] = ATK_OBJECT (obj); - relation = atk_relation_new (array, 1, relation_type); - atk_relation_new (array, 1, relation_type); - atk_relation_set_add (relation_set, relation); - g_object_unref (relation); - g_object_unref (relation_set); - xmlFree (relation_target_name); - xmlFree (relation_type_text); - } - if (!xmlStrcmp (child_node2->name, STATE_NODE)) { - state_set = atk_object_ref_state_set (ATK_OBJECT(child_obj)); - state_enum = xmlGetProp (child_node2, STATE_TYPE_ATTR); - state_type = atk_state_type_for_name (state_enum); - atk_state_set_add_state (state_set, state_type); - g_object_unref (state_set); - xmlFree (state_enum); - } - child_node2 = child_node2->next; + if (!xmlStrcmp (child_node->name, ACCESSIBLE_NODE) || + !xmlStrcmp (child_node->name, ACC_ACTION_NODE)) { + child_obj = create_atk_object_from_element (child_node); + my_atk_object_add_child (obj, child_obj); + } + child_node2 = child_node->xmlChildrenNode; + while (child_node2 != NULL) { + if (!xmlStrcmp (child_node2->name, RELATION_NODE)) { + relation_type_text = xmlGetProp (child_node2, RELATION_TYPE_ATTR); + relation_type = atoi (relation_type_text); + relation_target_name = xmlGetProp (child_node2, RELATION_TARGET_NAME_ATTR); + relation_set = atk_object_ref_relation_set (ATK_OBJECT (child_obj)); + array[0] = ATK_OBJECT (obj); + relation = atk_relation_new (array, 1, relation_type); + atk_relation_new (array, 1, relation_type); + atk_relation_set_add (relation_set, relation); + g_object_unref (relation); + g_object_unref (relation_set); + xmlFree (relation_target_name); + xmlFree (relation_type_text); + } + if (!xmlStrcmp (child_node2->name, STATE_NODE)) { + state_set = atk_object_ref_state_set (ATK_OBJECT (child_obj)); + state_enum = xmlGetProp (child_node2, STATE_TYPE_ATTR); + state_type = atk_state_type_for_name (state_enum); + atk_state_set_add_state (state_set, state_type); + g_object_unref (state_set); + xmlFree (state_enum); } + if (!xmlStrcmp (child_node2->name, ACTION_NODE)) { + action_name = xmlGetProp (child_node2, ACTION_NAME_ATTR); + action_des = xmlGetProp (child_node2, ACTION_DES_ATTR); + action_key_bind = xmlGetProp (child_node2, ACTION_KEY_BIND_ATTR); + my_atk_action_add_action (child_obj, action_name, action_des, action_key_bind); + } + child_node2 = child_node2->next; } child_node = child_node->next; } @@ -134,8 +155,10 @@ atk_object_xml_parse (gchar *filename) root_element = xmlDocGetRootElement (doc); - if (!xmlStrcmp (root_element->name, ACCESSIBLE_NODE)) - new_atk_object = create_atk_object_from_element (root_element); + if (!root_element) + return NULL; + + new_atk_object = create_atk_object_from_element (root_element); xmlFreeDoc (doc); return new_atk_object; diff --git a/tests/atk_suite.c b/tests/atk_suite.c index 0c8a21b..0afb0ea 100644 --- a/tests/atk_suite.c +++ b/tests/atk_suite.c @@ -27,19 +27,21 @@ #include #include #include "atk_suite.h" +#include "atk_test_util.h" static gchar *tdata_list = NULL; +static gchar *one_test = NULL; typedef struct _Atk_Test_Case Atk_Test_Case; -struct _Atk_Test_Case -{ +struct _Atk_Test_Case { const char *test_case; void (*build)( void); }; static const Atk_Test_Case atc[] = { { ATK_TEST_PATH_ACCESSIBLE, atk_test_accessible }, + { ATK_TEST_PATH_ACTION, atk_test_action }, { NULL, NULL} }; @@ -59,11 +61,12 @@ atk_suite_build (int argc, char **argv ) { g_test_init (&argc, &argv, NULL); atk_test_accessible (); + atk_test_action (); } -static GOptionEntry optentries[] = -{ +static GOptionEntry optentries[] = { {"list", 'l', 0, G_OPTION_ARG_NONE, &tdata_list, "Display all available test cases", NULL}, + {"separate", 0, 0, G_OPTION_ARG_STRING, &one_test, "Run only NAME test", "NAME"}, {NULL} }; @@ -85,9 +88,28 @@ main(int argc, char **argv) return EXIT_SUCCESS; } + clean_exit_on_fail (); + + if (one_test) { + if (!g_strcmp0 (one_test, "Accessible")) { + g_test_init (&argc, &argv, NULL); + atk_test_accessible (); + test_result = g_test_run (); + return (test_result == 0 ) ? 0 : 255; + } + if (!g_strcmp0 (one_test, "Action")) { + g_test_init (&argc, &argv, NULL); + atk_test_action (); + test_result = g_test_run (); + return (test_result == 0 ) ? 0 : 255; + } + g_print ("Unknown test name\n"); + _list_tests (); + return EXIT_SUCCESS; + } atk_suite_build (argc, argv); test_result = g_test_run (); - return ( test_result == 0 ) ? 0 : 255; + return (test_result == 0 ) ? 0 : 255; } diff --git a/tests/atk_suite.h b/tests/atk_suite.h index 59b3892..2ac7e58 100644 --- a/tests/atk_suite.h +++ b/tests/atk_suite.h @@ -26,7 +26,9 @@ #include #define ATK_TEST_PATH_ACCESSIBLE (const char *)"/Accessible" +#define ATK_TEST_PATH_ACTION (const char *)"/Action" void atk_test_accessible (void); +void atk_test_action (void); #endif /* _ATK_SUITE_H */ diff --git a/tests/atk_test_accessible.c b/tests/atk_test_accessible.c index 50ae9da..e6aeb2f 100644 --- a/tests/atk_test_accessible.c +++ b/tests/atk_test_accessible.c @@ -20,67 +20,10 @@ * Boston, MA 02111-1307, USA. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "atk_suite.h" +#include "atk_test_util.h" -#define DATA_FILE TESTS_DATA_DIR"/test.xml" - -pid_t child_pid; - -void -run_app (void) -{ - int i=0; - child_pid = fork (); - if (child_pid == 0) { - execlp ("./app-test", - "./app-test", - "--test-data-file", - DATA_FILE, - NULL); - _exit(EXIT_SUCCESS); - } -} - -AtspiAccessible * get_root_obj (void) -{ - int i; - AtspiAccessible *obj= NULL; - - run_app (); - - /* sleep is needed to wait for forked test application */ - sleep (1); - - obj = atspi_get_desktop (0); - gint child_count = atspi_accessible_get_child_count (obj, NULL); - if (child_count < 1) { - g_test_message ("Fail, test application not found\n"); - g_test_fail (); - kill (child_pid, SIGTERM); - return NULL; - } - - for (i=0; ilen == 3); + g_assert (attr_arr->len == (sizeof(valid_attr)/sizeof(gchar *))-1); for( i = 0; i < attr_arr->len; ++i) { g_assert_cmpstr (valid_attr[i], ==, g_array_index (attr_arr, gchar *, i)); } @@ -244,7 +187,7 @@ atk_test_accessible_get_attributes_as_array (gpointer fixture, gconstpointer use static void atk_test_accessible_get_toolkit_name (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); gchar *toolkit_name = atspi_accessible_get_toolkit_name (obj, NULL); g_assert_cmpstr (toolkit_name, ==, "atspitesting-toolkit"); @@ -253,7 +196,7 @@ atk_test_accessible_get_toolkit_name (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_toolkit_version (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); gchar *toolkit_ver = atspi_accessible_get_toolkit_version (obj, NULL); /* should be empty string, because no value is setted */ g_assert_cmpstr (toolkit_ver, ==, ""); @@ -262,7 +205,7 @@ atk_test_accessible_get_toolkit_version (gpointer fixture, gconstpointer user_da static void atk_test_accessible_get_atspi_version (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); gchar *atspi_version = atspi_accessible_get_atspi_version (obj, NULL); g_assert_cmpstr (atspi_version, ==, "2.0"); } @@ -270,7 +213,7 @@ atk_test_accessible_get_atspi_version (gpointer fixture, gconstpointer user_data static void atk_test_accessible_get_id (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); gint app_id = atspi_accessible_get_id (obj, NULL); g_assert_cmpint (app_id, !=, -1); } @@ -278,7 +221,7 @@ atk_test_accessible_get_id (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_application (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiAccessible *app = atspi_accessible_get_application (obj, NULL); g_assert (app != NULL); } @@ -286,7 +229,7 @@ atk_test_accessible_get_application (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_action_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiAction *iface = atspi_accessible_get_action_iface (obj); g_assert (iface == NULL); } @@ -294,7 +237,7 @@ atk_test_accessible_get_action_iface (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_collection_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiCollection *iface = atspi_accessible_get_collection_iface (obj); g_assert (iface != NULL); } @@ -302,7 +245,7 @@ atk_test_accessible_get_collection_iface (gpointer fixture, gconstpointer user_d static void atk_test_accessible_get_component_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiComponent *iface = atspi_accessible_get_component_iface (obj); g_assert (iface == NULL); } @@ -310,7 +253,7 @@ atk_test_accessible_get_component_iface (gpointer fixture, gconstpointer user_da static void atk_test_accessible_get_document_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiDocument *iface = atspi_accessible_get_document_iface (obj); g_assert (iface == NULL); } @@ -318,7 +261,7 @@ atk_test_accessible_get_document_iface (gpointer fixture, gconstpointer user_dat static void atk_test_accessible_get_editable_text_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiEditableText *iface = atspi_accessible_get_editable_text_iface (obj); g_assert (iface == NULL); } @@ -326,7 +269,7 @@ atk_test_accessible_get_editable_text_iface (gpointer fixture, gconstpointer use static void atk_test_accessible_get_hypertext_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiHypertext *iface = atspi_accessible_get_hypertext_iface (obj); g_assert (iface == NULL); } @@ -334,7 +277,7 @@ atk_test_accessible_get_hypertext_iface (gpointer fixture, gconstpointer user_da static void atk_test_accessible_get_image_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiImage *iface = atspi_accessible_get_image_iface (obj); g_assert (iface == NULL); } @@ -342,7 +285,7 @@ atk_test_accessible_get_image_iface (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_selection_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiSelection *iface = atspi_accessible_get_selection_iface (obj); g_assert (iface == NULL); } @@ -350,7 +293,7 @@ atk_test_accessible_get_selection_iface (gpointer fixture, gconstpointer user_da static void atk_test_accessible_get_table_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiTable *iface = atspi_accessible_get_table_iface (obj); g_assert (iface == NULL); } @@ -358,7 +301,7 @@ atk_test_accessible_get_table_iface (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_text_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiText *iface = atspi_accessible_get_text_iface (obj); g_assert (iface == NULL); } @@ -366,7 +309,7 @@ atk_test_accessible_get_text_iface (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_value_iface (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiValue *iface = atspi_accessible_get_value_iface (obj); g_assert (iface == NULL); } @@ -374,7 +317,7 @@ atk_test_accessible_get_value_iface (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_interfaces (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj(); + AtspiAccessible *obj = get_root_obj (DATA_FILE); gchar *valid_obj_ifaces[] = { "Accessible", "Collection" }; GArray *ifaces = atspi_accessible_get_interfaces (obj); @@ -387,7 +330,7 @@ atk_test_accessible_get_interfaces (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_object_locale (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); const gchar *obj_locale = atspi_accessible_get_object_locale (obj, NULL); g_assert_cmpstr (obj_locale, ==, setlocale (LC_MESSAGES, NULL)); } @@ -395,7 +338,7 @@ atk_test_accessible_get_object_locale (gpointer fixture, gconstpointer user_data static void atk_test_accessible_set_cache_mask (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); AtspiCache cache_mask = ATSPI_CACHE_ROLE; atspi_accessible_set_cache_mask (obj, cache_mask); g_assert_cmpint (obj->parent.app->cache, ==, cache_mask); @@ -413,7 +356,7 @@ atk_test_check_cache_cleared (AtspiAccessible *obj) static void atk_test_accessible_clear_cache (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); atspi_accessible_clear_cache (obj); atk_test_check_cache_cleared (obj); } @@ -421,7 +364,7 @@ atk_test_accessible_clear_cache (gpointer fixture, gconstpointer user_data) static void atk_test_accessible_get_process_id (gpointer fixture, gconstpointer user_data) { - AtspiAccessible *obj = get_root_obj (); + AtspiAccessible *obj = get_root_obj (DATA_FILE); guint proc_id = atspi_accessible_get_process_id (obj, NULL); g_assert_cmpint (proc_id, ==, child_pid); } @@ -430,73 +373,73 @@ void atk_test_accessible(void ) { g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accesible_get_name", - 0, NULL, NULL, atk_test_accessible_get_name, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_name, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_description", - 0, NULL, NULL, atk_test_accessible_get_description, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_description, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_child_count", - 0, NULL, NULL, atk_test_accessible_get_child_count, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_child_count, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_parent", - 0, NULL, NULL, atk_test_accessible_get_parent, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_parent, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_child_at_index", - 0, NULL, NULL, atk_test_accessible_get_child_at_index, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_child_at_index, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_index_in_parent", - 0, NULL, NULL, atk_test_accessible_get_index_in_parent, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_index_in_parent, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_relation_set_1", - 0, NULL, NULL, atk_test_accessible_get_relation_set_1, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_relation_set_1, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_relation_set_2", - 0, NULL, NULL, atk_test_accessible_get_relation_set_2, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_relation_set_2, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_role", - 0, NULL, NULL, atk_test_accessible_get_role, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_role, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_role_name", - 0, NULL, NULL, atk_test_accessible_get_role_name, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_role_name, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_localized_role_name", - 0, NULL, NULL, atk_test_accessible_get_localized_role_name, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_localized_role_name, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_state_set", - 0, NULL, NULL, atk_test_accessible_get_state_set, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_state_set, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_attributes", - 0, NULL, NULL, atk_test_accessible_get_attributes, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_attributes, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_attributes_as_array", - 0, NULL, NULL, atk_test_accessible_get_attributes_as_array, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_attributes_as_array, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_toolkit_name", - 0, NULL, NULL, atk_test_accessible_get_toolkit_name, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_toolkit_name, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_toolkit_version", - 0, NULL, NULL, atk_test_accessible_get_toolkit_version, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_toolkit_version, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_atspi_version", - 0, NULL, NULL, atk_test_accessible_get_atspi_version, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_atspi_version, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_id", - 0, NULL, NULL, atk_test_accessible_get_id, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_id, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_application", - 0, NULL, NULL, atk_test_accessible_get_application, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_application, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_action_iface", - 0, NULL, NULL, atk_test_accessible_get_action_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_action_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_collection_iface", - 0, NULL, NULL, atk_test_accessible_get_collection_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_collection_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_component_iface", - 0, NULL, NULL, atk_test_accessible_get_component_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_component_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_document_iface", - 0, NULL, NULL, atk_test_accessible_get_document_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_document_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_editable_text_iface", - 0, NULL, NULL, atk_test_accessible_get_editable_text_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_editable_text_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_hypertext_iface", - 0, NULL, NULL, atk_test_accessible_get_hypertext_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_hypertext_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_image_iface", - 0, NULL, NULL, atk_test_accessible_get_image_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_image_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_selection_iface", - 0, NULL, NULL, atk_test_accessible_get_selection_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_selection_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_table_iface", - 0, NULL, NULL, atk_test_accessible_get_table_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_table_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_text_iface", - 0, NULL, NULL, atk_test_accessible_get_text_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_text_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_value_iface", - 0, NULL, NULL, atk_test_accessible_get_value_iface, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_value_iface, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_interfaces", - 0, NULL, NULL, atk_test_accessible_get_interfaces, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_interfaces, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_object_locale", - 0, NULL, NULL, atk_test_accessible_get_object_locale, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_object_locale, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_set_cache_mask", - 0, NULL, NULL, atk_test_accessible_set_cache_mask, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_set_cache_mask, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_clear_cache", - 0, NULL, NULL, atk_test_accessible_clear_cache, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_clear_cache, teardown_accessible_test ); g_test_add_vtable (ATK_TEST_PATH_ACCESSIBLE "/atk_test_accessible_get_process_id", - 0, NULL, NULL, atk_test_accessible_get_process_id, teardown_accessible_test ); + 0, NULL, NULL, atk_test_accessible_get_process_id, teardown_accessible_test ); } diff --git a/tests/atk_test_action.c b/tests/atk_test_action.c new file mode 100644 index 0000000..fa79d1e --- /dev/null +++ b/tests/atk_test_action.c @@ -0,0 +1,120 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; https://wiki.gnome.org/Accessibility) + * + * Copyright (c) 2015 Samsung Electronics Co., 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 "atk_suite.h" +#include "atk_test_util.h" + +#define DATA_FILE TESTS_DATA_DIR"/test-action.xml" + +static void +teardown_action_test (gpointer fixture, gconstpointer user_data) +{ + kill (child_pid, SIGTERM); +} + +static void +atk_test_action_sample_get_interface (gpointer fixture, gconstpointer user_data) +{ + AtspiAccessible *obj = get_root_obj (DATA_FILE); + g_assert_cmpstr (atspi_accessible_get_name (obj, NULL), ==, "root_object"); + AtspiAccessible *child = atspi_accessible_get_child_at_index (obj,1, NULL); + AtspiAction *iface = atspi_accessible_get_action_iface (child); + g_assert (iface != NULL); +} + +static void +atk_test_action_get_action_description (gpointer fixture, gconstpointer user_data) +{ + AtspiAccessible *obj = get_root_obj (DATA_FILE); + AtspiAccessible *child = atspi_accessible_get_child_at_index (obj,1, NULL); + AtspiAction *action = atspi_accessible_get_action_iface (child); + g_assert_cmpstr (atspi_action_get_action_description (action, 0, NULL), == ,"action1 description"); +} + +static void +atk_test_action_get_action_name (gpointer fixture, gconstpointer user_data) +{ + AtspiAccessible *obj = get_root_obj (DATA_FILE); + AtspiAccessible *child = atspi_accessible_get_child_at_index (obj,1, NULL); + AtspiAction *action = atspi_accessible_get_action_iface (child); + g_assert_cmpstr (atspi_action_get_action_name (action, 0, NULL), == ,"action1"); +} + +static void +atk_test_action_get_n_actions (gpointer fixture, gconstpointer user_data) +{ + AtspiAccessible *obj = get_root_obj (DATA_FILE); + AtspiAccessible *child = atspi_accessible_get_child_at_index (obj,1, NULL); + AtspiAction *action = atspi_accessible_get_action_iface (child); + g_assert_cmpint (atspi_action_get_n_actions (action, NULL), == , 2); +} + +static void +atk_test_action_get_key_binding (gpointer fixture, gconstpointer user_data) +{ + AtspiAccessible *obj = get_root_obj (DATA_FILE); + AtspiAccessible *child = atspi_accessible_get_child_at_index (obj,1, NULL); + AtspiAction *action = atspi_accessible_get_action_iface (child); + g_assert_cmpstr (atspi_action_get_key_binding (action, 0, NULL), == ,"action1 key binding"); +} + +static void +atk_test_action_get_localized_name (gpointer fixture, gconstpointer user_data) +{ + AtspiAccessible *obj = get_root_obj (DATA_FILE); + AtspiAccessible *child = atspi_accessible_get_child_at_index (obj,1, NULL); + AtspiAction *action = atspi_accessible_get_action_iface (child); + g_assert_cmpstr (atspi_action_get_localized_name (action, 0, NULL), == ,"action1"); +} + +static void +atk_test_action_do_action (gpointer fixture, gconstpointer user_data) +{ + AtspiAccessible *obj = get_root_obj (DATA_FILE); + AtspiAccessible *child = atspi_accessible_get_child_at_index (obj,1, NULL); + AtspiAction *action = atspi_accessible_get_action_iface (child); + g_assert (action != NULL); + atspi_action_do_action (action, 0, NULL); + atspi_accessible_clear_cache (obj); + AtspiStateSet *s = atspi_accessible_get_state_set (child); + GArray *array = atspi_state_set_get_states (s); + g_assert_cmpint (array->len, ==, 1); +} + +void +atk_test_action (void) +{ + g_test_add_vtable (ATK_TEST_PATH_ACTION "/atk_test_action_sample_get_interface", + 0, NULL, NULL, atk_test_action_sample_get_interface, teardown_action_test); + g_test_add_vtable (ATK_TEST_PATH_ACTION "/atk_test_action_get_action_description", + 0, NULL, NULL, atk_test_action_get_action_description, teardown_action_test); + g_test_add_vtable (ATK_TEST_PATH_ACTION "/atk_test_action_get_action_name", + 0, NULL, NULL, atk_test_action_get_action_name, teardown_action_test); + g_test_add_vtable (ATK_TEST_PATH_ACTION "/atk_test_action_get_n_actions", + 0, NULL, NULL, atk_test_action_get_n_actions, teardown_action_test); + g_test_add_vtable (ATK_TEST_PATH_ACTION "/atk_test_action_get_key_binding", + 0, NULL, NULL, atk_test_action_get_key_binding, teardown_action_test); + g_test_add_vtable (ATK_TEST_PATH_ACTION "/atk_test_action_get_localized_name", + 0, NULL, NULL, atk_test_action_get_localized_name, teardown_action_test); + g_test_add_vtable (ATK_TEST_PATH_ACTION "/atk_test_action_do_action", + 0, NULL, NULL, atk_test_action_do_action, teardown_action_test); +} diff --git a/tests/atk_test_util.c b/tests/atk_test_util.c new file mode 100644 index 0000000..22c791d --- /dev/null +++ b/tests/atk_test_util.c @@ -0,0 +1,80 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; https://wiki.gnome.org/Accessibility) + * + * Copyright (c) 2015 Samsung Electronics Co., 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 +#include "atk_test_util.h" + +static void assert_clean_exit (int sig) +{ + kill (child_pid, SIGTERM); +} + +void clean_exit_on_fail () +{ + signal (SIGABRT, assert_clean_exit); +} + +void +run_app (const char *file_name) +{ + int i=0; + child_pid = fork (); + if (child_pid == 0) { + execlp ("./app-test", + "./app-test", + "--test-data-file", + file_name, + NULL); + _exit (EXIT_SUCCESS); + } +} + +AtspiAccessible * get_root_obj (const char *file_name) +{ + int i; + AtspiAccessible *obj = NULL; + + run_app (file_name); + + /* sleep is needed to wait for fored test application*/ + sleep (1); + + obj = atspi_get_desktop (0); + gint child_count = atspi_accessible_get_child_count (obj, NULL); + if (child_count < 1) { + g_test_message ("Fail, test application not found\n"); + g_test_fail (); + kill (child_pid, SIGTERM); + return NULL; + } + + for (i=0; i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "atk_suite.h" + +pid_t child_pid; + +void run_app (const char *file_name); +AtspiAccessible *get_root_obj (const char *file_name); +void clean_exit_on_fail (); + +#endif /* _ATK_TEST_UTIL_H */ diff --git a/tests/data/test-accessible.xml b/tests/data/test-accessible.xml new file mode 100644 index 0000000..26728dd --- /dev/null +++ b/tests/data/test-accessible.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/tests/data/test-action.xml b/tests/data/test-action.xml new file mode 100644 index 0000000..41ddf00 --- /dev/null +++ b/tests/data/test-action.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/tests/dummyatk/Makefile.am b/tests/dummyatk/Makefile.am index ff018a9..631e986 100644 --- a/tests/dummyatk/Makefile.am +++ b/tests/dummyatk/Makefile.am @@ -1,18 +1,19 @@ lib_LTLIBRARIES = libdummyatk.la -libdummyatk_la_CFLAGS = $(ATK_CFLAGS) \ - $(GMODULE_CFLAGS) \ - $(GLIB_CFLAGS) \ - $(GOBJ_CFLAGS) \ +libdummyatk_la_CFLAGS = $(ATK_CFLAGS) \ + $(GLIB_CFLAGS) \ + $(GOBJ_CFLAGS) \ -I$(top_srcdir) libdummyatk_la_LDFLAGS = -no-undefined -libdummyatk_la_LIBADD = $(ATK_LIBS) \ - $(GMODULE_LIBS) \ - $(GLIB_LIBS) \ +libdummyatk_la_LIBADD = $(ATK_LIBS) \ + $(GLIB_LIBS) \ $(GOBJ_LIBS) -libdummyatk_la_SOURCES = my-atk-object.c \ - my-atk-object.h \ +libdummyatk_la_SOURCES = \ + my-atk-action.c \ + my-atk-action.h \ + my-atk-object.c \ + my-atk-object.h \ my-atk.h diff --git a/tests/dummyatk/my-atk-action.c b/tests/dummyatk/my-atk-action.c new file mode 100644 index 0000000..3f02356 --- /dev/null +++ b/tests/dummyatk/my-atk-action.c @@ -0,0 +1,270 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; https://wiki.gnome.org/Accessibility) + * + * Copyright (c) 2015 Samsung Electronics Co., 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 +#include +#include + +#include "my-atk-object.h" +#include "my-atk-action.h" + +typedef struct _MyAtkActionInfo MyAtkActionInfo; + +struct _MyAtkActionInfo { + gchar *name; + gchar *description; + gchar *keybinding; + + MyAtkActionFunc do_action_func; +}; + +static void atk_action_interface_init (AtkActionIface *iface); + +G_DEFINE_TYPE_WITH_CODE (MyAtkAction, + my_atk_action, + MY_TYPE_ATK_OBJECT, + G_IMPLEMENT_INTERFACE(ATK_TYPE_ACTION, + atk_action_interface_init)); + +#define MY_ATK_ACTION_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((obj), MY_TYPE_ATK_ACTION, MyAtkActionPrivate)) + +struct _MyAtkActionPrivate +{ + GQueue *action_queue; + guint action_idle_handler; + GList *action_list; + GList *children; +}; + +static void +my_atk_action_initialize (AtkObject *obj, gpointer data) +{ +} + +static void +my_atk_action_init (MyAtkAction *action_obj) +{ + MyAtkActionPrivate *priv = MY_ATK_ACTION_GET_PRIVATE (action_obj); + action_obj->priv = priv; + priv->action_queue = NULL; + priv->action_idle_handler = 0; + priv->action_list = NULL; + priv->children = NULL; +} + +static void +my_atk_action_finalize (GObject *object) +{ +} + +static void +my_atk_action_class_init (MyAtkActionClass *my_class) +{ + AtkObjectClass *atk_class = ATK_OBJECT_CLASS (my_class); + GObjectClass *gobject_class = G_OBJECT_CLASS (my_class); + + gobject_class->finalize = my_atk_action_finalize; + + atk_class->initialize = my_atk_action_initialize; + + g_type_class_add_private (gobject_class, sizeof (MyAtkActionPrivate)); +} + +static MyAtkActionInfo * +_my_atk_action_get_action_info (MyAtkAction *action, gint i) +{ + MyAtkActionPrivate *priv = NULL; + MyAtkActionInfo *node_data = NULL; + + g_return_val_if_fail (MY_IS_ATK_ACTION (action), NULL); + + priv = action->priv; + + if (priv->action_list == NULL) + return NULL; + + node_data = g_list_nth_data (priv->action_list, i); + + g_return_val_if_fail (node_data, NULL); + + return node_data; +} + +static const gchar* +my_atk_action_description_get (AtkAction *action, gint i) +{ + MyAtkAction *my_action = NULL; + MyAtkActionInfo *info = NULL; + + g_return_val_if_fail (MY_IS_ATK_ACTION (action), NULL); + my_action = MY_ATK_ACTION (action); + + info = _my_atk_action_get_action_info (my_action, i); + + if (info == NULL) + return NULL; + + return strdup (info->description); +} + +static gboolean +my_atk_action_description_set (AtkAction *action, gint i, const char *des) +{ + MyAtkAction *my_action = NULL; + MyAtkActionInfo *info = NULL; + + g_return_val_if_fail (MY_IS_ATK_ACTION (action), FALSE); + my_action = MY_ATK_ACTION (action); + + info = _my_atk_action_get_action_info (my_action, i); + + if (info == NULL) + return FALSE; + + g_free (info->description); + info->description = g_strdup (des); + + return TRUE; +} + +static const gchar* +my_atk_action_name_get (AtkAction *action, gint i) +{ + MyAtkAction *my_action = NULL; + MyAtkActionInfo *info = NULL; + + g_return_val_if_fail (MY_IS_ATK_ACTION (action), NULL); + my_action = MY_ATK_ACTION (action); + + info = _my_atk_action_get_action_info (my_action, i); + + if (info == NULL) + return NULL; + + return strdup (info->name); +} + +static const gchar* +my_atk_action_localized_name_get (AtkAction *action, gint i) +{ + MyAtkAction *my_action = NULL; + MyAtkActionInfo *info = NULL; + + g_return_val_if_fail (MY_IS_ATK_ACTION (action), NULL); + my_action = MY_ATK_ACTION (action); + + info = _my_atk_action_get_action_info (my_action, i); + + if (info == NULL) + return NULL; + + return strdup (info->name); +} + +static gint +my_atk_action_get_n_actions (AtkAction *action) +{ + MyAtkAction *action_obj = NULL; + MyAtkActionPrivate *priv = NULL; + + action_obj = MY_ATK_ACTION (action); + priv = action_obj->priv; + + return g_list_length (priv->action_list); +} + +static const gchar * +my_atk_action_get_keybinding (AtkAction *action, gint i) +{ + MyAtkAction *my_action = NULL; + MyAtkActionInfo *info = NULL; + + g_return_val_if_fail (MY_IS_ATK_ACTION (action), NULL); + my_action = MY_ATK_ACTION (action); + + info = _my_atk_action_get_action_info (my_action, i); + + if (info == NULL) + return NULL; + + return strdup (info->keybinding); +} + +void perform_action (AtkObject *obj) +{ + AtkStateSet *state_set1 = atk_object_ref_state_set (obj); + atk_state_set_add_state (state_set1, ATK_STATE_ACTIVE); +} + +static gboolean +my_atk_action_do_action (AtkAction *action, gint i) +{ + g_return_val_if_fail (MY_IS_ATK_ACTION (action), NULL); + + MyAtkAction *my_action = NULL; + MyAtkActionPrivate *priv = NULL; + + my_action = MY_ATK_ACTION (action); + priv = my_action->priv; + + perform_action (ATK_OBJECT (action)); + + return FALSE; +} + +guint my_atk_action_add_action (MyAtkAction *action, + const gchar *action_name, + const gchar *action_description, + const gchar *action_keybinding) +{ + MyAtkActionInfo *info = NULL; + MyAtkActionPrivate *priv = NULL; + + g_return_val_if_fail (MY_IS_ATK_ACTION (action), -1); + + priv = action->priv; + + info = g_slice_new (MyAtkActionInfo); + info->name = g_strdup (action_name); + info->description = g_strdup (action_description); + info->keybinding = g_strdup (action_keybinding); + + priv->action_list = g_list_append (priv->action_list, info); + + return g_list_length (priv->action_list); +} + +static void +atk_action_interface_init (AtkActionIface *iface) +{ + g_return_if_fail (iface); + + iface->do_action = my_atk_action_do_action; + + iface->get_n_actions = my_atk_action_get_n_actions; + iface->get_description = my_atk_action_description_get; + iface->get_keybinding = my_atk_action_get_keybinding; + iface->get_name = my_atk_action_name_get; + iface->set_description = my_atk_action_description_set; + iface->get_localized_name = my_atk_action_localized_name_get; +} diff --git a/tests/dummyatk/my-atk-action.h b/tests/dummyatk/my-atk-action.h new file mode 100644 index 0000000..8bdb4f8 --- /dev/null +++ b/tests/dummyatk/my-atk-action.h @@ -0,0 +1,63 @@ +/* + * AT-SPI - Assistive Technology Service Provider Interface + * (Gnome Accessibility Project; https://wiki.gnome.org/Accessibility) + * + * Copyright (c) 2015 Samsung Electronics Co., 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 MY_ATK_ACTION_H +#define MY_ATK_ACTION_H + +#include +#include +#include + +#include "my-atk-object.h" + +#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)) + +typedef struct _MyAtkAction MyAtkAction; +typedef struct _MyAtkActionPrivate MyAtkActionPrivate; +typedef struct _MyAtkActionClass MyAtkActionClass; + +typedef void (* MyAtkActionFunc) (MyAtkAction *action); + +struct _MyAtkAction { + MyAtkObject parent; + MyAtkActionPrivate *priv; + gint last_performed_action;//this field is changed when action is performed + +}; + +struct _MyAtkActionClass { + MyAtkObjectClass parent; +}; + +GType my_atk_action_get_type (void); + +guint my_atk_action_add_action (MyAtkAction *action, + const gchar *action_name, + const gchar *action_description, + const gchar *action_keybinding); + +#endif /*MY_ATK_ACTION_H*/ diff --git a/tests/dummyatk/my-atk-object.c b/tests/dummyatk/my-atk-object.c index c20ad7a..c0b3014 100644 --- a/tests/dummyatk/my-atk-object.c +++ b/tests/dummyatk/my-atk-object.c @@ -25,21 +25,6 @@ #include "my-atk-object.h" -struct _MyAtkObject -{ - AtkObject parent; - AtkStateSet *state_set; - AtkAttributeSet *attributes; - AtkRelationSet *relation_set; - GPtrArray* children; - gint id; -}; - -struct _MyAtkObjectClass -{ - AtkObjectClass parent; -}; - GType my_atk_object_get_type (void); G_DEFINE_TYPE (MyAtkObject, @@ -66,7 +51,7 @@ void my_atk_object_remove_child (MyAtkObject* parent, for (i = parent->children->len - 1; i >= 0; i--) { if (g_ptr_array_index (parent->children, i) == child) break; - } + } g_return_if_fail (i < 0); g_ptr_array_remove_index (parent->children, i); g_signal_emit_by_name (parent, "children-changed::remove", i, child); @@ -140,24 +125,16 @@ static AtkStateSet *my_atk_object_ref_state_set (AtkObject *accessible) 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); + AtkAttributeSet *attributes; + AtkAttribute *attr; + + attr = g_malloc (sizeof (AtkAttribute)); + attr->name = g_strdup ("atspi"); + attr->value = g_strdup ("test"); + + attributes = g_slist_append (NULL, attr); + + return attributes; } static void my_atk_object_init (MyAtkObject *self) diff --git a/tests/dummyatk/my-atk-object.h b/tests/dummyatk/my-atk-object.h index 10ab034..d4a1eec 100644 --- a/tests/dummyatk/my-atk-object.h +++ b/tests/dummyatk/my-atk-object.h @@ -36,6 +36,18 @@ typedef struct _MyAtkObject MyAtkObject; typedef struct _MyAtkObjectClass MyAtkObjectClass; +struct _MyAtkObject { + AtkObject parent; + AtkStateSet *state_set; + AtkRelationSet *relation_set; + GPtrArray* children; + gint id; +}; + +struct _MyAtkObjectClass { + AtkObjectClass parent; +}; + GType my_atk_object_get_type (); void my_atk_object_add_child (MyAtkObject* parent, diff --git a/tests/dummyatk/my-atk.h b/tests/dummyatk/my-atk.h index 97e1bfd..f617c9d 100644 --- a/tests/dummyatk/my-atk.h +++ b/tests/dummyatk/my-atk.h @@ -23,6 +23,7 @@ #ifndef MY_ATK_H #define MY_ATK_H +#include "my-atk-action.h" #include "my-atk-object.h" #endif /*MY_ATK_H*/ diff --git a/tests/test-application.c b/tests/test-application.c index 74265ae..fe9527d 100644 --- a/tests/test-application.c +++ b/tests/test-application.c @@ -49,8 +49,8 @@ test_init (gchar *path) gchar *td; if (path == NULL) { - g_print("No test data file provided\n"); - exit(EXIT_FAILURE); + g_print ("No test data file provided\n"); + exit (EXIT_FAILURE); } tdata_path = path; @@ -88,8 +88,7 @@ setup_atk_util (void) g_type_class_unref (klass); } -static GOptionEntry optentries[] = -{ +static GOptionEntry optentries[] = { {"test-data-file", 0, 0, G_OPTION_ARG_STRING, &tdata_path, "Path to file of test data", NULL}, {NULL} }; -- cgit v1.2.1