>># 
>># 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: kyrls.m,v 1.13 92/07/06 19:59:05 rws Exp $
>># 
>>#
>>TITLE KeyRelease CH08
>>ASSERTION B KeyRelease-1
When any key is released, then a KeyRelease event is
generated.
>>STRATEGY
If extended testing is enabled:
  Create a window.
  Select for KeyRelease events.
  Simulate a KeyRelease event on the window.
  Verify that a KeyRelease event was delivered.
  Verify that event member fields are correctly set.
>>ASSERTION B KeyRelease-2
When a KeyRelease event is generated, then all clients
having set KeyReleaseMask event mask bits on the event
window are delivered a KeyRelease event.
>>STRATEGY
If extended testing is required:
  Create a second client.
  Create a third client.
  Create a window.
  Select for KeyRelease events on all clients.
  Simulate a KeyRelease event on the window.
  Verify that the event was delivered to all clients.
  Verify that event member fields are correctly set.
Otherwise :
  Create a window.
  Select for KeyRelease events.
  Verify no error was generated.
>>ASSERTION B KeyRelease-3
When a KeyRelease event is generated, then clients not
having set KeyReleaseMask event mask bits on the event
window are not delivered a KeyRelease event.
>>STRATEGY
If extended testing is required:
  Create a window.
  Create a second client.
  Select for various events other that KeyRelease for the first client on the window.
  Select for KeyRelease events for the second client on the window.
  Simulate a KeyRelease event on the window.
  Verify that a KeyRelease event was generated for the second client.
  Verify no events were generated for the first client.
>>ASSERTION B KeyRelease-4
When a KeyRelease event is generated and no client has
selected KeyReleaseMask on the source window, then the event
propagates, with propagation stopping at the root window of
the screen or at the first window with KeyReleaseMask in its
do-not-propagate mask, from the source window to the first
ancestor window for which some client has selected for
KeyRelease events.
>>STRATEGY
If extended testing is required:
  Create a window.
  Create a child of that window.
  Create a grandchild of the window.
  Select KeyRelease events on the root window of the screen.
  Simulate a KeyRelease event on the grandchild.
  Verify that a KeyRelease event was generated on the root.
  Select KeyRelease events on the grandparent window.
  Set the do_not_propagate mask on the child to KeyRelease events.
  Simulate a KeyRelease event on the grandchild.
  Verify no KeyRelease event was generated on the grandchild.
  Verify no KeyRelease event was generated on the child.
  Verify no KeyRelease event was generated on the parent.
  Select KeyRelease events on the child window.
  Set the do_not_propagate mask of the grandparent to KeyRelease events.
  Set the do_not_propagate mask of the child to NoEventMask.
  Simulate a KeyRelease event on the grandchild.
  Verify that no KeyRelease event was generated on the grandchild.
  Verify that no KeyRelease event was generated on the parent.
  Verify that a KeyRelease event was generated on the child.
>>ASSERTION B KeyRelease-5
When a KeyRelease event is delivered and the source window
is an inferior of the event window and the source window is
a child of the event window, then subwindow is set to the
source window.
>>STRATEGY
If extended testing is required:
  Create a window.
  Create a child of the window
  Select KeyRelease events on the parent.
  Simulate an KeyRelease event on the child.
  Verify that a KeyRelease event was generated on the parent.
  Verify that the subwindow component was set to the child.
>>ASSERTION B KeyRelease-6
When a KeyRelease event is delivered and the source window
is an inferior of the event window and the source window is
not a child of the event window, then subwindow is set to
the child of the event window that is an ancestor of the
source window.
>>STRATEGY
If extended testing is required :
  Create a window.  
  Create a child.
  Create a grandchild.
  Create a great-grandchild.
  Select KeyRelease events on the great-grandparent.
  Simulate a KeyRelease event on the great-grandchild.
  Verify that a KeyRelease event was generated on the great-grandparent.
  Verify that subwindow component of the event was the child.
>>ASSERTION B KeyRelease-7
When a KeyRelease event is delivered and the source window
is not an inferior of the event window, then subwindow is
set to None.
>>STRATEGY
If extended testing is required:
  Create a window.
  Select KeyRelease events on the window.
  Simulate a KeyRelease event on the window.
  Verify that a KeyRelease event was generated on the window.
  Verify that the subwindow component was set to None.
  Create a second window.
  Grab the keyboard for the first window with owner_events set to False.
  Simulate a KeyRelease event on the second window.
  Verify that a KeyRelease event was generated on the grabbing window.
  Verify that the subwindow component was set to None.
>>ASSERTION D KeyRelease-8
If multiple screens are supported: When a KeyRelease event
is delivered and the event and root windows are not on the
same screen, then x and y are set to zero.
>>STRATEGY
If multiple screens are supported:
  If extended testing is required:
    Create a window on the default screen.
    Select KeyRelease events on the window.
    Create a window on the alternative screen.
    Grab the keyboard for the first window.
    Simulate a KeyRelease event on the alternate window.
    Verify that a KeyRelease event was generated on the grabbing window.
    Verify that the x and y components were set to zero.
>>ASSERTION D KeyRelease-9
If multiple screens are supported: When a KeyRelease event
is delivered and the event and root windows are not on the
same screen, then same_screen is set to False.
>>STRATEGY
If multiple screens are supported:
  If extended testing is required:
    Create a window on the default screen.
    Select KeyRelease events on the window.
    Create a window on the alternative screen.
    Grab the keyboard for the first window.
    Simulate a KeyRelease event on the alternate window.
    Verify that a KeyRelease event was generated on the grabbing window.
    Verify that the same_screen component was False.
