>># 
>># 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: gtwdwprprt.m,v 1.9 92/06/11 16:13:17 rws Exp $
>># 
>>#      SCCS:  @(#)  EWin.mc Rel 1.4	    (7/19/91)
>>#      SCCS:  @(#)  EAto.mc Rel 1.6	    (10/4/91)
>>#
>>TITLE XGetWindowProperty CH04
>>ASSERTION A XGetWindowProperty-1
A successful call to XGetWindowProperty returns Success and
the actual type of the property, the actual format of the
property, the number of 8-bit, 16-bit, or 32-bit items
transferred, the number of bytes remaining to be read in the
property, and a pointer to the data actually returned.
>>STRATEGY
Create a window with a property.
Call XGetWindowProperty to obtain the property information.
Verify that the returned information was correct.
>>ASSERTION A XGetWindowProperty-2
When the specified property does not exist for the
specified window w, then a call to XGetWindowProperty
returns None to actual_type_return, zero to
actual_format_return and bytes_after_return, the
nitems_return argument is empty, and the delete argument is
ignored.
>>STRATEGY
Create a window with PropertyChangeMask events selected and no properties.
For delete_prop of True and False:
	Call XGetWindowProperty to obtain the property information.
	Verify that the returned values were correct.
	Verify that no PropertyNotify events were generated.
>>ASSERTION A XGetWindowProperty-3
When the specified property exists for the specified window
w and the type does not match the specified req_type, then
a call to XGetWindowProperty returns the actual property
type to actual_type_return, the actual property format to
actual_format_return, and the property length in bytes to
bytes_after_return, the nitems_return argument is empty,
and the delete argument is ignored.
>>STRATEGY
Create a window with a property and PropertyChangeMask events selected.
For delete_prop of True and False:
	Call XGetWindowProperty to obtain the property information.
	Verify that the returned values were correct.
	Verify that no PropertyNotify events were generated.
>>ASSERTION A XGetWindowProperty-4
When the specified property exists for the specified window
w, req_type is set to the type of the property or
AnyPropertyType, and delete is set to False, then a call
to XGetWindowProperty returns the actual property type to
actual_type_return, the actual property format to
actual_format_return, the number of trailing unread bytes
in the property in bytes_after_return, the number of
8/16/32 bit items in nitems_return, the data is placed in
prop_return, where the data is sourced from four times
long_offset bytes into the property, and is the minimum of
the remaining bytes left in the property and four times
long_length bytes long, and the property is not deleted.
>>STRATEGY
Create a window with testable properties.
For req_type is the required type and AnyPropertyType:
	Call XGetWindowProperty to obtain the property information of a STRING property,
		with delete False.
	Verify that the returned values were correct.
	Verify that no PropertyNotify events were generated.
	Call XGetWindowProperty to obtain the property information of an INTEGER property,
		with delete False.
	Verify that the returned values were correct.
	Verify that no PropertyNotify events were generated.
>>ASSERTION A XGetWindowProperty-5
When the specified property exists for the specified window
w, req_type is set to the type of the property or
AnyPropertyType, and delete is set to True, and on a call
to XGetWindowProperty the number of unread bytes in the
property returned to bytes_after_return is non-zero, then
the actual property type is returned to actual_type_return,
the actual property format to actual_format_return, the
number of trailing unread bytes in the property in
bytes_after_return, the number of 8/16/32 bit items in
nitems_return, the data is placed in prop_return, where
the data is sourced from four times long_offset bytes into
the property, and is the minimum of the remaining bytes
left in the property and four times long_length bytes long,
and the property is not deleted.
>>STRATEGY
Create a window with testable properties.
For req_type is the required type and AnyPropertyType:
	Call XGetWindowProperty to obtain the property information of a STRING property,
		with delete True.
	Verify that the returned values were correct.
	Verify that no PropertyNotify events were generated.
	Call XGetWindowProperty to obtain the property information of an INTEGER property,
		with delete True.
	Verify that the returned values were correct.
	Verify that no PropertyNotify events were generated.
>>ASSERTION A XGetWindowProperty-6
When the specified property exists for the specified window
w, req_type is set to the type of the property or
AnyPropertyType, delete is set to True, and on a call to
XGetWindowProperty the number of unread bytes in the
property returned to bytes_after_return is zero, then the
property is deleted from the window w and a PropertyNotify
event is generated on the specified window w.
>>STRATEGY
Create a window with PropertyChangeMask events selected.
For req_type is the required type and AnyPropertyType:
	Create a property on the window.
	Call XGetWindowProperty to obtain the property information,
		with delete True.
	Verify that the returned values were correct.
	Verify that a single PropertyNotify event was generated.
	Verify that the property has been deleted.
>>ASSERTION A XGetWindowProperty-7
A call to XGetWindowProperty always allocates one extra
byte in prop_return and sets it to ASCII NULL.
>>STRATEGY
Create a window with a property.
Call XGetWindowProperty to obtain property information.
Verify that prop_return contained an ASCII NULL.
>>ASSERTION A XGetWindowProperty-8
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 XGetWindowProperty-9
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 XGetWindowProperty-10
When XGetWindowProperty is called with long_offset such
that the offset lies beyond the end of the property, then a
BadValue error occurs.
>>STRATEGY
Create a window with a property and PropertyChangeMask events selected.
Call XGetWindowProperty with a long_offset beyond the property end.
Verify that a BadValue error occurred.
