>># 
>># 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: crcltsbwsu.m,v 1.5 92/06/11 16:06:34 rws Exp $
>># 
>>#      SCCS:  @(#)  EWin.mc Rel 1.4	    (7/19/91)
>>#
>>TITLE XCirculateSubwindowsUp CH03
>>ASSERTION A XCirculateSubwindowsUp-1
When there is a mapped child that is occluded by another
child, then a call to XCirculateSubwindowsUp raises the
lowest such mapped child to the top of the stack.
>>STRATEGY
Create a window hierarchy using buildtree.
Call XCirculateSubwindowsUp upon the parent.
Verify that the lowest occluded mapped child window was raised to the top. 
>>ASSERTION A XCirculateSubwindowsUp-2
When a call to XCirculateSubwindowsUp 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 XCirculateSubwindowsUp in order to expose window 'zero'.
Use exposecheck to ensure that the window 'zero' was restored correctly.
>>ASSERTION A XCirculateSubwindowsUp-3
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 XCirculateSubwindowsUp 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.
>>ASSERTION A XCirculateSubwindowsUp-4
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 XCirculateSubwindowsUp in order to raise window zero
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 XCirculateSubwindowsUp-5
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.
