diff options
author | padraigo <padraigo@e2bd861d-eb25-0410-b326-f6ed22b6b98c> | 2004-05-28 10:54:11 +0000 |
---|---|---|
committer | padraigo <padraigo@e2bd861d-eb25-0410-b326-f6ed22b6b98c> | 2004-05-28 10:54:11 +0000 |
commit | d8c765c8e4cfa8f65ed31ded4005868d40d1d30f (patch) | |
tree | 89b28ad440875474b147b2b9b71126501d4d5107 /test | |
parent | 29040c6f36f3e7a62eb08cd29203609d1fcdb1cd (diff) | |
download | at-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.c | 216 | ||||
-rw-r--r-- | test/login-helper-server-test.c | 105 |
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; +} |