summaryrefslogtreecommitdiff
path: root/xts5/Xt9/XtInsertEventHandler/XtInsertEventHandler.m
diff options
context:
space:
mode:
Diffstat (limited to 'xts5/Xt9/XtInsertEventHandler/XtInsertEventHandler.m')
-rw-r--r--xts5/Xt9/XtInsertEventHandler/XtInsertEventHandler.m874
1 files changed, 874 insertions, 0 deletions
diff --git a/xts5/Xt9/XtInsertEventHandler/XtInsertEventHandler.m b/xts5/Xt9/XtInsertEventHandler/XtInsertEventHandler.m
new file mode 100644
index 00000000..ea4e2db5
--- /dev/null
+++ b/xts5/Xt9/XtInsertEventHandler/XtInsertEventHandler.m
@@ -0,0 +1,874 @@
+Copyright (c) 2005 X.Org Foundation LLC
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+$Header: /cvs/xtest/xtest/xts5/tset/Xt9/XtInsertEventHandler/XtInsertEventHandler.m,v 1.1 2005-02-12 14:38:24 anderson Exp $
+
+Copyright (c) Applied Testing and Technology, Inc. 1993, 1994, 1995
+Copyright (c) 88open Consortium, Ltd. 1990, 1991, 1992, 1993
+All Rights Reserved.
+
+>>#
+>># Project: VSW5
+>>#
+>># File: tset/Xt9/XtInsertEventHandler/XtInsertEventHandler.m
+>>#
+>># Description:
+>># Tests for XtInsertEventHandler()
+>>#
+>># Modifications:
+>># $Log: tinevthdr.m,v $
+>># Revision 1.1 2005-02-12 14:38:24 anderson
+>># Initial revision
+>>#
+>># Revision 8.0 1998/12/23 23:37:13 mar
+>># Branch point for Release 5.0.2
+>>#
+>># Revision 7.0 1998/10/30 23:00:07 mar
+>># Branch point for Release 5.0.2b1
+>>#
+>># Revision 6.0 1998/03/02 05:28:18 tbr
+>># Branch point for Release 5.0.1
+>>#
+>># Revision 5.0 1998/01/26 03:24:53 tbr
+>># Branch point for Release 5.0.1b1
+>>#
+>># Revision 4.0 1995/12/15 09:18:48 tbr
+>># Branch point for Release 5.0.0
+>>#
+>># Revision 3.1 1995/12/15 02:12:12 andy
+>># Prepare for GA Release
+>>#
+>>EXTERN
+#include <X11/IntrinsicP.h>
+#include <X11/ConstrainP.h>
+#include <X11/CoreP.h>
+
+XtAppContext app_ctext;
+Widget topLevel, panedw, boxw1, boxw2;
+Widget labelw, rowcolw, click_quit;
+
+extern char *event_names[];
+
+/*
+** Procedure XtEVT1_InsertHead
+*/
+void XtEVT1_InsertHead(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress ) {
+ avs_set_event(1,1);
+ }
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+/*
+** Procedure XtEVT1_Proc
+*/
+void XtEVT1_Proc(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress ) {
+ if (avs_get_event(1) != 0)
+ avs_set_event(2,1);
+ else {
+ sprintf(ebuf, "ERROR: XtEVT1_InsertHead should be invoked before XtEVT_Proc");
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ } else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ exit(0);
+}
+/*
+** Handler XtEVT7_Head
+*/
+void XtEVT7_Head(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress )
+ avs_set_event(1,avs_get_event(1)+1);
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+/*
+** Handler XtEVT7_Tail
+*/
+void XtEVT7_Tail(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress )
+ avs_set_event(2,avs_get_event(2)+1);
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+/*
+** XtTMO7_Proc procedure
+*/
+void XtTMO7_Proc(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ exit(0);
+}
+/*
+** Procedure XtEVT6_Proc
+*/
+void XtEVT6_Proc(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress ) {
+ avs_set_event(1,avs_get_event(1)+1);
+ exit(0);
+ }
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+void XtEVT_ProcA(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress ) {
+ avs_set_event(1,avs_get_event(1)+1);
+ return;
+ }
+ if ( event->type == KeyPress ) {
+ avs_set_event(2,avs_get_event(2)+1);
+ return;
+ }
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress or KeyPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+void XtEVT_ProcB(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress ) {
+ avs_set_event(1,avs_get_event(1)+1);
+ return;
+ }
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress or KeyPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+/*
+** XtTMO6_Proc procedure
+*/
+void XtTMO6_Proc(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ exit(0);
+}
+char client_stuff[] = "The quality of mercy is not strained";
+/*
+** XtEVT5_Proc event handler
+*/
+void XtEVT5_Proc(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress )
+ avs_set_event(1,avs_get_event(1)+1);
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+void XtEVT5_ProcA(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress )
+ avs_set_event(1,avs_get_event(1)+1);
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ tet_infoline("TEST: Client_data passed correctly to handler");
+ if (strcmp(client_data, client_stuff) != 0) {
+ sprintf(ebuf, "ERROR: Expected client_data = \"%s\", received \"%s\"", client_stuff, client_data);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ exit(0);
+}
+/*timeout callback*/
+void XtTI5_Proc(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ exit(0);
+}
+/*
+** Handler XtEVT4_Proc
+*/
+void XtEVT4_Proc(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ switch(event->type)
+ {
+ case GraphicsExpose:
+ avs_set_event(1,1);
+ break;
+ case NoExpose:
+ avs_set_event(2,1);
+ exit(0);
+ default:
+ sprintf(ebuf, "ERROR: Expected GraphicsExpose/NoExpose event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ } /* end switch */
+}
+/*
+** XtTMO4_Proc procedure
+*/
+void XtTMO4_Proc(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ exit(0);
+}
+/*
+** Event handler XtEVT3_Proc2
+*/
+void XtEVT3_Proc2(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ switch(event->type)
+ {
+ case ButtonPress:
+ avs_set_event(2,avs_get_event(1)+1);
+ break;
+ case ButtonRelease:
+ avs_set_event(4,avs_get_event(3)+1);
+ break;
+ default:
+ sprintf(ebuf, "ERROR: Expected ButtonPress/ButtonRelease event. Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ } /* end switch */
+}
+
+/*
+** Event handler XtEVT3_Proc
+*/
+void XtEVT3_Proc(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ switch(event->type)
+ {
+ case ButtonPress:
+ avs_set_event(1,avs_get_event(2)+1);
+ break;
+ case ButtonRelease:
+ avs_set_event(3,avs_get_event(4)+1);
+ break;
+ default:
+ sprintf(ebuf, "ERROR: Expected ButtonPress/ButtonRelease event. Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ } /* end switch */
+}
+/*
+** XtTMO3_Proc procedure
+*/
+void XtTMO3_Proc(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ exit(0);
+}
+/*
+** Procedure XtEVT2_Proc
+*/
+void XtEVT2_Proc(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if ( event->type == ButtonPress ) {
+ avs_set_event(1,1);
+ } else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+/*
+** Procedure XtEVT2_InsertTail
+*/
+void XtEVT2_InsertTail(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+ if (event->type == ButtonPress) {
+ if (avs_get_event(1) != 0)
+ avs_set_event(2,1);
+ else {
+ sprintf(ebuf, "ERROR: XtEVT2_Proc should be invoked before XtEVT_InsertTail");
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ }
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received %s", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ exit(0);
+}
+>>SET tpstartup avs_alloc_sem
+>>SET tpcleanup avs_free_sem
+>>TITLE XtInsertEventHandler Xt9
+void
+XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position)
+>>ASSERTION Good A
+When
+.A position
+is
+XtListHead
+a successful call to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc,
+client_data, position)
+shall register proc as the procedure that will be called before
+any other previously registered procedure when an event matching
+event_mask is dispatched to the widget
+.A w.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+int status1, status2;
+pid_t pid2;
+
+ FORK(pid2);
+ avs_xt_hier("Tinevthdr1", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register XtEVT1_Proc to handle events to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT1_Proc,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Insert procedure XtEVT1_InsertHead before the previously");
+ tet_infoline("TEST: registered XtEVT1_Proc");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT1_InsertHead,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ tet_infoline("PREP: Send ButtonPress over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ tet_infoline("TEST: Handlers invoked in correct order");
+ XtAppMainLoop(app_ctext);
+ LKROF(pid2, AVSXTTIMEOUT-2);
+ status1 = avs_get_event(1);
+ check_dec(1, status1, "XtEVT1_InsertHead invocation count");
+ status2 = avs_get_event(2);
+ check_dec(1, status2, "XtEVT1_Proc invocation count");
+ tet_result(TET_PASS);
+>>ASSERTION Good A
+When
+.A position
+is XtListTail
+a successful call to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc,
+client_data, position)
+shall register proc as the procedure that will be called after
+all other previously registered procedures when an event matching
+event_mask is dispatched to the widget
+.A w.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+int status1, status2;
+pid_t pid2;
+
+ FORK(pid2);
+ avs_xt_hier("Tinevthdr2", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register XtEVT2_Proc to handle events to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT2_Proc,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Insert procedure XtEVT2_InsertTail after XtEVT2_Proc");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT2_InsertTail,
+ (XtPointer)NULL,
+ XtListTail
+ );
+ tet_infoline("PREP: Send ButtonPress event");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ tet_infoline("TEST: Handlers were invoked in correct order");
+ XtAppMainLoop(app_ctext);
+ LKROF(pid2, AVSXTTIMEOUT-2);
+ status1 = avs_get_event(1);
+ check_dec(1, status1, " XtEVT2_Proc invocation count");
+ status2 = avs_get_event(2);
+ check_dec(1, status2, " XtEVT2_InsertTail invocation count");
+ tet_result(TET_PASS);
+>>ASSERTION Good A
+When the procedure registered by a call to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data,
+position)
+is already registered with the same client_data for the widget
+.A w,
+.A event_mask
+shall augment the existing event mask.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+int status1, status2;
+pid_t pid2;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tinevthrd3", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register XtEVT3_Proc to handle ButtonPress and Release events");
+ XtAddEventHandler(labelw_msg,
+ ButtonReleaseMask|ButtonPressMask,
+ False,
+ XtEVT3_Proc,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Register XtEVT3_Proc2 to handle ButtonPress events");
+ tet_infoline(" with position at head");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT3_Proc2,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ tet_infoline("PREP: Register XtEVT3_Proc2 to handle ButtonRelease events");
+ tet_infoline(" with position at tail");
+ XtInsertEventHandler(labelw_msg,
+ ButtonReleaseMask,
+ False,
+ XtEVT3_Proc2,
+ (XtPointer)NULL,
+ XtListTail
+ );
+ tet_infoline("PREP: Register timeout");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO3_Proc, topLevel);
+ tet_infoline("TEST: Send ButtonPress event");
+
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ tet_infoline("TEST: Send ButtonRelease event");
+ send_event(labelw_msg,ButtonRelease,ButtonReleaseMask, FALSE);
+ FORK(pid2);
+ XtMainLoop();
+ LKROF(pid2, AVSXTTIMEOUT-4);
+ KROF3(pid3, pstatus, AVSXTTIMEOUT-2);
+ if (pstatus != 0) {
+ tet_infoline("ERROR: Test process exited abnormally");
+ tet_infoline(" May mean display cannot be opened");
+ tet_result(TET_UNRESOLVED);
+ }
+ else {
+ tet_infoline("TEST: Procedure XtEVT3_Proc was invoked for each event at tail");
+ status1 = avs_get_event(2);
+ check_dec(2, status1, "handler position in list for ButtonPress");
+ status2 = avs_get_event(4);
+ check_dec(2, status2, "handler position in list for ButtonRelease");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+When nonmaskable is set True a call to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position)
+shall register
+.A proc
+as a procedure that will be called when non-maskable events
+are dispatched to the specified widget.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+pid_t pid2;
+int status1, status2;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tinevthdr4", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register XtEVT4_Proc to handle KeyPress and non-maskable events");
+ XtInsertEventHandler(labelw_msg,
+ KeyPressMask,
+ True,
+ XtEVT4_Proc,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO4_Proc, topLevel);
+ tet_infoline("TEST: Send nonmaskable events");
+ send_event(labelw_msg, GraphicsExpose, GCGraphicsExposures, TRUE);
+ send_event(labelw_msg, NoExpose, GCGraphicsExposures, TRUE);
+ FORK(pid2);
+ XtMainLoop();
+ LKROF(pid2, AVSXTTIMEOUT-4);
+ KROF3(pid3, pstatus, AVSXTTIMEOUT-2);
+ if (pstatus != 0) {
+ tet_infoline("ERROR: Test process exited abnormally");
+ tet_result(TET_UNRESOLVED);
+ }
+ else {
+ tet_infoline("TEST: XtEVT4_Proc was invoked");
+ status1 = avs_get_event(1);
+ check_dec(1, status1, "XtEVT4_Proc invocation count");
+ status2 = avs_get_event(2);
+ check_dec(1, status2, "XtEVT4_Proc invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+When the procedure
+.A proc
+is registered for an event by multiple calls to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position)
+with different values for
+.A client_data
+the procedure shall be called multiple times with the corresponding
+values of
+.A client_data
+as argument when the specified event is dispatched to the widget.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+pid_t pid2;
+int status;
+
+ FORK(pid2);
+ avs_xt_hier("Tadevnthr5", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register event handler twice ");
+ XtInsertEventHandler(labelw_msg, ButtonPressMask, False, XtEVT5_Proc,
+ client_stuff, XtListHead);
+ XtInsertEventHandler(labelw_msg, ButtonPressMask, False, XtEVT5_Proc,
+ NULL, XtListHead);
+ XtAppAddTimeOut(app_ctext, AVSXTLOOPTIMEOUT, &XtTI5_Proc, NULL);
+ tet_infoline("TEST: Send ButtonPress over wire to widget labelw_msg");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ tet_infoline("TEST: Event handler was invoked twice");
+ XtAppMainLoop(app_ctext);
+ LKROF(pid2, AVSXTTIMEOUT-2);
+ status = avs_get_event(1);
+ check_dec(2, status, "handler invocation count");
+ tet_result(TET_PASS);
+>>ASSERTION Good A
+When the widget
+.A w
+is realized a successful call to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position)
+shall modify the even_mask attribute of the widget window.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+pid_t pid2;
+int status = 0;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tadevnthr6", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register XtEVT6_Proc to handle events to labelw_msg");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT6_Proc,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO6_Proc, topLevel);
+ tet_infoline("TEST: Send ButtonPress over wire to widget labelw_msg without selecting");
+ /*FALSE in last argument indicates to not select here*/
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ FORK(pid2);
+ XtMainLoop();
+ LKROF(pid2, AVSXTTIMEOUT-4);
+ KROF3(pid3, pstatus, AVSXTTIMEOUT-2);
+ if (pstatus != 0) {
+ tet_infoline("ERROR: Test process exited abnormally");
+ tet_result(TET_UNRESOLVED);
+ }
+ else {
+ tet_infoline("TEST: Event handler was called");
+ status = avs_get_event(1);
+ check_dec(1, status, "XtEVT6_Proc invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+When multiple procedures are registered for the widget
+.w
+on the same event by calls to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position),
+the procedures shall be called in an indeterminate order when the
+specified event is dispatched to the widget.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+int head = 0;
+int tail = 0;
+pid_t pid2;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tadevnthr7", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register button press handler");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT7_Head,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ tet_infoline("PREP: Register another button press handler");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT7_Tail,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ tet_infoline("PREP: Register timeout");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO7_Proc, topLevel);
+ tet_infoline("TEST: Send ButtonPress event");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ FORK(pid2);
+ XtMainLoop();
+ LKROF(pid2, AVSXTTIMEOUT-4);
+ KROF3(pid3, pstatus, AVSXTTIMEOUT-2);
+ if (pstatus != 0) {
+ tet_infoline("ERROR: Test process exited abnormally");
+ tet_result(TET_UNRESOLVED);
+ }
+ else {
+ tet_infoline("TEST: Both handlers invoked");
+ head = avs_get_event(1);
+ check_dec(1, head, "XtEVT7_Head invocation count");
+ tail = avs_get_event(2);
+ check_dec(1, tail, "XtEVT7_Tail invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+A successful call to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position)
+when
+.A event_mask
+specifies multiple events shall register
+.A proc
+as the procedure that will be called for each specified event that
+is dispatched to the widget.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+int status1, status2;
+pid_t pid2;
+
+ FORK(pid2);
+ avs_xt_hier("Tinevthdr1", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register handler for ButtonPressMask and KeyPress events");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask|KeyPressMask,
+ False,
+ XtEVT_ProcA,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ tet_infoline("PREP: Send ButtonPress over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ tet_infoline("PREP: Send KeyPress over wire to labelw_msg widget");
+ send_event(labelw_msg, KeyPress, KeyPressMask, FALSE);
+ XtAppAddTimeOut(app_ctext, AVSXTLOOPTIMEOUT, &XtTMO6_Proc, NULL);
+ tet_infoline("TEST: Handler called for both events");
+ XtAppMainLoop(app_ctext);
+ LKROF(pid2, AVSXTTIMEOUT-2);
+ status1 = avs_get_event(1);
+ check_dec(1, status1, "ButtonPress invocation count");
+ status2 = avs_get_event(2);
+ check_dec(1, status2, "KeyPress invocation count");
+ tet_result(TET_PASS);
+>>ASSERTION Good A
+When a procedure is registered with multiple calls to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position)
+with the same client data it shall be registered only once
+for each event specified in the
+.A event_mask
+parameters of the calls.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+int status1, status2;
+pid_t pid2;
+
+ FORK(pid2);
+ avs_xt_hier("Tinevthdr1", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register event handler");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT1_Proc,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ tet_infoline("PREP: Register event handler again");
+ XtInsertEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT_ProcB,
+ (XtPointer)NULL,
+ XtListHead
+ );
+ XtAppAddTimeOut(app_ctext, AVSXTLOOPTIMEOUT, XtTMO6_Proc, NULL);
+ tet_infoline("PREP: Send ButtonPress over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ XtAppMainLoop(app_ctext);
+ LKROF(pid2, AVSXTTIMEOUT-2);
+ tet_infoline("TEST: Handler invoked just once");
+ status1 = avs_get_event(1);
+ check_dec(1, status1, "invocation count");
+ tet_result(TET_PASS);
+>>ASSERTION Good A
+A successful call to
+void XtInsertEventHandler(w, event_mask, nonmaskable, proc, client_data, position)
+shall cause
+.A client_data
+to be passed to
+.A proc
+when it is invoked.
+>>CODE
+Widget labelw_msg;
+char *msg = "Event widget";
+pid_t pid2;
+int status;
+
+ FORK(pid2);
+ avs_xt_hier("Tadevnthr5", "XtInsertEventHandler");
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register event handler twice ");
+ XtInsertEventHandler(labelw_msg, ButtonPressMask, False, XtEVT5_ProcA,
+ client_stuff, XtListHead);
+ XtAppAddTimeOut(app_ctext, AVSXTLOOPTIMEOUT, &XtTI5_Proc, NULL);
+ tet_infoline("TEST: Send ButtonPress over wire to widget labelw_msg");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, FALSE);
+ XtAppMainLoop(app_ctext);
+ LKROF(pid2, AVSXTTIMEOUT-2);
+ tet_infoline("TEST: Event handler was invoked");
+ status = avs_get_event(1);
+ check_dec(1, status, "handler invocation count");
+ tet_result(TET_PASS);