>># 
>># 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: crcltsbws.m,v 1.8 92/06/11 16:05:57 rws Exp $
>># 
>>#      SCCS:  @(#)  EVal.mc Rel 1.5	    (10/10/91)
>>#      SCCS:  @(#)  EWin.mc Rel 1.4	    (7/19/91)
>>#
>>TITLE XCirculateSubwindows CH03
>>ASSERTION A XCirculateSubwindows-1
When direction is RaiseLowest and there is a mapped child
that is occluded by another child, then a call to
XCirculateSubwindows raises the lowest such mapped child to
the top of the stack.
>>STRATEGY
Create a window hierarchy using buildtree.
Call XCirculateSubwindows with direction of RaiseLowest upon parent.
Verify that the lowest occluded mapped child window was raised
>>ASSERTION A XCirculateSubwindows-2
When direction is LowerHighest and there is a mapped child
that occludes another child, then a call to
XCirculateSubwindows lowers the highest such mapped child to
the bottom of the stack.
>>STRATEGY
Create a window hierarchy using buildtree.
Call XCirculateSubwindows with direction of LowerHighest upon parent.
Verify that the highest occluding mapped child window was lowered
>>ASSERTION A XCirculateSubwindows-3
When a call to XCirculateSubwindows uncovers part of any
window that was formerly obscured, then either Expose events
are generated or the contents are restored from backing
store.
>>STRATEGY
Create a window hierarchy using buildtree.
Call setforexpose on window 'zero' to allow Expose event checking.
Select Expose events on window 'zero'.
Call XCirculateSubwindows in order to expose window 'zero'.
Use exposecheck to ensure that the window 'zero' was restored correctly.
>>ASSERTION A XCirculateSubwindows-4
When some other client has selected
SubstructureRedirectMask on the window, then a
CirculateRequest event is generated, and no further
processing is performed.
>>STRATEGY
Create client1 and client2 with a window on client1
Create a window hierarchy for client1.
Save parent window image as reference image.
Select all events other than SubstructureRedirectMask events on all the windows for client1, to catch rogue events.
Select SubstructureRedirectMask on the parent window for client2.
Call XCirculateSubwindows with direction RaiseLowest on client1 in order to raise window zero.
Verify that no events were delivered to client1 using getevent.
Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent.
Verify that no further processing occurred by comparing the window and our reference image.
Call XCirculateSubwindows with direction LowerHighest on client1 in order to lower window two.
Verify that no events were delivered to client1 using getevent.
Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent.
Verify that no further processing occurred by comparing the window and our reference image.
>>ASSERTION A XCirculateSubwindows-5
When a child is actually restacked, then a CirculateNotify
event is generated.
>>STRATEGY
Create client1, client2, and client3, with a window on client1
Create a window hierarchy using buildtree.
Select StructureNotifyMask events on the windows zero on client2
Select SubstructureNotifyMask events on the parent window on client3
Call XCirculateSubwindows in order to raise window zero with direction RaiseLowest.
Verify that a correct CirculateNotify event was delivered to window zero
Verify that a correct CirculateNotify event was delivered to the
     parent window on client3 using getevent and checkevent.
Call XCirculateSubwindows in order to lower window zero with direction LowerHighest
Verify that a correct CirculateNotify event was delivered to 
	window zero on client2 using getevent and checkevent.
Verify that a correct CirculateNotify event was delivered to the
	parent window on client3 using getevent and checkevent.
>>ASSERTION A XCirculateSubwindows-6
When the value of direction is other than RaiseLowest or
LowerHighest, then a BadValue error occurs.
>>STRATEGY
Obtain a sequence of values which are not in the list specified by VALUE_LIST.
For each value:
  Call test function with this value in the VALUE_ARG argument.
  Verify that a BadValue error occurs.
>>ASSERTION A XCirculateSubwindows-7
When a window argument does not name a valid Window, then a
BadWindow error occurs.
>>STRATEGY
Create a bad window by creating and destroying a window.
Call test function using bad window as the window argument.
Verify that a BadWindow error occurs.
