>># 
>># 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: ungrbbttn.m,v 1.6 92/06/11 17:17:03 rws Exp $
>># 
>>#      SCCS:  @(#)  EVal.mc Rel 1.5	    (10/10/91)
>>#      SCCS:  @(#)  EWin.mc Rel 1.4	    (7/19/91)
>>#
>>TITLE XUngrabButton CH07
>>ASSERTION B XUngrabButton-1
When a passive grab for the specified button/key
combination on the specified window exists and it was
grabbed by this client, then a call to XUngrabButton
releases the grab.
>>STRATEGY
If no test extension:
  Grab button.
  Call XUngrabButton to release grab.
  UNTESTED touch test only.
Place a passive grab on a button.
Activate grab.
Check that grab is active.
Release grab.
Call XUngrabButton to remove grab.
Attempt to activate grab.
Verify that pointer is not grabbed.
>>ASSERTION B XUngrabButton-2
A modifiers argument of AnyModifier is equivalent to
issuing the ungrab request for all possible modifier
combinations, including no modifiers.
>>STRATEGY
If no test extension:
  Touch test using AnyModifier.
Set passive grabs for different modifier combination on grab_window.
Set modifier to AnyModifier.
Call XUngrabButton.
Verify that all grabs have been released.
>>ASSERTION B XUngrabButton-3
A button argument of AnyButton is equivalent to issuing the
request for all possible buttons.
>>STRATEGY
If no test extension:
  Touch test using AnyButton.
Set passive grabs for different buttons.
Set button to AnyButton.
Call XUngrabButton.
Verify that all grabs have been released.
>>ASSERTION B XUngrabButton-4
A call to XUngrabButton has no effect on an active grab.
>>STRATEGY
If test extension available:
  Set up passive grab.
  Activate grab.
  Call XUngrabButton.
  Verify that pointer is still grabbed.
>>ASSERTION A XUngrabButton-5
When the value of modifiers is not a bitwise combination of
ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask,
Mod3Mask, Mod4Mask, Mod5Mask or AnyModifier, 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 XUngrabButton-6
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.
