#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);
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);
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;
validate_accessible (event->source, TRUE, TRUE);
}
+#ifdef KEY_IMPL_WORKS
static SPIBoolean
key_listener_cb (const AccessibleKeystroke *stroke,
void *user_data)
*s = *stroke;
- g_warning ("Key listener callback");
-
- return FALSE;
+ 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, SPI_KEYSET_ALL_KEYS, 0,
+ key_listener,
+ test_keyset,
+ 0,
SPI_KEY_PRESSED | SPI_KEY_RELEASED,
- SPI_KEYLISTENER_CANCONSUME));
-
-#if FIXME_HOW_SHOULD_THIS_WORK
- memset (&stroke, 0, sizeof (AccessibleKeystroke));
-
- g_assert (SPI_generateKeyboardEvent (33, "!", SPI_KEY_PRESSRELEASE));
+ 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);
- while (stroke.type == 0)
- g_main_iteration (TRUE);
+ fprintf (stderr, "\n");
- g_assert (!strcmp (stroke.keystring, "!"));
- g_assert (stroke.type == SPI_KEY_PRESSRELEASE);
+ AccessibleKeystrokeListener_unref (key_listener);
+#else
+ fprintf (stderr, " key impl. impossibly broken\n");
#endif
- g_assert (SPI_deregisterAccessibleKeystrokeListener (key_listener, 0));
-
- 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
test_roles ();
test_misc ();
test_desktop ();
- test_keylisteners ();
+ test_keylisteners ();
win = create_test_window ();
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);