How to create regression tests for JavaBeans
============================================

All regression tests are developed to run under JavaTest 3.2.2.



TEST HIERARCHY
--------------

You should choose an appropriate folder from the following list:
 - The Beans folder contains tests for the java.beans.Beans class
 - The EventHandler folder contains tests for the java.beans.EventHandler class
 - The Introspector folder contains tests for introspection
 - The PropertyChangeSupport folder contains tests for the bound properties
 - The VetoableChangeSupport folder contains tests for the constrained properties
 - The PropertyEditor folder contains tests for all property editors
 - The Statement folder contains tests for statements and expressions
 - The XMLDecoder folder contains tests for XMLDecoder
 - The XMLEncoder folder contains tests for XMLEncoder
 - The Performance folder contains manual tests for performance
 - The beancontext folder contains tests for classes
   from the java.beans.beancontext package



NAME CONVENTIONS FOR TEST CLASSES
---------------------------------

Usually a class name should start with the "Test" word
followed by 7-digit CR number. For example:
	Beans/Test4067824.java

If your test contains additional files you should create
a subfolder with the CR number as its name. For example:
	Introspector/4168475/Test4168475.java
	Introspector/4168475/infos/ComponentBeanInfo.java

If you have several tests for the same CR number you should also
create a subfolder with the CR number as its name. For example:
	XMLEncoder/4741757/AbstractTest.java
	XMLEncoder/4741757/TestFieldAccess.java
	XMLEncoder/4741757/TestSecurityManager.java
	XMLEncoder/4741757/TestStackOverflow.java

Every JAR file should contain source files for all class files. For example:
	XMLDecoder/4676532/test.jar#test/Test.class
	XMLDecoder/4676532/test.jar#test/Test.java



USEFUL UTILITY CLASSES
----------------------

For Introspector tests you can use the BeanUtils class.
This class provides helpful methods to get
property descriptors for the specified type.


For XMLEncoder tests you can use the AbstractTest class.
This class is intended to simplify tests creating.
It contains methods to encode an object to XML,
decode XML and validate the result.
The validate() method is applied to compare
the object before encoding with the object after decoding.
If the test fails the Error is thrown.
1) The getObject() method should be implemented
   to return the object to test.
   This object will be encoded and decoded
   and the object creation will be tested.
2) The getAnotherObject() method can be overridden
   to return a different object to test.
   If this object is not null it will be encoded and decoded.
   Also the object updating will be tested in this case.
The test() method has a boolean parameter,
which indicates that the test should be started in secure context.