#include <cspi/spi.h>
#include <libbonobo.h>
+
+/* Known bugs */
+#undef KEY_IMPL_WORKS
+#define WHOLE_STRING -1
+
static void validate_accessible (Accessible *accessible,
gboolean has_parent,
gboolean recurse_down);
fprintf (stderr, "%d: %s (%s); ", i, s, sd);
SPI_freeString (s);
SPI_freeString (sd);
- /* g_assert (AccessibleAction_doAction (action, i)); */
+ g_assert (AccessibleAction_doAction (action, i));
}
fprintf (stderr, "\n");
}
static void
test_desktop (void)
{
- Accessible *desktop;
- Accessible *application;
+ Accessible *desktop;
+ Accessible *application;
+ int length;
+ Accessible **list;
fprintf (stderr, "Testing desktop...\n");
- g_assert (getDesktop (-1) == NULL);
- desktop = getDesktop (0);
+ g_assert (SPI_getDesktop (-1) == NULL);
+ desktop = SPI_getDesktop (0);
g_assert (desktop != NULL);
+ g_assert ((length = SPI_getDesktopList (&list)) > 0);
+ g_assert (list[0] == desktop);
+ SPI_freeDesktopList (list);
+
validate_accessible (desktop, FALSE, FALSE);
application = Accessible_getChildAtIndex (desktop, 0);
AccessibleEditableText_setTextContents (
etext, TEST_STRING_B);
- str = AccessibleText_getText (text, 0, -1);
+ str = AccessibleText_getText (text, 0, WHOLE_STRING);
g_assert (!strcmp (str, TEST_STRING_B));
SPI_freeString (str);
g_assert (AccessibleText_getCharacterCount (text) ==
strlen (TEST_STRING_A));
- str = AccessibleText_getText (text, 0, -1);
+ str = AccessibleText_getText (text, 0, WHOLE_STRING);
g_assert (!strcmp (str, TEST_STRING_A));
SPI_freeString (str);
{
float original_value;
- /* Note: test_value assertions are known not to work as of Dec 09 */
-
fprintf (stderr, "Testing value ...\n");
original_value = AccessibleValue_getCurrentValue (value);
gboolean has_parent,
gboolean recurse_down)
{
- Accessible *tmp;
- char *name, *descr;
- AccessibleRole role;
- char *role_name;
- GString *item_str = g_string_new ("");
+ 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);
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;
}
static void
-global_listener_cb (AccessibleEvent *event,
- void *user_data)
+global_listener_cb (const AccessibleEvent *event,
+ void *user_data)
{
TestWindow *win = user_data;
Accessible *desktop;
fprintf (stderr, "Fielded focus event ...\n");
if (!do_poke) {
- desktop = getDesktop (0);
+ desktop = SPI_getDesktop (0);
application = Accessible_getChildAtIndex (desktop, 0);
g_assert (application != NULL);
Accessible_unref (desktop);
validate_accessible (event->source, TRUE, TRUE);
}
+#ifdef KEY_IMPL_WORKS
+static SPIBoolean
+key_listener_cb (const AccessibleKeystroke *stroke,
+ void *user_data)
+{
+ AccessibleKeystroke *s = user_data;
+
+ *s = *stroke;
+
+ return TRUE;
+}
+#endif
+
+static void
+test_keylisteners (void)
+{
+#ifdef KEY_IMPL_WORKS
+ int i;
+ AccessibleKeystroke stroke;
+ AccessibleKeystrokeListener *key_listener;
+ AccessibleKeySet *test_keyset;
+#endif
+
+ fprintf (stderr, "Testing keyboard listeners ...\n");
+
+#ifdef KEY_IMPL_WORKS
+ 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 (!(stroke.type & SPI_KEY_PRESSED))
+ g_main_context_iteration (NULL, TRUE);
+ fprintf (stderr, "p");
+ g_assert (!strcmp (stroke.keystring, "="));
+ while (!(stroke.type & SPI_KEY_RELEASED))
+ g_main_context_iteration (NULL, TRUE);
+ fprintf (stderr, "r ");
+ }
+ g_assert (SPI_deregisterAccessibleKeystrokeListener (key_listener, 0));
+ SPI_freeAccessibleKeySet (test_keyset);
+
+ fprintf (stderr, "\n");
+
+ AccessibleKeystrokeListener_unref (key_listener);
+#else
+ fprintf (stderr, " key impl. impossibly broken\n");
+#endif
+
+ 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)
{
modules = g_getenv ("GTK_MODULES");
if (!modules || modules [0] == '\0')
- putenv ("GTK_MODULES=gail:at-bridge");
+ putenv ("GTK_MODULES=gail:atk-bridge");
modules = NULL;
for (i = 1; i < argc; i++) {
g_assert (!SPI_init ());
g_assert (SPI_init ());
- g_assert (getDesktopCount () == 1);
+ g_assert (SPI_getDesktopCount () == 1);
test_roles ();
test_misc ();
test_desktop ();
+ test_keylisteners ();
win = create_test_window ();
- global_listener = createAccessibleEventListener (global_listener_cb, win);
- g_assert (registerGlobalEventListener (global_listener, "focus:"));
+ 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 (deregisterGlobalEventListenerAll (global_listener));
+ 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++)
+ linc_main_iteration (FALSE);
+
if ((leaked = SPI_exit ()))
g_error ("Leaked %d SPI handles", leaked);