summaryrefslogtreecommitdiff
path: root/xts5/XtC/XtProcessEvent/XtProcessEvent.m
diff options
context:
space:
mode:
Diffstat (limited to 'xts5/XtC/XtProcessEvent/XtProcessEvent.m')
-rw-r--r--xts5/XtC/XtProcessEvent/XtProcessEvent.m753
1 files changed, 753 insertions, 0 deletions
diff --git a/xts5/XtC/XtProcessEvent/XtProcessEvent.m b/xts5/XtC/XtProcessEvent/XtProcessEvent.m
new file mode 100644
index 00000000..77a16d45
--- /dev/null
+++ b/xts5/XtC/XtProcessEvent/XtProcessEvent.m
@@ -0,0 +1,753 @@
+Copyright (c) 2005 X.Org Foundation L.L.C.
+
+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/XtC/XtProcessEvent/XtProcessEvent.m,v 1.2 2005-04-21 09:40:42 ajosey Exp $
+
+Copyright (c) 1999 The Open Group
+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/XtC/XtProcessEvent/XtProcessEvent.m
+>>#
+>># Description:
+>># Tests for XtProcessEvent()
+>>#
+>># Modifications:
+>># $Log: tprocevnt.m,v $
+>># Revision 1.2 2005-04-21 09:40:42 ajosey
+>># resync to VSW5.1.5
+>>#
+>># Revision 8.2 2005/01/21 12:30:25 gwc
+>># Updated copyright notice
+>>#
+>># Revision 8.1 1999/11/26 12:37:46 vsx
+>># avoid fixed file locations (for exec-in-place false)
+>>#
+>># Revision 8.0 1998/12/23 23:38:29 mar
+>># Branch point for Release 5.0.2
+>>#
+>># Revision 7.0 1998/10/30 23:01:32 mar
+>># Branch point for Release 5.0.2b1
+>>#
+>># Revision 6.0 1998/03/02 05:29:31 tbr
+>># Branch point for Release 5.0.1
+>>#
+>># Revision 5.0 1998/01/26 03:26:05 tbr
+>># Branch point for Release 5.0.1b1
+>>#
+>># Revision 4.0 1995/12/15 09:22:35 tbr
+>># Branch point for Release 5.0.0
+>>#
+>># Revision 3.1 1995/12/15 02:19:11 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;
+Widget labelw_msg;
+
+extern char *event_names[];
+
+XtInputId input_ret;
+char *msg = "Hello World";
+int acount = 0;
+FILE *fid;
+char *data = "data1";
+
+/*
+** Procedure XtIOP_Proc
+*/
+void XtIOP_Proc2(client_data, source, id)
+XtPointer client_data;
+int *source;
+XtInputId *id;
+{
+ avs_set_event(3,1);
+}
+/*
+** Procedure XtEVT_Proc
+*/
+void XtEVT_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);
+ exit(0);
+ }
+ else {
+ sprintf(ebuf, "ERROR: Expected ButtonPress event Received \"%s\"", event_names[event->type]);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+}
+void XtEVT_Proc2(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);
+ }
+ sprintf(ebuf, "PREP: Open file %s for read", data);
+ tet_infoline(ebuf);
+ if ((fid = (FILE *)fopen(data, "w+")) == NULL) {
+ sprintf(ebuf, "ERROR: Could not open file %s", data);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ tet_infoline("PREP: Register file as an input source");
+ input_ret = XtAddInput(fileno(fid), (XtPointer)XtInputReadMask, XtIOP_Proc2, (XtPointer)msg);
+}
+void XtEVT_Proc3(w, client_data, event, continue_to_dispatch)
+Widget w;
+XtPointer client_data;
+XEvent *event;
+Boolean *continue_to_dispatch;
+{
+XKeyEvent *tevent;
+
+ tevent = (XKeyEvent *)event;
+
+ tet_infoline("TEST: Event timestamp returned by XtLastTimestampProcessed");
+ if (tevent->time != XtLastTimestampProcessed(XtDisplay(w))) {
+ sprintf(ebuf, "ERROR: event->time = %ld, XtLastTimestampProcessed returned %ld", (unsigned long)tevent->time, (unsigned long)XtLastTimestampProcessed(XtDisplay(w)));
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ if (event->type == ButtonPress )
+ avs_set_event(1, 1);
+ if (event->type == ButtonRelease )
+ avs_set_event(2, 1);
+ if (event->type == KeyPress )
+ avs_set_event(3, 1);
+ if (event->type == KeyRelease )
+ avs_set_event(4, 1);
+}
+
+void XtIOP_Proc(client_data, source, id)
+XtPointer client_data;
+int *source;
+XtInputId *id;
+{
+ avs_set_event(3,avs_get_event(3)+1);
+ exit(0);
+}
+
+void XtTMO2_Proc(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ avs_set_event(2,1);
+ exit(0);
+}
+void XtTMO1_Proc(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ exit(0);
+}
+void XtTMO_Proc5(client_data, id)
+XtPointer client_data;
+XtIntervalId *id;
+{
+ tet_infoline("PREP: Send events");
+ send_event_time(labelw_msg, ButtonPress, ButtonPressMask, TRUE, 1);
+ send_event_time(labelw_msg, ButtonRelease, ButtonReleaseMask, TRUE, 2);
+ send_event_time(labelw_msg, KeyRelease, KeyReleaseMask, TRUE, 3);
+ send_event_time(labelw_msg, KeyPress, KeyPressMask, TRUE, 4);
+ send_event(rowcolw, ButtonRelease, ButtonReleaseMask, TRUE);
+ tet_infoline("PREP: Register timeout");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO1_Proc, topLevel);
+}
+
+>>SET tpstartup avs_alloc_sem
+>>SET tpcleanup avs_free_sem
+>>TITLE XtProcessEvent XtC
+void
+XtProcessEvent(mask)
+>>ASSERTION Good C
+If the implementation is X11R5 or later:
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+has only the
+.S XtIMXEvent
+mask set, there is at least one pending X event to be
+processed for the calling process, and the widget to
+which the event is to be dispatched has no input method registered
+for this event shall call the event handler for this widget.
+>>CODE
+#if XT_X_RELEASE > 4
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+#endif
+
+#if XT_X_RELEASE > 4
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ FORK(pid2);
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Register XtEVT_Proc to handle events to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT_Proc,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Send ButtonPress event over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, TRUE);
+ display = XtDisplay(rowcolw);
+ /*
+ ** ButtonRelease to call DestroyTree and cleanup
+ */
+ send_event(rowcolw, ButtonRelease, ButtonReleaseMask, TRUE);
+ for (i= 0; i == 0;) {
+ XtProcessEvent(XtIMXEvent);
+ } /*end for */
+ 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 XtEVT_Proc was invoked");
+ invoked = avs_get_event(1);
+ check_dec(1, invoked, "XtEVT_Proc invocation count");
+ tet_result(TET_PASS);
+ }
+#else
+ tet_infoline("INFO: Implementation not X11R5 or greater");
+ tet_result(TET_UNSUPPORTED);
+#endif
+>>ASSERTION Good C
+If the implementation is X11R4:
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+has only the
+.S XtIMXEvent
+mask set and there is at least one pending X event to be
+processed for the calling process shall call the
+event handler for the widget to which the event is to be dispatched.
+>>CODE
+#if XT_X_RELEASE == 4
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+#endif
+
+#if XT_X_RELEASE == 4
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ FORK(pid2);
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Register XtEVT_Proc to handle events to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT_Proc,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Send ButtonPress event over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, TRUE);
+ display = XtDisplay(rowcolw);
+ /*
+ ** ButtonRelease to call DestroyTree and cleanup
+ */
+ send_event(rowcolw, ButtonRelease, ButtonReleaseMask, TRUE);
+ for (i= 0; i == 0;) {
+ XtProcessEvent(XtIMXEvent);
+ } /*end for */
+ 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 XtEVT_Proc was invoked");
+ invoked = avs_get_event(1);
+ check_dec(1, invoked, "XtEVT_Proc invocation count");
+ tet_result(TET_PASS);
+ }
+#else
+ tet_infoline("INFO: Implementation is X11R4");
+ tet_result(TET_UNSUPPORTED);
+#endif
+>>ASSERTION Good A
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+has only the
+.S XtIMXEvent
+mask set, there is at least one pending X event to be
+processed for the calling process, and the widget to
+which the event is to be dispatched has no event handler registered
+shall ignore the event.
+>>CODE
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ FORK(pid2);
+ 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 XtEVT_Proc to handle ButtonPress to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT_Proc,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Send KeyPress event over wire to labelw_msg widget");
+ send_event(labelw_msg, KeyPress, KeyPressMask, TRUE);
+ tet_infoline("PREP: Send ButtonPress event over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, TRUE);
+ send_event(rowcolw, ButtonRelease, ButtonReleaseMask, TRUE);
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO1_Proc, NULL);
+ display = XtDisplay(rowcolw);
+ for (i= 0; i == 0;) {
+ XtProcessEvent(XtIMXEvent);
+ } /*end for */
+ 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 XtEVT_Proc was invoked");
+ invoked = avs_get_event(1);
+ check_dec(1, invoked, "XtEVT_Proc invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+has only the
+.S XtIMTimer
+mask set and there is at least one pending timer to be
+processed for the calling process shall
+call the callback procedure registered for the timer.
+>>CODE
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ FORK(pid2);
+ 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 timeout procedure");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO2_Proc, NULL);
+ display = XtDisplay(rowcolw);
+ XtProcessEvent(XtIMTimer);
+ 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: Timer procedure was invoked");
+ invoked = avs_get_event(2);
+ check_dec(1, invoked, "timeout procedure invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+has only the
+.S XtIMAlternateInput
+mask set and there is at least one pending input source to be
+processed for the calling process shall
+call the callback procedure registered for the input source.
+>>CODE
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ sprintf(ebuf, "PREP: Open file %s for read", data);
+ tet_infoline(ebuf);
+ if ((fid = (FILE *)fopen(data, "w+")) == NULL) {
+ sprintf(ebuf, "ERROR: Could not open file %s", data);
+ tet_infoline(ebuf);
+ tet_result(TET_FAIL);
+ }
+ tet_infoline("PREP: Register file as an input source");
+ input_ret = XtAddInput(fileno(fid), (XtPointer)XtInputReadMask, XtIOP_Proc, (XtPointer)msg);
+ FORK(pid2);
+ 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 timeout procedure");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO1_Proc, NULL);
+ display = XtDisplay(rowcolw);
+ XtProcessEvent(XtIMAlternateInput);
+ LKROF(pid2, AVSXTTIMEOUT-4);
+ unlink(data);
+ 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: Input callback was invoked");
+ invoked = avs_get_event(3);
+ check_dec(1, invoked, "callback invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+is the bitwise inclusive OR of any combination of
+.S XtIMXEvent,
+.S XtIMTimer,
+and
+.S XtIMAlternateInput
+shall process any one event or input of the specified types.
+>>CODE
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ 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 XtEVT_Proc2 to handle events to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT_Proc2,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Send ButtonPress event over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, TRUE);
+ tet_infoline("PREP: Register timeout procedure");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO2_Proc, NULL);
+ FORK(pid2);
+ for (i= 0; i == 0;) {
+ XtProcessEvent(XtIMAlternateInput|XtIMXEvent|XtIMTimer);
+ }
+ LKROF(pid2, AVSXTTIMEOUT-4);
+ unlink(data);
+ 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 XtEVT_Proc2 was invoked");
+ invoked = avs_get_event(1);
+ check_dec(1, invoked, "XtEVT_Proc2 invocation count");
+ tet_infoline("TEST: Input callback was invoked");
+ invoked = avs_get_event(3);
+ check_dec(1, invoked, "callback invocation count");
+ tet_infoline("TEST: Timer procedure was invoked");
+ invoked = avs_get_event(2);
+ check_dec(1, invoked, "timeout procedure invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+is
+.S XtIMAll
+shall be equivalent to a call with mask set to a bitwise
+inclusive OR of
+.S XtIMXEvent,
+.S XtIMTimer,
+and
+.S XtIMAlternateInput.
+>>CODE
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ 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 XtEVT_Proc2 to handle events to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask,
+ False,
+ XtEVT_Proc2,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Send ButtonPress event over wire to labelw_msg widget");
+ send_event(labelw_msg, ButtonPress, ButtonPressMask, TRUE);
+ tet_infoline("PREP: Register timeout procedure");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO2_Proc, NULL);
+ FORK(pid2);
+ for (i= 0; i == 0;) {
+ XtProcessEvent(XtIMAll);
+ }
+ LKROF(pid2, AVSXTTIMEOUT-4);
+ unlink(data);
+ 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 XtEVT_Proc2 was invoked");
+ invoked = avs_get_event(1);
+ check_dec(1, invoked, "XtEVT_Proc2 invocation count");
+ tet_infoline("TEST: Input callback was invoked");
+ invoked = avs_get_event(3);
+ check_dec(1, invoked, "callback invocation count");
+ tet_infoline("TEST: Timer procedure was invoked");
+ invoked = avs_get_event(2);
+ check_dec(1, invoked, "timeout procedure invocation count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good A
+A successful call to
+void XtProcessEvent(mask)
+when there are no events or inputs of the
+specified types to be processed shall block
+until an appropriate event or input is available.
+>>CODE
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register timeout procedure");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO2_Proc, NULL);
+ FORK(pid2);
+ for (i= 0; i == 0;) {
+ XtProcessEvent(XtIMAll);
+ }
+ tet_infoline("ERROR: XtProcessEvent returned rqather than blocking");
+ tet_result(TET_FAIL);
+ 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: Timeout procedure was invoked");
+ invoked = avs_get_event(2);
+ check_dec(1, invoked, "timeout procedure invocation count");
+ tet_result(TET_PASS);
+ }
+>>#
+>># XtDispatchEvent assertions
+>>#
+>>ASSERTION Good D 0
+If the implementation is X11R5 or later:
+A successful call to
+void XtProcessEvent(mask)
+when
+.A mask
+has only the
+.S XtIMXEvent
+mask set, there is at least one pending X event to be
+processed for the calling process, and the widget
+to which the event is to be dispatched has an
+input method for this event shall not dispatch
+the event to the widget.
+>>ASSERTION Good A
+When an event for a widget in the calling process
+is a KeyPress, KeyRelease, ButtonPress, ButtonRelease,
+MotionNotify, EnterNotify, LeaveNotify, PropertyNotify
+or a SelectionClear event a call to
+void XtProcessEvent(mask)
+shall record the timestamp from the event as the
+last timestamp value that will be returned by the
+next call to XtLastTimestampProcessed.
+>>CODE
+char *msg = "Event widget";
+pid_t pid2;
+int invoked = 0;
+Display *display;
+XEvent loop_event;
+int i;
+pid_t pid3;
+int pstatus;
+
+ FORK(pid3);
+ avs_xt_hier_def("Tprocevnt1", "XtProcessEvent");
+ FORK(pid2);
+ tet_infoline("PREP: Create a test labelw_msg widget");
+ labelw_msg = (Widget) CreateLabelWidget(msg, boxw1);
+ tet_infoline("PREP: Register XtEVT_Proc3 to handle events to labelw_msg");
+ XtAddEventHandler(labelw_msg,
+ ButtonPressMask|ButtonReleaseMask|KeyPressMask|KeyReleaseMask,
+ False,
+ XtEVT_Proc3,
+ (XtPointer)NULL
+ );
+ tet_infoline("PREP: Create windows for widgets and map them");
+ XtRealizeWidget(topLevel);
+ tet_infoline("PREP: Register timeout procedure which will cause event");
+ XtAddTimeOut(AVSXTLOOPTIMEOUT, XtTMO_Proc5, topLevel);
+ display = XtDisplay(rowcolw);
+ for (i= 0; i == 0;) {
+ XtProcessEvent(XtIMAll);
+ } /*end for */
+ 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: Events were received");
+ invoked = avs_get_event(1);
+ check_dec(1, invoked, "Handler invocation for ButtonPress count");
+ invoked = avs_get_event(2);
+ check_dec(1, invoked, "Handler invocation for ButtonRelease count");
+ invoked = avs_get_event(3);
+ check_dec(1, invoked, "Handler invocation for KeyPress count");
+ invoked = avs_get_event(4);
+ check_dec(1, invoked, "Handler invocation for KeyRelease count");
+ tet_result(TET_PASS);
+ }
+>>ASSERTION Good D 0
+If the implementation is X11R5 or later:
+When an event in the calling process
+is a remap event, a modal cascade exists that has
+a widget with spring_loaded field set to
+.S True,
+and no event input filter has been registered for
+the spring-loaded widget window on the specified
+event a call to
+void XtProcessEvent(mask)
+shall dispatch the event to the spring-loaded
+widget after a dispatch to the widget to which
+the event belonged.
+>>ASSERTION Good D 0
+If the implementation is X11R5 or later:
+When an event in the calling process
+is a remap event, a modal cascade exists that has
+a widget with spring_loaded field set to
+.S True,
+and an event input filter has been registered
+for the spring-loaded widget window on the specified
+event a call to
+void XtProcessEvent(mask)
+shall not dispatch the event to the spring-loaded widget.