summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorpadraigo <padraigo@e2bd861d-eb25-0410-b326-f6ed22b6b98c>2004-05-28 10:54:11 +0000
committerpadraigo <padraigo@e2bd861d-eb25-0410-b326-f6ed22b6b98c>2004-05-28 10:54:11 +0000
commitd8c765c8e4cfa8f65ed31ded4005868d40d1d30f (patch)
tree89b28ad440875474b147b2b9b71126501d4d5107 /test
parent29040c6f36f3e7a62eb08cd29203609d1fcdb1cd (diff)
downloadat-spi2-core-d8c765c8e4cfa8f65ed31ded4005868d40d1d30f.tar.gz
2004-05-28 Padraig O'Briain <padraig.obriain@sun.com>
* libloginhelper-1.0.pc.in: * idl/Accessibility_LoginHelper.idl: * login-helper/Makefile.am: * login-helper/login-helper.[ch]: * test/login-helper-client-test.c: * test/login-helper-server-test.c: Added files missing from CVS. Files obtained from at-spi-1.5.2 tarball. git-svn-id: http://svn.gnome.org/svn/at-spi/trunk@672 e2bd861d-eb25-0410-b326-f6ed22b6b98c
Diffstat (limited to 'test')
-rw-r--r--test/login-helper-client-test.c216
-rw-r--r--test/login-helper-server-test.c105
2 files changed, 321 insertions, 0 deletions
diff --git a/test/login-helper-client-test.c b/test/login-helper-client-test.c
new file mode 100644
index 00000000..fcbbaecf
--- /dev/null
+++ b/test/login-helper-client-test.c
@@ -0,0 +1,216 @@
+/*
+ * test utility for LoginHelper client API and services.
+ *
+ * Copyright Sun Microsystems 2004
+ *
+ */
+
+#include <X11/X.h>
+#include <libbonobo.h>
+#include <login-helper/Accessibility_LoginHelper.h>
+
+gint main (int argc, char **argv)
+{
+ Bonobo_ServerInfoList *server_list;
+ Accessibility_LoginHelper *helper_list = NULL;
+ CORBA_boolean safe;
+ CORBA_Environment ev;
+ Accessibility_LoginHelper_WindowList *windows;
+ int i;
+
+ CORBA_exception_init (&ev);
+ if (!bonobo_init (&argc, argv))
+ {
+ g_error ("Can't initialize Bonobo");
+ }
+
+ /* bonobo-activation query lists existing instances */
+ server_list = bonobo_activation_query (
+ "(repo_ids.has('IDL:Accessibility/LoginHelper:1.0')) AND _active",
+ NULL, &ev);
+
+ if (BONOBO_EX (&ev))
+ {
+ bonobo_debug_shutdown ();
+ g_error ("LoginHelper query failed : %s",
+ bonobo_exception_get_text (&ev));
+ /* not reached (below) because g_error exits */
+ CORBA_exception_free (&ev);
+ }
+
+ g_message ("%d LoginHelpers are running.",
+ server_list ? server_list->_length : 0);
+
+ helper_list = g_new0 (Accessibility_LoginHelper, server_list->_length);
+
+ /* for each instance... */
+ for (i = 0; i < server_list->_length; i++)
+ {
+ Accessibility_LoginHelper helper;
+ Bonobo_Unknown server;
+ Bonobo_ServerInfo info = server_list->_buffer[i];
+
+ server = bonobo_activation_activate_from_id (
+ info.iid, Bonobo_ACTIVATION_FLAG_EXISTING_ONLY, NULL, &ev);
+
+ if (BONOBO_EX (&ev))
+ {
+ g_warning ("Error activating server %d: %s", i, bonobo_exception_get_text (&ev));
+ CORBA_exception_free (&ev);
+ continue;
+ }
+ else if (server == CORBA_OBJECT_NIL)
+ {
+ g_warning ("Activated server %d is NIL!", i);
+ continue;
+ }
+
+ bonobo_activate ();
+
+ helper = Bonobo_Unknown_queryInterface (
+ server,
+ "IDL:Accessibility/LoginHelper:1.0",
+ &ev);
+
+ if (BONOBO_EX (&ev))
+ {
+ g_warning ("Error performing interface query: %s", bonobo_exception_get_text (&ev));
+ CORBA_exception_free (&ev);
+ continue;
+ }
+ else if (helper == CORBA_OBJECT_NIL)
+ {
+ g_warning ("Activated an object which advertised LoginHelper but does not implement it!");
+ continue;
+ }
+ helper_list[i] = helper;
+ bonobo_object_release_unref (server, &ev);
+
+ if (helper && !BONOBO_EX (&ev))
+ {
+ /* ask the helper to go into safe mode */
+ safe = Accessibility_LoginHelper_setSafe (helper, TRUE, &ev);
+ if (BONOBO_EX (&ev))
+ {
+ g_warning ("setSafe(TRUE) failed: %s",
+ bonobo_exception_get_text (&ev));
+ CORBA_exception_free (&ev);
+ }
+ /* get the raise window list (if the program went into safe mode) */
+ if (safe)
+ {
+ int j;
+ gboolean needs_windows_raised = FALSE;
+ Accessibility_LoginHelper_DeviceReqList *list;
+
+ g_message ("safe");
+
+ /* does this helper need to have windows raised? */
+ list = Accessibility_LoginHelper_getDeviceReqs (helper, &ev);
+
+ if (BONOBO_EX (&ev)) {
+ g_warning ("Bonobo exception getting Device Requirements: %s",
+ bonobo_exception_get_text (&ev));
+ CORBA_exception_free (&ev);
+ }
+ else
+ {
+ g_message ("LoginHelper device requirements: ");
+ if (list->_length == 0)
+ g_message ("\tNone.");
+
+ for (j = 0; j < list->_length; j++)
+ {
+ switch (list->_buffer[j])
+ {
+ case Accessibility_LoginHelper_GUI_EVENTS:
+ g_message ("\tNeeds access to the GUI event subsystem (e.g. Xserver)");
+ break;
+ case Accessibility_LoginHelper_EXT_INPUT:
+ g_message ("\tReads XInput extended input devices");
+ break;
+ case Accessibility_LoginHelper_POST_WINDOWS:
+ g_message ("\tPosts windows");
+ needs_windows_raised = TRUE;
+ break;
+ case Accessibility_LoginHelper_AUDIO_OUT:
+ g_message ("\tWrites to audio device");
+ break;
+ case Accessibility_LoginHelper_AUDIO_IN:
+ g_message ("\tReads from audio device");
+ break;
+ case Accessibility_LoginHelper_LOCALHOST:
+ g_message ("\tNeeds LOCALHOST network connection");
+ break;
+ case Accessibility_LoginHelper_SERIAL_OUT:
+ g_message ("\tNeeds to write to one or more serial ports");
+ break;
+ default:
+ break;
+ }
+ }
+ CORBA_free (list);
+ }
+ if (needs_windows_raised)
+ {
+ /* don't raise in this test, but do something with each wid */
+ windows = Accessibility_LoginHelper_getRaiseWindows (helper, &ev);
+ if (BONOBO_EX (&ev))
+ {
+ g_warning ("getRaiseWindows failed: %s",
+ bonobo_exception_get_text (&ev));
+ CORBA_exception_free (&ev);
+ }
+ g_message ("%d windows need raising", windows->_length);
+ for (j = 0; j < windows->_length; j++)
+ {
+ Window wid;
+ wid = windows->_buffer[j].winID;
+ g_message ("Window ID = %ld", (long) wid);
+ }
+ }
+ }
+ else
+ {
+ g_warning ("LoginHelper %d did not go into safe mode", i);
+ }
+ }
+ else
+ {
+ if (BONOBO_EX (&ev))
+ {
+ g_warning ("Error activating %s: %s",
+ info.iid, bonobo_exception_get_text (&ev));
+ CORBA_exception_free (&ev);
+ }
+ else
+ {
+ g_warning ("no active instance of %s found", info.iid);
+ }
+ }
+ }
+
+ /*
+ * In an actual login/authentication setting, login/authentication
+ * would take place here, and code below would be executed after
+ * authentication was complete.
+ */
+
+ /* now tell the apps they can resume their normal activities */
+ for (i = 0; i < server_list->_length; i++)
+ {
+ Accessibility_LoginHelper helper = helper_list[i];
+ /* really no need to check the return value this time */
+ Accessibility_LoginHelper_setSafe (helper, FALSE, &ev);
+ if (BONOBO_EX (&ev))
+ {
+ g_warning ("setSafe(FALSE) failed: %s",
+ bonobo_exception_get_text (&ev));
+ CORBA_exception_free (&ev);
+ }
+ CORBA_Object_release (helper, &ev);
+ }
+ CORBA_free (server_list);
+
+ return bonobo_debug_shutdown (); /* see if we leaked stuff */
+}
diff --git a/test/login-helper-server-test.c b/test/login-helper-server-test.c
new file mode 100644
index 00000000..d0834045
--- /dev/null
+++ b/test/login-helper-server-test.c
@@ -0,0 +1,105 @@
+#include <libbonobo.h>
+#include <login-helper/login-helper.h>
+
+static void test_init_login_helper_vpointers (LoginHelper *helper,
+ gpointer test_set_safe,
+ gpointer test_get_device_reqs,
+ gpointer test_get_raise_windows);
+
+static gboolean test_set_safe (LoginHelper *helper, gboolean safe);
+
+static LoginHelperDeviceReqFlags test_get_device_reqs (LoginHelper *helper);
+
+static Window* test_get_raise_windows (LoginHelper *helper);
+
+int
+main (int argc, char **argv)
+{
+ int ret;
+ char *obj_id, *display_name;
+ BonoboObject *helper;
+
+ if (!bonobo_init (&argc, argv))
+ {
+ g_error ("Could not initialize oaf / Bonobo");
+ }
+
+ obj_id = "OAFIID:GNOME_GOK:1.0"; /* just for testing, stolen from GOK */
+
+ helper = BONOBO_OBJECT (g_object_new (LOGIN_HELPER_TYPE, NULL));
+
+ ret = bonobo_activation_register_active_server (
+ obj_id,
+ bonobo_object_corba_objref (bonobo_object (helper)),
+ NULL);
+
+ if (ret != Bonobo_ACTIVATION_REG_SUCCESS)
+ {
+ switch (ret)
+ {
+ case Bonobo_ACTIVATION_REG_NOT_LISTED:
+ fprintf (stderr, "OAFIID not listed\n");
+ break;
+ default:
+ fprintf (stderr, "Registration Error: %d\n", ret);
+ break;
+ }
+ }
+ else
+ {
+ CORBA_Environment ev;
+ CORBA_exception_init (&ev);
+
+ Bonobo_Unknown ret = Bonobo_Unknown_queryInterface (
+ BONOBO_OBJREF (helper),
+ "IDL:Accessibility/LoginHelper:1.0",
+ &ev);
+
+ if (BONOBO_EX (&ev))
+ {
+ fprintf (stderr, "queryInterface error: %s\n",
+ bonobo_exception_get_text (&ev));
+ }
+ else
+ {
+ fprintf (stderr, "query returned %p: objref self = %p\n",
+ ret, BONOBO_OBJREF (helper));
+ }
+ }
+
+ /* this is a testing hack - we are changing the LoginHelperClass's vpointers here */
+
+ test_init_login_helper_vpointers (helper, test_set_safe, test_get_device_reqs, test_get_raise_windows);
+
+ bonobo_main ();
+}
+
+static void
+test_init_login_helper_vpointers (LoginHelper *helper,
+ gpointer set_safe_func,
+ gpointer get_device_reqs_func,
+ gpointer get_raise_windows_func)
+{
+ LoginHelperClass *klass = LOGIN_HELPER_GET_CLASS (helper);
+ klass->set_safe = set_safe_func;
+ klass->get_device_reqs = get_device_reqs_func;
+ klass->get_raise_windows = get_raise_windows_func;
+}
+
+static gboolean
+test_set_safe (LoginHelper *helper, gboolean safe)
+{
+ return TRUE;
+}
+
+static LoginHelperDeviceReqFlags
+test_get_device_reqs (LoginHelper *helper)
+{
+ return 0;
+}
+
+static Window*
+test_get_raise_windows (LoginHelper *helper)
+{
+ return NULL;
+}