diff options
Diffstat (limited to 'xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m')
-rw-r--r-- | xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m b/xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m new file mode 100644 index 000000000..26d66de01 --- /dev/null +++ b/xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m @@ -0,0 +1,223 @@ +/* + * Copyright 1990, 1991 by the Massachusetts Institute of Technology and + * UniSoft Group Limited. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and that + * both that copyright notice and this permission notice appear in + * supporting documentation, and that the names of MIT and UniSoft not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. MIT and UniSoft + * make no representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * $XConsortium$ + */ +>>TITLE XCheckMaskEvent CH08 +Bool +XCheckMaskEvent(display, event_mask, event_return) +Display *display = Dsp; +long event_mask; +XEvent *event_return = &_event; +>>EXTERN +/* + * Can not use "xcall" because it empties the event queue. + */ +#define _xcall_(rvalue) \ + _startcall(display);\ + rvalue = XCheckMaskEvent(display, event_mask, event_return);\ + _endcall(display) +static XEvent _event; +>>ASSERTION Good A +A call to xname +returns in +.A event_return +the first event in the event queue matching +.A event_mask . +>>STRATEGY +Discard all events on the event queue. +Call XPutBackEvent to put events on the event queue. +Call XCheckMaskEvent. +Verify that XCheckMaskEvent returned True. +Verify the correct event-type was returned. +Verify the first matching event in event queue was returned. +>>CODE +XEvent event; +XAnyEvent *ep; +Bool return_value; + +/* Discard all events on the event queue. */ + XSync(display, True); +/* Call XPutBackEvent to put events on the event queue. */ + ep = (XAnyEvent *) &event; + ep->type = KeyPress; + ep->send_event = False; + XPutBackEvent(display, &event); + ep->type = ButtonPress; + ep->send_event = False; + XPutBackEvent(display, &event); + ep->type = ButtonPress; + ep->send_event = True; /* first occurrence has send_event True */ + XPutBackEvent(display, &event); + ep->type = KeyPress; + ep->send_event = False; + XPutBackEvent(display, &event); +/* Call XCheckMaskEvent. */ + event_mask = ButtonPressMask; + _xcall_(return_value); +/* Verify that XCheckMaskEvent returned True. */ + if (return_value != True) { + report("Did not return True: returned %d", return_value); + FAIL; + } + else + CHECK; +/* Verify the correct event-type was returned. */ + ep = (XAnyEvent *) event_return; + if (ep->type != ButtonPress) { + report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress)); + FAIL; + } + else + CHECK; +/* Verify the first matching event in event queue was returned. */ + if (ep->send_event != True) { + report("First event in event queue was not returned."); + FAIL; + } + else + CHECK; + CHECKPASS(3); +>>ASSERTION def +When a call to xname finds a matching event, +then +xname +returns +.S True . +>>ASSERTION Good A +A call to xname removes the returned event from the event queue. +>>STRATEGY +Discard all events on the event queue. +Call XPutBackEvent to put events on the event queue. +Call XPending to get the current event queue size. +Call XCheckMaskEvent. +Call XPending to get the current event queue size. +Verify that size of event queue has decreased by one. +>>CODE +XEvent event; +int oldqsize; +int newqsize; +Bool return_value; + +/* Discard all events on the event queue. */ + XSync(display, True); +/* Call XPutBackEvent to put events on the event queue. */ + event.type = ButtonPress; + XPutBackEvent(display, &event); +/* Call XPending to get the current event queue size. */ + oldqsize = XPending(display); +/* Call XCheckMaskEvent. */ + event_mask = ButtonPressMask; + _xcall_(return_value); +/* Call XPending to get the current event queue size. */ + newqsize = XPending(display); +/* Verify that size of event queue has decreased by one. */ + if (newqsize != (oldqsize-1)) { + report("Event queue size %d, expected %d", newqsize, oldqsize-1); + FAIL; + } + else + CHECK; + CHECKPASS(1); +>>ASSERTION def +When a matching event is not in the event queue, +then a call to xname +returns in +.A event_return +the first matching event available on the X server connection. +>>ASSERTION Good A +When a matching event is not in the event queue and +is not available on the X server connection, +then a call to xname +returns +.S False . +>>STRATEGY +Discard all events on the event queue. +Call XCheckMaskEvent. +Verify that XCheckMaskEvent returned False. +>>CODE +Bool return_value; + +/* Discard all events on the event queue. */ + XSync(display, True); +/* Call XCheckMaskEvent. */ + event_mask = ButtonPressMask; + _xcall_(return_value); +/* Verify that XCheckMaskEvent returned False. */ + if (return_value != False) { + report("Did not return False: returned %d", return_value); + FAIL; + } + else + CHECK; + CHECKPASS(1); +>>ASSERTION Good A +When a matching event is not in the event queue and +is not available on the X server connection, +then a call to xname +flushes the output buffer. +>>STRATEGY +Create client2. +Discard all events on the event queue. +Create pixmap. +Call XCheckMaskEvent. +Verify that XCheckMaskEvent returned False. +Empty the buffer. +Ensure the server has dealt with anything flushed to it: do XSync() +Verify that the output buffer was flushed by effect on server. +>>CODE +Bool return_value; +Pixmap pm; +Display *client2; + +/* Create client2. */ + client2 = opendisplay(); + if (client2 == (Display *) NULL) { + delete("Can not open display"); + return; + } + else + CHECK; +/* Discard all events on the event queue. */ + XSync(display, True); +/* Create pixmap. */ + /* avoid using makepixm() */ + pm = XCreatePixmap(display, DRW(display), 10, 10, 1); +/* Call XCheckMaskEvent. */ + event_mask = ButtonPressMask; + _xcall_(return_value); +/* Verify that XCheckMaskEvent returned False. */ + if (return_value != False) { + report("Did not return False: returned %d", return_value); + FAIL; + } + else + CHECK; +/* Empty the buffer. */ + (void)XTestDiscard(display); +/* Ensure the server has dealt with anything flushed to it: do XSync() */ + XSync(display, False); +/* Verify that the output buffer was flushed by effect on server. */ + _startcall(client2); + XFreePixmap(client2, pm); + XSync(client2, True); + _endcall(client2); + if (geterr() != Success) { + report("The output buffer was not flushed."); + XFreePixmap(display, pm); + FAIL; + } + else + CHECK; + CHECKPASS(3); |