>># 
>># 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: chngprprty.m,v 1.12 92/06/11 16:12:23 rws Exp $
>># 
>>#      SCCS:  @(#)  EAll.mc Rel 1.5	    (3/12/92)
>>#      SCCS:  @(#)  EAto.mc Rel 1.6	    (10/4/91)
>>#      SCCS:  @(#)  EWin.mc Rel 1.4	    (7/19/91)
>>#      SCCS:  @(#)  EVal.mc Rel 1.5	    (10/10/91)
>>#      SCCS:  @(#)  EVal.mc Rel 1.5	    (10/10/91)
>>#
>>TITLE XChangeProperty CH04
>>ASSERTION A XChangeProperty-1
A call to XChangeProperty alters the property for the
specified window w and generates a PropertyNotify event on
that window.
>>STRATEGY
Create a window without properties and with PropertyChangeMask events selected.
Call XChangeProperty to replace a property value.
Verify that a PropertyNotify event occurred.
Verify that the property was updated as expected.
>>ASSERTION A XChangeProperty-2
When mode is PropModeReplace, then a call to
XChangeProperty discards the previous value of property and
stores the new data, in the specified format and type, and
a PropertyNotify event is generated.
>>STRATEGY
Create a window with properties and PropertyChangeMask events selected.
Call XChangeProperty to replace a property value.
Verify that a PropertyNotify event occurred.
Verify that the property was updated as expected.
>>ASSERTION A XChangeProperty-3
When mode is PropModePrepend, then a call to
XChangeProperty inserts the specified data before the
beginning of the existing data for property, and a
PropertyNotify event is generated.
>>STRATEGY
Create a window with properties and PropertyChangeMask events selected.
Call XChangeProperty to replace a property value.
Verify that a PropertyNotify event occurred.
Verify that the property was updated as expected.
>>ASSERTION A XChangeProperty-4
When mode is PropModeAppend, then a call to
XChangeProperty inserts the specified data onto the end of
the existing data for property, and a PropertyNotify event
is generated.
>>STRATEGY
Create a window with properties and PropertyChangeMask events selected.
Call XChangeProperty to replace a property value.
Verify that a PropertyNotify event occurred.
Verify that the property was updated as expected.
>>ASSERTION A XChangeProperty-5
When mode is PropModeAppend or PropModePrepend and the
property is undefined for window w, then on a call to
XChangeProperty the property is treated as if it were
defined with the correct type and format and had zero length
data.
>>STRATEGY
Create a window without properties and with PropertyChangeMask events selected.
Call XChangeProperty to prepend to a non-existant property value.
Verify that a PropertyNotify event occurred.
Verify that the property was updated as expected.
Call XChangeProperty to append to a non-existant property value.
Verify that a PropertyNotify event occurred.
Verify that the property was updated as expected.
>>ASSERTION A XChangeProperty-6
When the storing client closes its connection to the server
and the window w is not destroyed, then the format, data
and type of the property remain associated with the window.
>>STRATEGY
Create a new client.
Call XChangeProperty to add a property to the window on the new client.
Close client2.
Allow time for the client to close.
Verify that the property is still defined.
>>ASSERTION A XChangeProperty-7
When the storing client closes its connection to the server
and the server does not reset, then the atom property
remains.
>>STRATEGY
Create a new client.
Call XChangeProperty to change a property on a window on the new client.
Close new client.
Allow time for the client to close.
Verify that atom property remains defined.
>>ASSERTION A XChangeProperty-8
When mode is PropModePrepend or PropModeAppend and the type
or format do not match the existing property value, then on
a call to XChangeProperty a BadMatch error occurs.
>>STRATEGY
Create a window with properties and PropertyChangeMask events selected.
Call XChangeProperty to append a property value, with incorrect type information.
Verify that no PropertyNotify event occurred.
Verify that the property was unchanged.
Call XChangeProperty to prepend a property value, with incorrect format information.
Verify that no PropertyNotify event occurred.
Verify that the property was unchanged.
>>ASSERTION B XChangeProperty-9
When the server fails to allocate a required resource, then
a BadAlloc error occurs.
>>STRATEGY
Report UNTESTED
>>ASSERTION A XChangeProperty-10
When an atom argument does not name a valid Atom, then a
BadAtom error occurs.
>>STRATEGY
Call test function using a value with the top bits set as the atom argument.
Verify that a BadAtom error occurs.
>>ASSERTION A XChangeProperty-11
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.
>>ASSERTION A XChangeProperty-12
When the value of format is other than 8, 16 or 32, 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 XChangeProperty-13
When the value of mode is other than PropModeReplace,
PropModePrepend or PropModeAppend, 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.
