/*
* 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_test_util.h"
#include "atk_suite.h"
#define DATA_FILE TESTS_DATA_DIR"/test-text.xml"
static gboolean GHRunc_find (gpointer key, gpointer value, gpointer user_data)
{
if (!g_strcmp0 (key, user_data)) {
return TRUE;
}
return FALSE;
}
static void
atk_test_text_get_character_count (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gint count = atspi_text_get_character_count (obj, NULL);
g_assert_cmpint (count, ==, 16);
}
static void
atk_test_text_get_text (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gchar *text = atspi_text_get_text (obj, 9, 14, NULL);
g_assert_cmpstr (text, ==, "works");
g_free (text);
}
static void
atk_test_text_get_caret_offset (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gint pos = atspi_text_get_caret_offset (obj, NULL);
g_assert_cmpint (pos,==,-1);
}
static void
atk_test_text_set_caret_offset (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
g_assert_true (atspi_text_set_caret_offset (obj, 5, NULL));
g_assert_false (atspi_text_set_caret_offset (obj, -1, NULL));
gint pos = atspi_text_get_caret_offset (obj, NULL);
g_assert_cmpint (pos, ==, 5);
}
static void
atk_test_text_get_character_at_offset (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
guint chr = atspi_text_get_character_at_offset (obj, 5, NULL);
g_assert_cmpint (chr, ==, 32);
}
static void
atk_test_text_get_character_extents (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
AtspiRect *rec = atspi_text_get_character_extents (obj, 6, ATSPI_COORD_TYPE_SCREEN, NULL);
g_assert_cmpint (rec->x, ==, 100);
g_assert_cmpint (rec->y, ==, 33);
g_assert_cmpint (rec->width, ==, 110);
g_assert_cmpint (rec->height, ==, 30);
g_free (rec);
}
static void
atk_test_text_get_range_extents (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
AtspiRect *rec = atspi_text_get_range_extents (obj, 0, 1, ATSPI_COORD_TYPE_SCREEN, NULL);
g_assert_cmpint (rec->x, ==, 100);
g_assert_cmpint (rec->y, ==, 33);
g_assert_cmpint (rec->width, ==, 110);
g_assert_cmpint (rec->height, ==, 30);
g_free (rec);
}
static void
atk_test_text_add_selection (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
g_assert_true (atspi_text_add_selection (obj, 9, 14, NULL));
}
static void
atk_test_text_get_n_selections (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gint n = atspi_text_get_n_selections (obj, NULL);
g_assert_cmpint (n, ==, 0);
g_assert_true (atspi_text_add_selection (obj, 9, 14, NULL));
g_assert_true (atspi_text_add_selection (obj, 9, 14, NULL));
g_assert_true (atspi_text_add_selection (obj, 9, 14, NULL));
n = atspi_text_get_n_selections (obj, NULL);
g_assert_cmpint (n, ==, 3);
}
static void
atk_test_text_get_selection (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
g_assert_true (atspi_text_add_selection (obj, 9, 14, NULL));
g_assert_true (atspi_text_add_selection (obj, 14, 15, NULL));
AtspiRange *range = atspi_text_get_selection (obj, 0, NULL);
g_assert (range);
g_assert_cmpint (range->start_offset, ==, 9);
g_assert_cmpint (range->end_offset, ==, 14);
g_free (range);
range = atspi_text_get_selection (obj, 1, NULL);
g_assert (range);
g_assert_cmpint (range->start_offset, ==, 14);
g_assert_cmpint (range->end_offset, ==, 15);
g_free (range);
}
static void
atk_test_text_set_selection (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
g_assert_true(atspi_text_add_selection (obj, 9, 14, NULL));
g_assert_true(atspi_text_add_selection (obj, 14, 15, NULL));
g_assert_true(atspi_text_set_selection (obj, 0, 1, 2, NULL));
g_assert_true(atspi_text_set_selection (obj, 1, 3, 4, NULL));
AtspiRange *range = atspi_text_get_selection (obj, 0, NULL);
g_assert (range);
g_assert_cmpint (range->start_offset, ==, 1);
g_assert_cmpint (range->end_offset, ==, 2);
g_free (range);
range = atspi_text_get_selection (obj, 1, NULL);
g_assert (range);
g_assert_cmpint (range->start_offset, ==, 3);
g_assert_cmpint (range->end_offset, ==, 4);
g_free (range);
}
static void
atk_test_text_remove_selection (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gint n = atspi_text_get_n_selections (obj, NULL);
g_assert_cmpint (n, ==, 0);
g_assert_true (atspi_text_add_selection (obj, 9, 14, NULL));
g_assert_true (atspi_text_add_selection (obj, 14, 15, NULL));
n = atspi_text_get_n_selections (obj, NULL);
g_assert_cmpint (n, ==, 2);
g_assert_true (atspi_text_remove_selection (obj, 1, NULL));
n = atspi_text_get_n_selections (obj, NULL);
g_assert_cmpint (n, ==, 1);
g_assert_true (atspi_text_remove_selection (obj, 0, NULL));
n = atspi_text_get_n_selections (obj, NULL);
g_assert_cmpint (n, ==, 0);
}
static void
atk_test_text_get_offset_at_point (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gint n = atspi_text_get_offset_at_point (obj, 0, 0, ATSPI_COORD_TYPE_SCREEN, NULL);
g_assert_cmpint (n, ==, 5);
}
static void
atk_test_text_get_text_attribute_value (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
GError *err = NULL;
gchar *str = atspi_text_get_text_attribute_value (obj, 0, "text_test_attr1", &err);
if (err)
g_print ("error msg:%s\n", err->message);
g_assert (str);
g_assert_cmpstr (str, ==, "on");
g_free (str);
str = atspi_text_get_text_attribute_value (obj, 0, "text_test_attr2", NULL);
g_assert (str);
g_assert_cmpstr (str, ==, "off");
g_free (str);
}
static void
atk_test_text_get_attribute_run (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gint start_offset = 0;
gint end_offset = 0;
GHashTable *tab = atspi_text_get_attribute_run (obj, 0, FALSE, &start_offset, &end_offset , NULL);
g_assert (tab);
g_assert_cmpstr ((const char*) g_hash_table_find (tab, GHRunc_find, "text_test_attr1"), ==, "on");
g_assert_cmpstr ((const char*) g_hash_table_find (tab, GHRunc_find, "text_test_attr2"), ==, "off");
g_assert_cmpint (start_offset, == , 5);
g_assert_cmpint (end_offset, == , 10);
g_hash_table_destroy (tab);
}
static void
atk_test_text_get_defualt_attributes (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
GHashTable *tab = atspi_text_get_default_attributes (obj, NULL);
g_assert (tab);
g_assert_cmpstr ((const char*) g_hash_table_find (tab, GHRunc_find, "bold_text"), ==, "on");
g_assert_cmpstr ((const char*) g_hash_table_find (tab, GHRunc_find, "underline_text"), ==, "off");
g_assert_cmpstr ((const char*) g_hash_table_find (tab, GHRunc_find, "dummy_text"), ==, "");
g_hash_table_destroy (tab);
}
static void
atk_test_text_get_text_attributes (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
gint start_offset = 0;
gint end_offset = 0;
GHashTable *tab = atspi_text_get_text_attributes (obj, 0, &start_offset, &end_offset, NULL);
g_assert (tab);
g_assert_cmpstr ((const char*) g_hash_table_find (tab, GHRunc_find, "text_test_attr1"), ==, "on");
g_assert_cmpstr ((const char*) g_hash_table_find (tab, GHRunc_find, "text_test_attr2"), ==, "off");
g_assert_cmpint (start_offset, == , 5);
g_assert_cmpint (end_offset, == , 10);
g_hash_table_destroy (tab);
}
static void
atk_test_text_get_string_at_offset_s1 (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
AtspiTextRange *range = atspi_text_get_string_at_offset (obj, 0, ATSPI_TEXT_GRANULARITY_CHAR, NULL);
g_assert_cmpint (range->start_offset, ==, 0);
g_assert_cmpint (range->end_offset, ==, 1);
g_assert_cmpstr (range->content, ==, "t");
g_free (range);
range = atspi_text_get_string_at_offset (obj, 5, ATSPI_TEXT_GRANULARITY_WORD, NULL);
g_assert_cmpint (range->start_offset, ==, 6);
g_assert_cmpint (range->end_offset, ==, 7);
g_assert_cmpstr (range->content, ==, "it");
g_free (range);
}
static void
atk_test_text_get_string_at_offset_s2 (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 1, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
AtspiTextRange *range = atspi_text_get_string_at_offset (obj, 20, ATSPI_TEXT_GRANULARITY_SENTENCE, NULL);
g_assert_cmpint (range->start_offset, ==, 18);
g_assert_cmpint (range->end_offset, ==, 34);
g_assert_cmpstr (range->content, ==, "Second sentence.");
g_free (range);
range = atspi_text_get_string_at_offset (obj, 21, ATSPI_TEXT_GRANULARITY_LINE, NULL);
g_assert_cmpint (range->start_offset, ==, 18);
g_assert_cmpint (range->end_offset, ==, 34);
g_assert_cmpstr (range->content, ==, "Second sentence.");
g_free (range);
range = atspi_text_get_string_at_offset (obj, 0, ATSPI_TEXT_GRANULARITY_PARAGRAPH, NULL);
g_assert_cmpint (range->start_offset, ==, 0);
g_assert_cmpint (range->end_offset, ==, 0);
g_assert_cmpstr (range->content, ==, "");
g_free (range);
}
static void
atk_test_text_get_bounded_ranges (gpointer fixture, gconstpointer user_data)
{
AtspiAccessible *_obj = get_root_obj (DATA_FILE);
g_assert (_obj);
AtspiAccessible *child = atspi_accessible_get_child_at_index (_obj, 0, NULL);
g_assert (child);
AtspiText *obj = atspi_accessible_get_text_iface (child);
GArray *array = atspi_text_get_bounded_ranges (obj, 15, 21, 100, 50, ATSPI_COORD_TYPE_SCREEN, ATSPI_TEXT_CLIP_MAX, ATSPI_TEXT_CLIP_MIN, NULL);
g_assert (array);
AtspiTextRange *range = &g_array_index (array, AtspiTextRange, 0);
g_assert_cmpint (g_array_get_element_size (array), ==, sizeof (AtspiTextRange));
g_assert_cmpint (range->start_offset, ==, 0);
g_assert_cmpint (range->end_offset, ==, 5);
g_assert_cmpstr (range->content, ==, "text0");
range = &g_array_index (array, AtspiTextRange, 1);
g_assert_cmpint (g_array_get_element_size (array), ==, sizeof (AtspiTextRange));
g_assert_cmpint (range->start_offset, ==, 6);
g_assert_cmpint (range->end_offset, ==, 10);
g_assert_cmpstr (range->content, ==, "it w");
g_array_free (array,TRUE);
}
static void
teardown_text_test (gpointer fixture, gconstpointer user_data)
{
kill (child_pid, SIGTERM);
}
void
atk_test_text (void)
{
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_character_count",
0, NULL, NULL, atk_test_text_get_character_count, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_text",
0, NULL, NULL, atk_test_text_get_text, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_caret_offset",
0, NULL, NULL, atk_test_text_get_caret_offset, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_text_attributes",
0, NULL, NULL, atk_test_text_get_text_attributes, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_attribute_run",
0, NULL, NULL, atk_test_text_get_attribute_run, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_text_attribute_value",
0, NULL, NULL, atk_test_text_get_text_attribute_value, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_defualt_attributes",
0, NULL, NULL, atk_test_text_get_defualt_attributes, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_set_caret_offset",
0, NULL, NULL, atk_test_text_set_caret_offset, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_string_at_offset_s1",
0, NULL, NULL, atk_test_text_get_string_at_offset_s1, teardown_text_test );
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_string_at_offset_s2",
0, NULL, NULL, atk_test_text_get_string_at_offset_s2, teardown_text_test );
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_character_at_offset",
0, NULL, NULL, atk_test_text_get_character_at_offset, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_character_extents",
0, NULL, NULL, atk_test_text_get_character_extents, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_offset_at_point",
0, NULL, NULL, atk_test_text_get_offset_at_point, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_range_extents",
0, NULL, NULL, atk_test_text_get_range_extents, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_bounded_ranges",
0, NULL, NULL, atk_test_text_get_bounded_ranges, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_n_selections",
0, NULL, NULL, atk_test_text_get_n_selections, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_get_selection",
0, NULL, NULL, atk_test_text_get_selection, teardown_text_test);
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_add_selection",
0, NULL, NULL, atk_test_text_add_selection, teardown_text_test );
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_remove_selection",
0, NULL, NULL, atk_test_text_remove_selection, teardown_text_test );
g_test_add_vtable (ATK_TEST_PATH_TEXT "/atk_test_text_set_selection",
0, NULL, NULL, atk_test_text_set_selection, teardown_text_test);
}