[hibernate-commits] Hibernate SVN: r10977 - in trunk/Hibernate3/test/org/hibernate: . junit junit/functional test test/abstractembeddedcomponents/cid test/abstractembeddedcomponents/propertyref test/any test/array test/ast test/batch test/batchfetch test/bidi test/bytecode/cglib test/bytecode/javassist test/cache test/cache/ehcache test/cache/treecache/optimistic test/cache/treecache/pessimistic test/cascade test/cfg test/cid test/collection test/collection/bag test/collection/idbag test/collection/list test/collection/map test/collection/original test/collection/set test/component test/compositeelement test/connections test/criteria test/cuk test/cut test/deletetransient test/dialect/cache test/discriminator test/dynamicentity test/dynamicentity/interceptor test/dynamicentity/tuplizer test/ecid test/entitymode test/entitymode/dom4j test/entitymode/dom4j/accessors test/entitymode/dom4j/basic test/entitymode/dom4j/many2one test/entitymode/map test/entitymode/map/basic test/entitymode/m! ulti test/exception test/extendshbm test/extralazy test/filter test/formulajoin test/generated test/generatedkeys test/generatedkeys/identity test/generatedkeys/select test/generatedkeys/seqidentity test/hql test/id test/idbag test/idclass test/idprops test/immutable test/instrument/buildtime test/instrument/cases test/instrument/domain test/instrument/runtime test/interceptor test/interfaceproxy test/iterate test/join test/joinedsubclass test/joinfetch test/jpa test/jpa/cascade test/jpa/fetch test/jpa/lock test/jpa/proxy test/jpa/ql test/jpa/removed test/lazycache test/lazyonetoone test/legacy test/lob test/manytomany test/manytomany/ordered test/map test/mapcompelem test/mapelemformula test/mapping test/mappingexception test/mixed test/naturalid test/ondelete test/onetomany test/onetoone test/onetoone/formula test/onetoone/joined test/onetoone/link test/onetoone/nopojo test/onetoone/singletable test/ops test/optlock test/ordered test/orphan test/pagination test/pretty tes! t/propertyref/basic test/propertyref/component/complete test/propertyref/component/partial test/propertyref/inheritence/discrim test/propertyref/inheritence/joined test/propertyref/inheritence/union test/proxy test/querycache test/readonly test/rowid test/schemaupdate test/sorted test/sql test/sql/check test/stateless test/s

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Dec 12 18:29:50 EST 2006


Author: steve.ebersole at jboss.com
Date: 2006-12-12 18:28:04 -0500 (Tue, 12 Dec 2006)
New Revision: 10977

Added:
   trunk/Hibernate3/test/org/hibernate/junit/
   trunk/Hibernate3/test/org/hibernate/junit/AbstractClassLoaderIsolatedTestCase.java
   trunk/Hibernate3/test/org/hibernate/junit/SkipLog.java
   trunk/Hibernate3/test/org/hibernate/junit/TestSuiteVisitor.java
   trunk/Hibernate3/test/org/hibernate/junit/UnitTestCase.java
   trunk/Hibernate3/test/org/hibernate/junit/functional/
   trunk/Hibernate3/test/org/hibernate/junit/functional/DatabaseSpecificFunctionalTestCase.java
   trunk/Hibernate3/test/org/hibernate/junit/functional/ExecutionEnvironment.java
   trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestCase.java
   trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestClassTestSuite.java
   trunk/Hibernate3/test/org/hibernate/test/collection/original/
   trunk/Hibernate3/test/org/hibernate/test/collection/original/CollectionTest.java
   trunk/Hibernate3/test/org/hibernate/test/collection/original/Email.java
   trunk/Hibernate3/test/org/hibernate/test/collection/original/Permission.java
   trunk/Hibernate3/test/org/hibernate/test/collection/original/User.java
   trunk/Hibernate3/test/org/hibernate/test/collection/original/UserPermissions.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/dynamicentity/DynamicEntitySuite.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/EntityModeSuite.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/Dom4jSuite.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/accessors/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/accessors/Dom4jAccessorTest.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/basic/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/basic/AB.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/basic/Account.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/basic/Dom4jTest.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/basic/Employer.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/many2one/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/many2one/Car.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/many2one/Car.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/many2one/CarPart.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/many2one/CarType.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/dom4j/many2one/Dom4jManyToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/map/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/map/MapSuite.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/map/basic/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/map/basic/DynamicClassTest.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/map/basic/ProductLine.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/entitymode/multi/
   trunk/Hibernate3/test/org/hibernate/test/entitymode/multi/MultiRepresentationTest.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/multi/Stock.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/entitymode/multi/Stock.java
   trunk/Hibernate3/test/org/hibernate/test/entitymode/multi/Valuation.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/entitymode/multi/Valuation.java
   trunk/Hibernate3/test/org/hibernate/test/generated/GeneratedPropertySuite.java
   trunk/Hibernate3/test/org/hibernate/test/generatedkeys/GeneratedKeysSuite.java
   trunk/Hibernate3/test/org/hibernate/test/hql/CriteriaClassicAggregationReturnTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/lock/JPALockTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/OneToOneSuite.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/formula/
   trunk/Hibernate3/test/org/hibernate/test/onetoone/formula/Address.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/formula/OneToOneFormulaTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/formula/Person.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/onetoone/formula/Person.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/joined/JoinedSubclassOneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/link/
   trunk/Hibernate3/test/org/hibernate/test/onetoone/link/Customer.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/link/Employee.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/link/OneToOneLinkTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/link/Person.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/onetoone/link/Person.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/nopojo/DynamicMapOneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/singletable/DiscrimSubclassOneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/orphan/OrphanSuite.java
Removed:
   trunk/Hibernate3/test/org/hibernate/test/AbstractClassLoaderIsolatedTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/DatabaseSpecificTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/TestSuiteVisitor.java
   trunk/Hibernate3/test/org/hibernate/test/collection/CollectionTest.java
   trunk/Hibernate3/test/org/hibernate/test/collection/Email.java
   trunk/Hibernate3/test/org/hibernate/test/collection/Permission.java
   trunk/Hibernate3/test/org/hibernate/test/collection/User.java
   trunk/Hibernate3/test/org/hibernate/test/collection/UserPermissions.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/component/A.java
   trunk/Hibernate3/test/org/hibernate/test/component/ABC.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/component/B.java
   trunk/Hibernate3/test/org/hibernate/test/component/C.java
   trunk/Hibernate3/test/org/hibernate/test/component/DynamicComponentTest.java
   trunk/Hibernate3/test/org/hibernate/test/dom4j/
   trunk/Hibernate3/test/org/hibernate/test/dynamic/
   trunk/Hibernate3/test/org/hibernate/test/entity/
   trunk/Hibernate3/test/org/hibernate/test/jpa/lock/EJB3LockTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/joined/OneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/nopojo/OneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetoone/singletable/OneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetooneformula/
   trunk/Hibernate3/test/org/hibernate/test/onetoonelink/
   trunk/Hibernate3/test/org/hibernate/test/sqlinterceptor/
Modified:
   trunk/Hibernate3/test/org/hibernate/test/AllTests.java
   trunk/Hibernate3/test/org/hibernate/test/TestCase.java
   trunk/Hibernate3/test/org/hibernate/test/TestSelector.java
   trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/cid/AbstractCompositeIdTest.java
   trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/propertyref/AbstractComponentPropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/any/Address.java
   trunk/Hibernate3/test/org/hibernate/test/any/AnyTypeTest.java
   trunk/Hibernate3/test/org/hibernate/test/array/ArrayTest.java
   trunk/Hibernate3/test/org/hibernate/test/ast/ASTIteratorTest.java
   trunk/Hibernate3/test/org/hibernate/test/ast/ASTUtilTest.java
   trunk/Hibernate3/test/org/hibernate/test/batch/BatchTest.java
   trunk/Hibernate3/test/org/hibernate/test/batchfetch/BatchFetchTest.java
   trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest.java
   trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest2.java
   trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/InvocationTargetExceptionTest.java
   trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/ReflectionOptimizerTest.java
   trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/InvocationTargetExceptionTest.java
   trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/ReflectionOptimizerTest.java
   trunk/Hibernate3/test/org/hibernate/test/cache/BaseCacheProviderTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/cache/ehcache/EhCacheTest.java
   trunk/Hibernate3/test/org/hibernate/test/cache/treecache/optimistic/OptimisticTreeCacheTest.java
   trunk/Hibernate3/test/org/hibernate/test/cache/treecache/pessimistic/TreeCacheTest.java
   trunk/Hibernate3/test/org/hibernate/test/cascade/RefreshTest.java
   trunk/Hibernate3/test/org/hibernate/test/cfg/CacheableFileTest.java
   trunk/Hibernate3/test/org/hibernate/test/cid/CompositeIdTest.java
   trunk/Hibernate3/test/org/hibernate/test/collection/CollectionSuite.java
   trunk/Hibernate3/test/org/hibernate/test/collection/bag/PersistentBagTest.java
   trunk/Hibernate3/test/org/hibernate/test/collection/idbag/PersistentIdBagTest.java
   trunk/Hibernate3/test/org/hibernate/test/collection/list/PersistentListTest.java
   trunk/Hibernate3/test/org/hibernate/test/collection/map/PersistentMapTest.java
   trunk/Hibernate3/test/org/hibernate/test/collection/set/PersistentSetTest.java
   trunk/Hibernate3/test/org/hibernate/test/component/ComponentTest.java
   trunk/Hibernate3/test/org/hibernate/test/compositeelement/CompositeElementTest.java
   trunk/Hibernate3/test/org/hibernate/test/connections/AggressiveReleaseTest.java
   trunk/Hibernate3/test/org/hibernate/test/connections/BasicConnectionProviderTest.java
   trunk/Hibernate3/test/org/hibernate/test/connections/ConnectionManagementTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/connections/ConnectionsSuite.java
   trunk/Hibernate3/test/org/hibernate/test/connections/CurrentSessionConnectionTest.java
   trunk/Hibernate3/test/org/hibernate/test/connections/SuppliedConnectionTest.java
   trunk/Hibernate3/test/org/hibernate/test/connections/ThreadLocalCurrentSessionTest.java
   trunk/Hibernate3/test/org/hibernate/test/criteria/CriteriaQueryTest.java
   trunk/Hibernate3/test/org/hibernate/test/cuk/CompositePropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/cuk/Person.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/cut/CompositeUserTypeTest.java
   trunk/Hibernate3/test/org/hibernate/test/deletetransient/DeleteTransientEntityTest.java
   trunk/Hibernate3/test/org/hibernate/test/dialect/cache/SQLFunctionsInterSystemsTest.java
   trunk/Hibernate3/test/org/hibernate/test/discriminator/DiscriminatorTest.java
   trunk/Hibernate3/test/org/hibernate/test/dynamicentity/interceptor/InterceptorDynamicEntityTest.java
   trunk/Hibernate3/test/org/hibernate/test/dynamicentity/tuplizer/TuplizerDynamicEntityTest.java
   trunk/Hibernate3/test/org/hibernate/test/ecid/EmbeddedCompositeIdTest.java
   trunk/Hibernate3/test/org/hibernate/test/exception/SQLExceptionConversionTest.java
   trunk/Hibernate3/test/org/hibernate/test/extendshbm/ExtendsTest.java
   trunk/Hibernate3/test/org/hibernate/test/extralazy/ExtraLazyTest.java
   trunk/Hibernate3/test/org/hibernate/test/filter/DynamicFilterTest.java
   trunk/Hibernate3/test/org/hibernate/test/formulajoin/FormulaJoinTest.java
   trunk/Hibernate3/test/org/hibernate/test/generated/AbstractGeneratedPropertyTest.java
   trunk/Hibernate3/test/org/hibernate/test/generated/TimestampGeneratedValuesWithCachingTest.java
   trunk/Hibernate3/test/org/hibernate/test/generated/TriggerGeneratedValuesWithCachingTest.java
   trunk/Hibernate3/test/org/hibernate/test/generated/TriggerGeneratedValuesWithoutCachingTest.java
   trunk/Hibernate3/test/org/hibernate/test/generatedkeys/identity/IdentityGeneratedKeysTest.java
   trunk/Hibernate3/test/org/hibernate/test/generatedkeys/select/SelectGeneratorTest.java
   trunk/Hibernate3/test/org/hibernate/test/generatedkeys/seqidentity/SequenceIdentityTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/ASTParserLoadingTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/BulkManipulationTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/ClassicTranslatorTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/CriteriaHQLAlignmentTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/EJBQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/HQLSuite.java
   trunk/Hibernate3/test/org/hibernate/test/hql/HQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/HqlParserTest.java
   trunk/Hibernate3/test/org/hibernate/test/hql/QueryTranslatorTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/hql/ScrollableCollectionFetchingTest.java
   trunk/Hibernate3/test/org/hibernate/test/id/MultipleHiLoPerTableGeneratorTest.java
   trunk/Hibernate3/test/org/hibernate/test/idbag/IdBagTest.java
   trunk/Hibernate3/test/org/hibernate/test/idclass/IdClassTest.java
   trunk/Hibernate3/test/org/hibernate/test/idprops/IdentifierPropertyReferencesTest.java
   trunk/Hibernate3/test/org/hibernate/test/immutable/ImmutableTest.java
   trunk/Hibernate3/test/org/hibernate/test/instrument/buildtime/InstrumentTest.java
   trunk/Hibernate3/test/org/hibernate/test/instrument/cases/AbstractExecutable.java
   trunk/Hibernate3/test/org/hibernate/test/instrument/domain/Documents.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/instrument/runtime/AbstractTransformingClassLoaderInstrumentTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/instrument/runtime/CGLIBInstrumentationTest.java
   trunk/Hibernate3/test/org/hibernate/test/instrument/runtime/JavassistInstrumentationTest.java
   trunk/Hibernate3/test/org/hibernate/test/interceptor/InterceptorTest.java
   trunk/Hibernate3/test/org/hibernate/test/interfaceproxy/InterfaceProxyTest.java
   trunk/Hibernate3/test/org/hibernate/test/iterate/IterateTest.java
   trunk/Hibernate3/test/org/hibernate/test/join/JoinTest.java
   trunk/Hibernate3/test/org/hibernate/test/join/Person.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/joinedsubclass/JoinedSubclassTest.java
   trunk/Hibernate3/test/org/hibernate/test/joinfetch/JoinFetchTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/AbstractJPATest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/JPAComplianceSuite.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/cascade/CascadeTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/fetch/FetchingTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/proxy/JPAProxyTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/ql/JPAQLComplianceTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/ql/NativeQueryTest.java
   trunk/Hibernate3/test/org/hibernate/test/jpa/removed/RemovedEntityTest.java
   trunk/Hibernate3/test/org/hibernate/test/lazycache/InstrumentCacheTest.java
   trunk/Hibernate3/test/org/hibernate/test/lazycache/InstrumentCacheTest2.java
   trunk/Hibernate3/test/org/hibernate/test/lazyonetoone/LazyOneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/ABCProxyTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/ABCTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/CacheTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/ComponentNotNullTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/ConfigurationPerformanceTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/CustomSQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/FooBarTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/FumTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/IJ2Test.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/IJTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/LegacyTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/MapTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/MasterDetailTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/MultiTableTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/NonReflectiveBinderTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/OneToOneCacheTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/ParentChildTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/QueryByExampleTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/SQLFunctionsTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/SQLLoaderTest.java
   trunk/Hibernate3/test/org/hibernate/test/legacy/StatisticsTest.java
   trunk/Hibernate3/test/org/hibernate/test/lob/BlobTest.java
   trunk/Hibernate3/test/org/hibernate/test/lob/ClobTest.java
   trunk/Hibernate3/test/org/hibernate/test/lob/LobMappings.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/lob/SerializableTypeTest.java
   trunk/Hibernate3/test/org/hibernate/test/manytomany/ManyToManyTest.java
   trunk/Hibernate3/test/org/hibernate/test/manytomany/ordered/OrderedManyToManyTest.java
   trunk/Hibernate3/test/org/hibernate/test/map/MapIndexFormulaTest.java
   trunk/Hibernate3/test/org/hibernate/test/mapcompelem/MapCompositeElementTest.java
   trunk/Hibernate3/test/org/hibernate/test/mapelemformula/MapElementFormulaTest.java
   trunk/Hibernate3/test/org/hibernate/test/mapping/PersistentClassVisitorTest.java
   trunk/Hibernate3/test/org/hibernate/test/mapping/ValueVisitorTest.java
   trunk/Hibernate3/test/org/hibernate/test/mappingexception/MappingExceptionTest.java
   trunk/Hibernate3/test/org/hibernate/test/mixed/MixedTest.java
   trunk/Hibernate3/test/org/hibernate/test/naturalid/NaturalIdTest.java
   trunk/Hibernate3/test/org/hibernate/test/ondelete/OnDeleteTest.java
   trunk/Hibernate3/test/org/hibernate/test/onetomany/OneToManyTest.java
   trunk/Hibernate3/test/org/hibernate/test/ops/AbstractOperationTestCase.java
   trunk/Hibernate3/test/org/hibernate/test/ops/CreateTest.java
   trunk/Hibernate3/test/org/hibernate/test/ops/DeleteTest.java
   trunk/Hibernate3/test/org/hibernate/test/ops/GetLoadTest.java
   trunk/Hibernate3/test/org/hibernate/test/ops/MergeTest.java
   trunk/Hibernate3/test/org/hibernate/test/ops/SaveOrUpdateTest.java
   trunk/Hibernate3/test/org/hibernate/test/optlock/Document.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/optlock/OptimisticLockTest.java
   trunk/Hibernate3/test/org/hibernate/test/ordered/OrderByTest.java
   trunk/Hibernate3/test/org/hibernate/test/orphan/OrphanIdRollbackTest.java
   trunk/Hibernate3/test/org/hibernate/test/orphan/OrphanTest.java
   trunk/Hibernate3/test/org/hibernate/test/orphan/PropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/pagination/PaginationTest.java
   trunk/Hibernate3/test/org/hibernate/test/pretty/SQLFormatterTest.java
   trunk/Hibernate3/test/org/hibernate/test/propertyref/basic/PropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/propertyref/component/complete/CompleteComponentPropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/propertyref/component/partial/PartialComponentPropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/propertyref/inheritence/discrim/SubclassPropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/propertyref/inheritence/joined/JoinedSubclassPropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/propertyref/inheritence/union/UnionSubclassPropertyRefTest.java
   trunk/Hibernate3/test/org/hibernate/test/proxy/ProxyTest.java
   trunk/Hibernate3/test/org/hibernate/test/querycache/QueryCacheTest.java
   trunk/Hibernate3/test/org/hibernate/test/readonly/ReadOnlyTest.java
   trunk/Hibernate3/test/org/hibernate/test/rowid/Point.hbm.xml
   trunk/Hibernate3/test/org/hibernate/test/rowid/RowIdTest.java
   trunk/Hibernate3/test/org/hibernate/test/schemaupdate/MigrationTest.java
   trunk/Hibernate3/test/org/hibernate/test/sorted/SortTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/DataDirectOracleSQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/Db2SQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/GeneralTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/HandSQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/MSSQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/MySQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/OracleSQLTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/check/OracleCheckStyleTest.java
   trunk/Hibernate3/test/org/hibernate/test/sql/check/ResultCheckStyleTest.java
   trunk/Hibernate3/test/org/hibernate/test/stateless/StatelessSessionTest.java
   trunk/Hibernate3/test/org/hibernate/test/stats/SessionStatsTest.java
   trunk/Hibernate3/test/org/hibernate/test/stats/StatsTest.java
   trunk/Hibernate3/test/org/hibernate/test/subclassfilter/DiscrimSubclassFilterTest.java
   trunk/Hibernate3/test/org/hibernate/test/subclassfilter/JoinedSubclassFilterTest.java
   trunk/Hibernate3/test/org/hibernate/test/subclassfilter/UnionSubclassFilterTest.java
   trunk/Hibernate3/test/org/hibernate/test/subselect/SubselectTest.java
   trunk/Hibernate3/test/org/hibernate/test/subselectfetch/SubselectFetchTest.java
   trunk/Hibernate3/test/org/hibernate/test/ternary/TernaryTest.java
   trunk/Hibernate3/test/org/hibernate/test/timestamp/TimestampTest.java
   trunk/Hibernate3/test/org/hibernate/test/tm/CMTTest.java
   trunk/Hibernate3/test/org/hibernate/test/tool/TestSchemaTools.java
   trunk/Hibernate3/test/org/hibernate/test/typedmanytoone/TypedManyToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/typedonetoone/TypedOneToOneTest.java
   trunk/Hibernate3/test/org/hibernate/test/typeparameters/TypeParameterTest.java
   trunk/Hibernate3/test/org/hibernate/test/unconstrained/UnconstrainedTest.java
   trunk/Hibernate3/test/org/hibernate/test/unidir/BackrefTest.java
   trunk/Hibernate3/test/org/hibernate/test/unionsubclass/UnionSubclassTest.java
   trunk/Hibernate3/test/org/hibernate/test/unionsubclass2/UnionSubclassTest.java
   trunk/Hibernate3/test/org/hibernate/test/usercollection/UserCollectionTypeTest.java
   trunk/Hibernate3/test/org/hibernate/test/util/PropertiesHelperTest.java
   trunk/Hibernate3/test/org/hibernate/test/util/StringHelperTest.java
   trunk/Hibernate3/test/org/hibernate/test/util/dtd/EntityResolverTest.java
   trunk/Hibernate3/test/org/hibernate/test/version/VersionTest.java
   trunk/Hibernate3/test/org/hibernate/test/version/db/DbVersionTest.java
   trunk/Hibernate3/test/org/hibernate/test/version/sybase/SybaseTimestampVersioningTest.java
   trunk/Hibernate3/test/org/hibernate/test/where/WhereTest.java
Log:
test suite reorg

Added: trunk/Hibernate3/test/org/hibernate/junit/AbstractClassLoaderIsolatedTestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/AbstractClassLoaderIsolatedTestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/AbstractClassLoaderIsolatedTestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,34 @@
+package org.hibernate.junit;
+
+/**
+ * A specialized TestCase for running tests in an isolated class-loader
+ *
+ * @author Steve Ebersole
+ */
+public abstract class AbstractClassLoaderIsolatedTestCase extends UnitTestCase {
+	private ClassLoader parentLoader;
+	private ClassLoader isolatedLoader;
+
+	public AbstractClassLoaderIsolatedTestCase(String string) {
+		super( string );
+	}
+
+	protected void setUp() throws Exception {
+		parentLoader = Thread.currentThread().getContextClassLoader();
+		isolatedLoader = buildIsolatedClassLoader( parentLoader );
+		Thread.currentThread().setContextClassLoader( isolatedLoader );
+		super.setUp();
+	}
+
+	protected void tearDown() throws Exception {
+		super.tearDown();
+		Thread.currentThread().setContextClassLoader( parentLoader );
+		releaseIsolatedClassLoader( isolatedLoader );
+		parentLoader = null;
+		isolatedLoader = null;
+	}
+
+	protected abstract ClassLoader buildIsolatedClassLoader(ClassLoader parent);
+
+	protected abstract void releaseIsolatedClassLoader(ClassLoader isolatedLoader);
+}

Added: trunk/Hibernate3/test/org/hibernate/junit/SkipLog.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/SkipLog.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/SkipLog.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,13 @@
+package org.hibernate.junit;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Well-known-location lookup for the test-skip log...
+ *
+ * @author Steve Ebersole
+ */
+public class SkipLog {
+	public static final Log LOG = LogFactory.getLog( "org.hibernate.test.SKIPPED" );
+}

Added: trunk/Hibernate3/test/org/hibernate/junit/TestSuiteVisitor.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/TestSuiteVisitor.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/TestSuiteVisitor.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,42 @@
+package org.hibernate.junit;
+
+import java.util.Enumeration;
+
+import junit.framework.TestSuite;
+import junit.framework.Test;
+
+/**
+ * Handles walking a TestSuite hierarchy for recognition of individual tests.
+ *
+ * @author Steve Ebersole
+ */
+public class TestSuiteVisitor {
+
+	private final TestSuiteVisitor.Handler handler;
+
+	public TestSuiteVisitor(TestSuiteVisitor.Handler handler) {
+		this.handler = handler;
+	}
+
+	public void visit(TestSuite testSuite) {
+		handler.startingTestSuite( testSuite );
+		Enumeration tests = testSuite.tests();
+		while ( tests.hasMoreElements() ) {
+			Test test = ( Test ) tests.nextElement();
+			if ( test instanceof TestSuite ) {
+				visit( ( TestSuite ) test );
+			}
+			else {
+				handler.handleTestCase( test );
+			}
+		}
+		handler.completedTestSuite( testSuite );
+	}
+
+	public static interface Handler {
+		public void handleTestCase(Test test);
+		public void startingTestSuite(TestSuite suite);
+		public void completedTestSuite(TestSuite suite);
+	}
+
+}

Added: trunk/Hibernate3/test/org/hibernate/junit/UnitTestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/UnitTestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/UnitTestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,84 @@
+package org.hibernate.junit;
+
+import java.util.Iterator;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import junit.framework.AssertionFailedError;
+
+
+/**
+ * A basic JUnit {@link junit.framework.TestCase} subclass for
+ * adding some Hibernate specific behavior and functionality.
+ *
+ * @author Steve Ebersole
+ */
+public abstract class UnitTestCase extends junit.framework.TestCase {
+
+	private static final Log log = LogFactory.getLog( UnitTestCase.class );
+
+	public UnitTestCase(String string) {
+		super( string );
+	}
+
+	/**
+	 * runBare overridden in order to apply FailureExpected validations
+	 * as well as start/complete logging
+	 *
+	 * @throws Throwable
+	 */
+	public void runBare() throws Throwable {
+		final boolean doValidate = getName().endsWith( "FailureExpected" ) && Boolean.getBoolean( "hibernate.test.validatefailureexpected" );
+		try {
+			log.info( "Starting test [" + fullTestName() + "]" );
+			super.runBare();
+			if ( doValidate ) {
+				fail( "Test marked as FailureExpected, but did not fail!" );
+			}
+		}
+		catch( Throwable t ) {
+			if ( doValidate ) {
+				skipExpectedFailure( t );
+			}
+			else {
+				throw t;
+			}
+		}
+		finally {
+			log.info( "Completed test [" + fullTestName() + "]" );
+		}
+	}
+
+	protected void skipExpectedFailure(Throwable error) {
+		reportSkip( "ignoring *FailuredExpected methods", "Failed with: " + error.toString() );
+	}
+
+	// additional assertions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	public static void assertElementTypeAssignability(java.util.Collection collection, Class clazz) throws AssertionFailedError {
+		Iterator itr = collection.iterator();
+		while ( itr.hasNext() ) {
+			assertClassAssignability( itr.next().getClass(), clazz );
+		}
+	}
+
+	public static void assertClassAssignability(Class source, Class target) throws AssertionFailedError {
+		if ( !target.isAssignableFrom( source ) ) {
+			throw new AssertionFailedError(
+			        "Classes were not assignment-compatible : source<" + source.getName() +
+			        "> target<" + target.getName() + ">"
+			);
+		}
+	}
+
+
+	// test skipping ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	public String fullTestName() {
+		return this.getClass().getName() + "#" + this.getName();
+	}
+
+	protected void reportSkip(String reason, String testDescription) {
+		SkipLog.LOG.warn( "*** skipping [" + fullTestName() + "] - " + testDescription + " : " + reason, new Exception()  );
+	}
+}

Added: trunk/Hibernate3/test/org/hibernate/junit/functional/DatabaseSpecificFunctionalTestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/functional/DatabaseSpecificFunctionalTestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/functional/DatabaseSpecificFunctionalTestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,27 @@
+package org.hibernate.junit.functional;
+
+import org.hibernate.junit.SkipLog;
+
+/**
+ * {@inheritDoc}
+ *
+ * @author Steve Ebersole
+ */
+public abstract class DatabaseSpecificFunctionalTestCase extends FunctionalTestCase {
+	public DatabaseSpecificFunctionalTestCase(String string) {
+		super( string );
+	}
+
+	protected void runTest() throws Throwable {
+		// Note: this protection comes into play when running
+		// tests individually.  The suite as a whole is already
+		// "protected" by the fact that these tests are actually
+		// filtered out of the suite
+		if ( appliesTo( getDialect() ) ) {
+			super.runTest();
+		}
+		else {
+			SkipLog.LOG.warn( "skipping database-specific test [" + fullTestName() + "] for dialect [" + getDialect().getClass().getName() + "]" );
+		}
+	}
+}

Added: trunk/Hibernate3/test/org/hibernate/junit/functional/ExecutionEnvironment.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/functional/ExecutionEnvironment.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/functional/ExecutionEnvironment.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,165 @@
+package org.hibernate.junit.functional;
+
+import java.util.Iterator;
+import java.sql.Blob;
+import java.sql.Clob;
+
+import org.hibernate.dialect.Dialect;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.cfg.Mappings;
+import org.hibernate.SessionFactory;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.Property;
+import org.hibernate.mapping.SimpleValue;
+import org.hibernate.mapping.Collection;
+
+/**
+ * {@inheritDoc}
+ *
+ * @author Steve Ebersole
+ */
+public class ExecutionEnvironment {
+
+	public static final Dialect DIALECT = Dialect.getDialect();
+
+	private final ExecutionEnvironment.Settings settings;
+
+	private Configuration configuration;
+	private SessionFactory sessionFactory;
+	private boolean allowRebuild;
+
+	public ExecutionEnvironment(ExecutionEnvironment.Settings settings) {
+		this.settings = settings;
+	}
+
+	public boolean isAllowRebuild() {
+		return allowRebuild;
+	}
+
+	public void setAllowRebuild(boolean allowRebuild) {
+		this.allowRebuild = allowRebuild;
+	}
+
+	public Dialect getDialect() {
+		return DIALECT;
+	}
+
+	public Configuration getConfiguration() {
+		return configuration;
+	}
+
+	public SessionFactory getSessionFactory() {
+		return sessionFactory;
+	}
+
+	public void initialize() {
+		if ( sessionFactory != null ) {
+			throw new IllegalStateException( "attempt to initialize already initialized ExecutionEnvironment" );
+		}
+		if ( ! settings.appliesTo( getDialect() ) ) {
+			return;
+		}
+
+		Configuration configuration = new Configuration();
+		configuration.setProperty( Environment.CACHE_PROVIDER, "org.hibernate.cache.HashtableCacheProvider" );
+
+		settings.configure( configuration );
+
+		applyMappings( configuration );
+		applyCacheSettings( configuration );
+
+
+		if ( settings.createSchema() ) {
+			configuration.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
+		}
+
+		// make sure we use the same dialect...
+		configuration.setProperty( Environment.DIALECT, getDialect().getClass().getName() );
+
+		configuration.buildMappings();
+		settings.afterConfigurationBuilt( configuration.createMappings(), getDialect() );
+
+		SessionFactory sessionFactory = configuration.buildSessionFactory();
+		this.configuration = configuration;
+		this.sessionFactory = sessionFactory;
+
+		settings.afterSessionFactoryBuilt();
+	}
+
+	private void applyMappings(Configuration configuration) {
+		String[] mappings = settings.getMappings();
+		for ( int i = 0; i < mappings.length; i++ ) {
+			configuration.addResource( settings.getBaseForMappings() + mappings[i], ExecutionEnvironment.class.getClassLoader() );
+		}
+	}
+
+	private void applyCacheSettings(Configuration configuration) {
+		if ( settings.getCacheConcurrencyStrategy() != null ) {
+			Iterator iter = configuration.getClassMappings();
+			while ( iter.hasNext() ) {
+				PersistentClass clazz = (PersistentClass) iter.next();
+				Iterator props = clazz.getPropertyClosureIterator();
+				boolean hasLob = false;
+				while ( props.hasNext() ) {
+					Property prop = (Property) props.next();
+					if ( prop.getValue().isSimpleValue() ) {
+						String type = ( ( SimpleValue ) prop.getValue() ).getTypeName();
+						if ( "blob".equals(type) || "clob".equals(type) ) {
+							hasLob = true;
+						}
+						if ( Blob.class.getName().equals(type) || Clob.class.getName().equals(type) ) {
+							hasLob = true;
+						}
+					}
+				}
+				if ( !hasLob && !clazz.isInherited() && settings.overrideCacheStrategy() ) {
+					configuration.setCacheConcurrencyStrategy( clazz.getEntityName(), settings.getCacheConcurrencyStrategy() );
+				}
+			}
+			iter = configuration.getCollectionMappings();
+			while ( iter.hasNext() ) {
+				Collection coll = (Collection) iter.next();
+				configuration.setCollectionCacheConcurrencyStrategy( coll.getRole(), settings.getCacheConcurrencyStrategy() );
+			}
+		}
+	}
+
+	protected void afterSessionFactoryBuilt() {
+		// for subclasses to override in order to perform extra "stuff" only
+		// when SF (re)built...
+	}
+
+	public void rebuild() {
+		if ( !allowRebuild ) {
+			return;
+		}
+		if ( sessionFactory != null ) {
+			sessionFactory.close();
+			sessionFactory = null;
+		}
+		sessionFactory = configuration.buildSessionFactory();
+		afterSessionFactoryBuilt();
+	}
+
+	public void complete() {
+		if ( sessionFactory != null ) {
+			sessionFactory.close();
+			sessionFactory = null;
+		}
+		configuration = null;
+	}
+
+	public static interface Settings {
+		public String[] getMappings();
+		public String getBaseForMappings();
+		public boolean createSchema();
+		public boolean recreateSchemaAfterFailure();
+		public void configure(Configuration cfg);
+		public boolean overrideCacheStrategy();
+		public String getCacheConcurrencyStrategy();
+		public void afterSessionFactoryBuilt();
+		public void afterConfigurationBuilt(Mappings mappings, Dialect dialect);
+		public boolean appliesTo(Dialect dialect);
+	}
+}

Added: trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,504 @@
+package org.hibernate.junit.functional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Mappings;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.dialect.DB2Dialect;
+import org.hibernate.dialect.DerbyDialect;
+import org.hibernate.SessionFactory;
+import org.hibernate.HibernateException;
+import org.hibernate.Interceptor;
+import org.hibernate.Session;
+import org.hibernate.junit.UnitTestCase;
+import org.hibernate.engine.SessionFactoryImplementor;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Most of the Hibernate test suite in fact is a series of functional tests, not
+ * unit tests.  Here is a base class for these functional tests.
+ *
+ * @author Steve Ebersole
+ */
+public abstract class FunctionalTestCase extends UnitTestCase implements ExecutionEnvironment.Settings {
+
+	private static final Log log = LogFactory.getLog( FunctionalTestCase.class );
+
+	private ExecutionEnvironment environment;
+	private boolean isEnvironmentLocallyManaged;
+
+	private org.hibernate.classic.Session session;
+
+	public FunctionalTestCase(String string) {
+		super( string );
+	}
+
+	public ExecutionEnvironment getEnvironment() {
+		return environment;
+	}
+
+	public void setEnvironment(ExecutionEnvironment environment) {
+		this.environment = environment;
+	}
+
+	protected void prepareTest() throws Exception {
+	}
+
+	protected void cleanupTest() throws Exception {
+	}
+
+	// JUnit hooks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	/**
+	 * Override {@link junit.framework.TestCase#setUp()} to check if we need
+	 * to build a locally managed execution environment.
+	 *
+	 * @throws Exception
+	 */
+	protected final void setUp() throws Exception {
+		if ( environment == null ) {
+			log.info( "Building locally managed execution env" );
+			isEnvironmentLocallyManaged = true;
+			environment = new ExecutionEnvironment( this );
+			environment.initialize();
+		}
+		prepareTest();
+	}
+
+	/**
+	 * Override {@link junit.framework.TestCase#tearDown()} to tear down
+	 * the execution environment if it is locally managed.
+	 *
+	 * @throws Exception
+	 */
+	protected final void tearDown() throws Exception {
+		cleanupTest();
+		if ( isEnvironmentLocallyManaged ) {
+			log.info( "Destroying locally managed execution env" );
+			environment.complete();
+			environment = null;
+		}
+	}
+
+	/**
+	 * runTest is overridden in order to apply session closure assertions.
+	 *
+	 * @throws Throwable
+	 */
+	protected void runTest() throws Throwable {
+		final boolean stats = sfi().getStatistics().isStatisticsEnabled();
+		try {
+			if ( stats ) {
+				sfi().getStatistics().clear();
+			}
+
+			super.runTest();
+
+			if ( stats ) {
+				sfi().getStatistics().logSummary();
+			}
+
+			if ( session != null && session.isOpen() ) {
+				if ( session.isConnected() ) {
+					session.connection().rollback();
+				}
+				session.close();
+				session = null;
+				fail( "unclosed session" );
+			}
+			else {
+				session = null;
+			}
+			assertAllDataRemoved();
+		}
+		catch ( Throwable e ) {
+			try {
+				if ( session != null && session.isOpen() ) {
+					if ( session.isConnected() ) {
+						session.connection().rollback();
+					}
+					session.close();
+				}
+			}
+			catch ( Exception ignore ) {
+			}
+			try {
+				if ( recreateSchemaAfterFailure() && environment != null ) {
+					environment.rebuild();
+				}
+			}
+			catch ( Exception ignore ) {
+			}
+			throw e;
+		}
+	}
+
+	protected void assertAllDataRemoved() {
+		if ( !createSchema() ) {
+			return; // no tables were created...
+		}
+		if ( !Boolean.getBoolean( "hibernate.test.validateDataCleanup" ) ) {
+			return;
+		}
+
+		Session tmpSession = getSessions().openSession();
+		try {
+			List list = tmpSession.createQuery( "select o from java.lang.Object o" ).list();
+
+			Map items = new HashMap();
+			if ( !list.isEmpty() ) {
+				for ( Iterator iter = list.iterator(); iter.hasNext(); ) {
+					Object element = iter.next();
+					Integer l = ( Integer ) items.get( tmpSession.getEntityName( element ) );
+					if ( l == null ) {
+						l = new Integer( 0 );
+					}
+					l = new Integer( l.intValue() + 1 );
+					items.put( tmpSession.getEntityName( element ), l );
+					System.out.println( "Data left: " + element );
+				}
+				fail( "Data is left in the database: " + items.toString() );
+			}
+		}
+		finally {
+			try {
+				tmpSession.close();
+			}
+			catch( Throwable t ) {
+				// intentionally empty
+			}
+		}
+	}
+
+	protected void skipExpectedFailure(Throwable error) {
+		super.skipExpectedFailure( error );
+		try {
+			if ( recreateSchemaAfterFailure() && environment != null ) {
+				environment.rebuild();
+			}
+		}
+		catch ( Exception ignore ) {
+		}
+	}
+
+	// ExecutionEnvironment.Settings implementation ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	public String getBaseForMappings() {
+		return "org/hibernate/test/";
+	}
+
+	public boolean createSchema() {
+		return true;
+	}
+
+	public boolean recreateSchemaAfterFailure() {
+		return true;
+	}
+
+	public void configure(Configuration cfg) {
+	}
+
+	public boolean overrideCacheStrategy() {
+		return true;
+	}
+
+	public String getCacheConcurrencyStrategy() {
+		return "nonstrict-read-write";
+	}
+
+	public void afterSessionFactoryBuilt() {
+	}
+
+	public void afterConfigurationBuilt(Mappings mappings, Dialect dialect) {
+	}
+
+	/**
+	 * Intended to indicate that this test class as a whole is intended for
+	 * a dialect or series of dialects.  Skips here (appliesTo = false) therefore
+	 * simply indicate that the given tests target a particular feature of the
+	 * checked database and none of the tests on this class should be run for the
+	 * checked dialect.
+	 *
+	 * @param dialect The dialect to be checked.
+	 * @return False if the test class as a whole is specifically targetting
+	 * a dialect (or series of dialects) other than the indicated dialect
+	 * and the test should therefore be skipped in its entirety;
+	 * true otherwise.
+	 */
+	public boolean appliesTo(Dialect dialect) {
+		return true;
+	}
+
+
+	// methods for subclasses to access environment ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+	/**
+	 * Get the factory for this test environment.
+	 *
+	 * @return The factory.
+	 */
+	protected SessionFactory getSessions() {
+		return environment.getSessionFactory();
+	}
+
+	/**
+	 * Get the factory for this test environment, casted to {@link org.hibernate.engine.SessionFactoryImplementor}.
+	 * <p/>
+	 * Shorthand for ( {@link org.hibernate.engine.SessionFactoryImplementor} ) {@link #getSessions()}...
+	 *
+	 * @return The factory
+	 */
+	protected SessionFactoryImplementor sfi() {
+		return ( SessionFactoryImplementor ) getSessions();
+	}
+
+	protected Dialect getDialect() {
+		return ExecutionEnvironment.DIALECT;
+	}
+
+	protected Configuration getCfg() {
+		return environment.getConfiguration();
+	}
+
+	public org.hibernate.classic.Session openSession() throws HibernateException {
+		session = getSessions().openSession();
+		return session;
+	}
+
+	public org.hibernate.classic.Session openSession(Interceptor interceptor) throws HibernateException {
+		session = getSessions().openSession(interceptor);
+		return session;
+	}
+
+
+
+
+	/**
+	 * Is connection at least read committed?
+	 * <p/>
+	 * Not, that this skip check relies on the JDBC driver reporting
+	 * the true isolation level correctly.  HSQLDB, for example, will
+	 * report whatever you specify as the isolation
+	 * (Connection.setTransationIsolation()), even though it only supports
+	 * read-uncommitted.
+	 *
+	 * @param scenario text description of the scenario being tested.
+	 * @return true if read-committed isolation is maintained.
+	 */
+	protected boolean readCommittedIsolationMaintained(String scenario) {
+		int isolation = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED;
+		Session testSession = null;
+		try {
+			testSession = openSession();
+			isolation = testSession.connection().getTransactionIsolation();
+		}
+		catch( Throwable ignore ) {
+		}
+		finally {
+			if ( testSession != null ) {
+				try {
+					testSession.close();
+				}
+				catch( Throwable ignore ) {
+				}
+			}
+		}
+		if ( isolation < java.sql.Connection.TRANSACTION_READ_COMMITTED ) {
+			reportSkip( "environment does not support at least read committed isolation", scenario );
+			return false;
+		}
+		else {
+			return true;
+		}
+	}
+
+	/**
+	 * Does the db/dialect support using a column's physical name in the order-by clause
+	 * even after it has been aliased in the select clause.  This is not actually
+	 * required by the SQL spec, although virtually ever DB in the world supports this
+	 * (the most glaring omission here being IBM-variant DBs ala DB2 and Derby).
+	 *
+	 * @param testDescription description of the scenario being tested.
+	 * @return true if is allowed
+	 */
+	protected boolean allowsPhysicalColumnNameInOrderby(String testDescription) {
+		if ( DB2Dialect.class.isInstance( getDialect() ) ) {
+			// https://issues.apache.org/jira/browse/DERBY-1624
+			reportSkip( "Dialect does not support physical column name in order-by clause after it is aliased", testDescription );
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Does the db/dialect support using a column's physical name in the having clause
+	 * even after it has been aliased in the select/group-by clause.  This is not actually
+	 * required by the SQL spec, although virtually ever DB in the world supports this.
+	 *
+	 * @param testDescription description of the scenario being tested.
+	 * @return true if is allowed
+	 */
+	protected boolean allowsPhysicalColumnNameInHaving(String testDescription) {
+		// I only *know* of this being a limitation on Derby, although I highly suspect
+		// it is a limitation on any IBM/DB2 variant
+		if ( DerbyDialect.class.isInstance( getDialect() ) ) {
+			// https://issues.apache.org/jira/browse/DERBY-1624
+			reportSkip( "Dialect does not support physical column name in having clause after it is aliased", testDescription );
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Does the db/dialect support empty lists in the IN operator?
+	 * <p/>
+	 * For example, is "... a.b IN () ..." supported?
+	 *
+	 * @param testDescription description of the scenario being tested.
+	 * @return true if is allowed
+	 */
+	protected boolean dialectSupportsEmptyInList(String testDescription) {
+		if ( ! getDialect().supportsEmptyInList() ) {
+			reportSkip( "Dialect does not support SQL empty in list : x in ()", testDescription );
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Is the db/dialect sensitive in terms of string comparisons?
+	 * @param testDescription description of the scenario being tested.
+	 * @return true if sensitive
+	 */
+	protected boolean dialectIsCaseSensitive(String testDescription) {
+		if ( getDialect().areStringComparisonsCaseInsensitive() ) {
+			reportSkip( "Dialect is case sensitive. ", testDescription );
+			return true;
+		}
+		return false;
+	}
+
+	protected boolean supportsRowValueConstructorSyntaxInInList() {
+		if ( ! getDialect().supportsRowValueConstructorSyntaxInInList() ) {
+			reportSkip( "Dialect does not support 'tuple' syntax as part of an IN value list", "query support" );
+			return false;
+		}
+		return true;
+	}
+
+	protected boolean supportsResultSetPositionQueryMethodsOnForwardOnlyCursor() {
+		if ( ! getDialect().supportsResultSetPositionQueryMethodsOnForwardOnlyCursor() ) {
+			reportSkip( "Driver does not support 'position query' methods on forward-only cursors", "query support" );
+			return false;
+		}
+		return true;
+	}
+
+	protected boolean supportsCircularCascadeDelete() {
+		if ( ! getDialect().supportsCircularCascadeDeleteConstraints() ) {
+			reportSkip( "db/dialect does not support 'circular' cascade delete constraints", "cascade delete constraint support" );
+			return false;
+		}
+		return true;
+	}
+
+	protected boolean supportsSubselectOnLeftSideIn() {
+		if ( ! getDialect().supportsSubselectAsInPredicateLHS() ) {
+			reportSkip( "Database does not support (<subselect>) in ( ... ) ", "query support" );
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Expected LOB usage pattern is such that I can perform an insert
+	 * via prepared statement with a parameter binding for a LOB value
+	 * without crazy casting to JDBC driver implementation-specific classes...
+	 * <p/>
+	 * Part of the trickiness here is the fact that this is largely
+	 * driver dependent.  For Oracle, which is notoriously bad with
+	 * LOB support in their drivers actually does a pretty good job with
+	 * LOB support as of the 10.2.x versions of their drivers...
+	 *
+	 * @return True if expected usage pattern is support; false otherwise.
+	 */
+	protected boolean supportsExpectedLobUsagePattern() {
+		if ( ! getDialect().supportsExpectedLobUsagePattern() ) {
+			reportSkip( "database/driver does not support expected LOB usage pattern", "LOB support" );
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Does the current dialect support propogating changes to LOB
+	 * values back to the database?  Talking about mutating the
+	 * underlying value as opposed to supplying a new
+	 * LOB instance...
+	 *
+	 * @return True if the changes are propogated back to the
+	 * database; false otherwise.
+	 */
+	protected boolean supportsLobValueChangePropogation() {
+		if ( ! getDialect().supportsLobValueChangePropogation() ) {
+			reportSkip( "database/driver does not support propogating LOB value change back to database", "LOB support" );
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * Is it supported to materialize a LOB locator outside the transaction in
+	 * which it was created?
+	 * <p/>
+	 * Again, part of the trickiness here is the fact that this is largely
+	 * driver dependent.
+	 * <p/>
+	 * NOTE: all database I have tested which {@link #supportsExpectedLobUsagePattern()}
+	 * also support the ability to materialize a LOB outside the owning transaction...
+	 *
+	 * @return True if unbounded materialization is supported; false otherwise.
+	 */
+	protected boolean supportsUnboundedLobLocatorMaterialization() {
+		if ( !getDialect().supportsUnboundedLobLocatorMaterialization() ) {
+			reportSkip( "database/driver does not support materializing a LOB locator outside the 'owning' transaction", "LOB support" );
+			return false;
+		}
+		return true;
+	}
+
+	protected boolean supportsSubqueryOnMutatingTable() {
+		if ( !getDialect().supportsSubqueryOnMutatingTable() ) {
+			reportSkip( "database/driver does not support referencing mutating table in subquery", "bulk DML support" );
+			return false;
+		}
+		return true;
+	}
+
+	protected boolean dialectIs(Class dialectClass) {
+		return dialectClass.isInstance( getDialect() );
+	}
+
+	protected boolean dialectIsOneOf(Class[] dialectClasses) {
+		for ( int i = 0; i < dialectClasses.length; i++ ) {
+			if ( dialectClasses[i].isInstance( getDialect() ) ) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	protected boolean dialectIsNot(Class dialectClass) {
+		return ! dialectIs( dialectClass );
+	}
+
+	protected boolean dialectIsNot(Class[] dialectClasses) {
+		return ! dialectIsOneOf( dialectClasses );
+	}
+}

Added: trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestClassTestSuite.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestClassTestSuite.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/junit/functional/FunctionalTestClassTestSuite.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -0,0 +1,117 @@
+package org.hibernate.junit.functional;
+
+import junit.framework.TestSuite;
+import junit.framework.Test;
+import junit.framework.TestResult;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * A specialized {@link junit.framework.TestSuite} implementation intended
+ * for use as an aggregate for a single test class specifically for the purpose
+ * of maintaing a single {@link org.hibernate.SessionFactory} for executings all
+ * tests defined as part of the given functional test class.
+ *
+ * @author Steve Ebersole
+ */
+public class FunctionalTestClassTestSuite extends TestSuite {
+
+	private static final Log log = LogFactory.getLog( FunctionalTestClassTestSuite.class );
+
+	private ExecutionEnvironment.Settings settings;
+	private ExecutionEnvironment environment;
+	private Throwable environmentSetupError;
+	private int testCount;
+	private int testPosition;
+
+	public FunctionalTestClassTestSuite(Class testClass, String name) {
+		super( testClass, name );
+	}
+
+	public FunctionalTestClassTestSuite(Class testClass) {
+		this( testClass, testClass.getName() );
+	}
+
+	/**
+	 * Constructor form used during {@link org.hibernate.test.AllTests} filtering...
+	 * 
+	 * @param name The name.
+	 */
+	private FunctionalTestClassTestSuite(String name) {
+		super( name );
+	}
+
+	public void addTest(Test test) {
+		if ( settings == null ) {
+			settings = ( ExecutionEnvironment.Settings ) test;
+		}
+		// todo : we could also centralize the skipping of "database specific" tests here
+		// instead of duplicating this notion in AllTests and DatabaseSpecificFunctionalTestCase.
+		testCount++;
+		super.addTest( test );
+	}
+
+	public void run(TestResult testResult) {
+		if ( testCount == 0 ) {
+			// might be zero if database-specific...
+			return;
+		}
+		try {
+			log.info( "Starting test-suite [" + getName() + "]" );
+			try {
+				setUp();
+			}
+			catch( Throwable t ) {
+				environmentSetupError = t;
+			}
+			testPosition = 0;
+			super.run( testResult );
+		}
+		finally {
+			try {
+				tearDown();
+			}
+			catch( Throwable ignore ) {
+			}
+			log.info( "Completed test-suite [" + getName() + "]" );
+		}
+	}
+
+	public void runTest(Test test, TestResult testResult) {
+		if ( environmentSetupError != null ) {
+			testResult.startTest( test );
+			testResult.addError( test, environmentSetupError );
+			testResult.endTest( test );
+			return;
+		}
+		FunctionalTestCase functionalTest = ( ( FunctionalTestCase ) test );
+		try {
+			if ( ++testPosition < testCount ) {
+				// disallow rebuilding the schema because this is the last test
+				// in this suite, thus it is about to get dropped immediately
+				// afterwards anyway...
+				environment.setAllowRebuild( true );
+			}
+			functionalTest.setEnvironment( environment );
+			super.runTest( functionalTest, testResult );
+		}
+		finally {
+			functionalTest.setEnvironment( null );
+		}
+	}
+
+	protected void setUp() {
+		log.info( "Building aggregated execution environment" );
+		environment = new ExecutionEnvironment( settings );
+		environment.initialize();
+	}
+
+	protected void tearDown() {
+		if ( environment != null ) {
+			log.info( "Destroying aggregated execution environment" );
+			environment.complete();
+			this.environment = null;
+		}
+	}
+}

Deleted: trunk/Hibernate3/test/org/hibernate/test/AbstractClassLoaderIsolatedTestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/AbstractClassLoaderIsolatedTestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/AbstractClassLoaderIsolatedTestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,32 +0,0 @@
-package org.hibernate.test;
-
-import junit.framework.TestCase;
-
-/**
- * A specialized TestCase for running tests in an isolated class-loader
- *
- * @author Steve Ebersole
- */
-public abstract class AbstractClassLoaderIsolatedTestCase extends TestCase {
-	private ClassLoader parentLoader;
-	private ClassLoader isolatedLoader;
-
-	protected void setUp() throws Exception {
-		parentLoader = Thread.currentThread().getContextClassLoader();
-		isolatedLoader = buildIsolatedClassLoader( parentLoader );
-		Thread.currentThread().setContextClassLoader( isolatedLoader );
-		super.setUp();
-	}
-
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		Thread.currentThread().setContextClassLoader( parentLoader );
-		releaseIsolatedClassLoader( isolatedLoader );
-		parentLoader = null;
-		isolatedLoader = null;
-	}
-
-	protected abstract ClassLoader buildIsolatedClassLoader(ClassLoader parent);
-
-	protected abstract void releaseIsolatedClassLoader(ClassLoader isolatedLoader);
-}

Modified: trunk/Hibernate3/test/org/hibernate/test/AllTests.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/AllTests.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/AllTests.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,11 +1,14 @@
 //$Id$
 package org.hibernate.test;
 
+import java.lang.reflect.Constructor;
+
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
 
 import org.hibernate.dialect.Dialect;
+import org.hibernate.junit.TestSuiteVisitor;
 import org.hibernate.test.abstractembeddedcomponents.cid.AbstractCompositeIdTest;
 import org.hibernate.test.abstractembeddedcomponents.propertyref.AbstractComponentPropertyRefTest;
 import org.hibernate.test.any.AnyTypeTest;
@@ -26,25 +29,19 @@
 import org.hibernate.test.criteria.CriteriaQueryTest;
 import org.hibernate.test.cuk.CompositePropertyRefTest;
 import org.hibernate.test.cut.CompositeUserTypeTest;
+import org.hibernate.test.deletetransient.DeleteTransientEntityTest;
 import org.hibernate.test.dialect.cache.SQLFunctionsInterSystemsTest;
 import org.hibernate.test.discriminator.DiscriminatorTest;
-import org.hibernate.test.dom4j.Dom4jAccessorTest;
-import org.hibernate.test.dom4j.Dom4jManyToOneTest;
-import org.hibernate.test.dom4j.Dom4jTest;
-import org.hibernate.test.dynamic.DynamicClassTest;
 import org.hibernate.test.dynamicentity.interceptor.InterceptorDynamicEntityTest;
 import org.hibernate.test.dynamicentity.tuplizer.TuplizerDynamicEntityTest;
 import org.hibernate.test.ecid.EmbeddedCompositeIdTest;
-import org.hibernate.test.entity.MultiRepresentationTest;
+import org.hibernate.test.entitymode.EntityModeSuite;
 import org.hibernate.test.exception.SQLExceptionConversionTest;
 import org.hibernate.test.extralazy.ExtraLazyTest;
 import org.hibernate.test.filter.DynamicFilterTest;
 import org.hibernate.test.formulajoin.FormulaJoinTest;
-import org.hibernate.test.generated.TimestampGeneratedValuesWithCachingTest;
-import org.hibernate.test.generated.TriggerGeneratedValuesWithCachingTest;
-import org.hibernate.test.generated.TriggerGeneratedValuesWithoutCachingTest;
-import org.hibernate.test.generatedkeys.select.SelectGeneratorTest;
-import org.hibernate.test.generatedkeys.seqidentity.SequenceIdentityTest;
+import org.hibernate.test.generated.GeneratedPropertySuite;
+import org.hibernate.test.generatedkeys.GeneratedKeysSuite;
 import org.hibernate.test.hql.HQLSuite;
 import org.hibernate.test.id.MultipleHiLoPerTableGeneratorTest;
 import org.hibernate.test.idbag.IdBagTest;
@@ -69,6 +66,7 @@
 import org.hibernate.test.legacy.CacheTest;
 import org.hibernate.test.legacy.ComponentNotNullTest;
 import org.hibernate.test.legacy.ConfigurationPerformanceTest;
+import org.hibernate.test.legacy.CustomSQLTest;
 import org.hibernate.test.legacy.FooBarTest;
 import org.hibernate.test.legacy.FumTest;
 import org.hibernate.test.legacy.IJ2Test;
@@ -95,13 +93,11 @@
 import org.hibernate.test.naturalid.NaturalIdTest;
 import org.hibernate.test.ondelete.OnDeleteTest;
 import org.hibernate.test.onetomany.OneToManyTest;
-import org.hibernate.test.onetoone.joined.OneToOneTest;
-import org.hibernate.test.onetooneformula.OneToOneFormulaTest;
+import org.hibernate.test.onetoone.OneToOneSuite;
 import org.hibernate.test.ops.OpsSuite;
 import org.hibernate.test.optlock.OptimisticLockTest;
 import org.hibernate.test.ordered.OrderByTest;
-import org.hibernate.test.orphan.OrphanIdRollbackTest;
-import org.hibernate.test.orphan.OrphanTest;
+import org.hibernate.test.orphan.OrphanSuite;
 import org.hibernate.test.pagination.PaginationTest;
 import org.hibernate.test.propertyref.PropertyRefSuite;
 import org.hibernate.test.proxy.ProxyTest;
@@ -131,6 +127,7 @@
 import org.hibernate.test.version.db.DbVersionTest;
 import org.hibernate.test.version.sybase.SybaseTimestampVersioningTest;
 import org.hibernate.test.where.WhereTest;
+import org.hibernate.test.usercollection.UserCollectionTypeTest;
 
 /**
  * @author Gavin King
@@ -196,24 +193,19 @@
 			suite.addTest( CompositePropertyRefTest.suite() );
 			suite.addTest( FormulaJoinTest.suite() );
 			suite.addTest( DiscriminatorTest.suite() );
-			suite.addTest( DynamicClassTest.suite() );
+			suite.addTest( EntityModeSuite.suite() );
 			suite.addTest( DynamicFilterTest.suite() );
 			suite.addTest( InterfaceProxyTest.suite() );
-			suite.addTest( OrphanTest.suite() );
-			suite.addTest( OrphanIdRollbackTest.suite() );
+			suite.addTest( OrphanSuite.suite() );
 			suite.addTest( JoinTest.suite() );
 			suite.addTest( JoinedSubclassTest.suite() );
 			suite.addTest( org.hibernate.test.unionsubclass2.UnionSubclassTest.suite() );
 			suite.addTest( MixedTest.suite() );
 			suite.addTest( OneToManyTest.suite() );
 			suite.addTest( ManyToManyTest.suite() );
-			suite.addTest( OneToOneFormulaTest.suite() );
-			suite.addTest( OneToOneTest.suite() );
-			suite.addTest( org.hibernate.test.onetoone.singletable.OneToOneTest.suite() );
-			suite.addTest( org.hibernate.test.onetoonelink.OneToOneTest.suite() );
+			suite.addTest( OneToOneSuite.suite() );
 			suite.addTest( OptimisticLockTest.suite() );
 			suite.addTest( PropertyRefSuite.suite() );
-			suite.addTest( org.hibernate.test.orphan.PropertyRefTest.suite() );
 			suite.addTest( NativeSqlSupportSuite.suite() );
 			suite.addTest( CriteriaQueryTest.suite() );
 			suite.addTest( SubselectTest.suite() );
@@ -231,10 +223,6 @@
 			suite.addTest( TypedManyToOneTest.suite() );
 			suite.addTest( CMTTest.suite() );
 			suite.addTest( MultipleHiLoPerTableGeneratorTest.suite() );
-			suite.addTest( MultiRepresentationTest.suite() );
-			suite.addTest( Dom4jAccessorTest.suite() );
-			suite.addTest( Dom4jTest.suite() );
-			suite.addTest( Dom4jManyToOneTest.suite() );
 			suite.addTest( UnionSubclassFilterTest.suite() );
 			suite.addTest( JoinedSubclassFilterTest.suite() );
 			suite.addTest( DiscrimSubclassFilterTest.suite() );
@@ -273,11 +261,8 @@
 			suite.addTest( JavassistInstrumentationTest.suite() );
 			suite.addTest( SybaseTimestampVersioningTest.suite() );
 			suite.addTest( DbVersionTest.suite() );
-			suite.addTest( TimestampGeneratedValuesWithCachingTest.suite() );
-			suite.addTest( TriggerGeneratedValuesWithCachingTest.suite() );
-			suite.addTest( TriggerGeneratedValuesWithoutCachingTest.suite() );
-			suite.addTest( SelectGeneratorTest.suite() );
-			suite.addTest( SequenceIdentityTest.suite() );
+			suite.addTest( GeneratedPropertySuite.suite() );
+			suite.addTest( GeneratedKeysSuite.suite() );
 			suite.addTest( InterceptorDynamicEntityTest.suite() );
 			suite.addTest( TuplizerDynamicEntityTest.suite() );
 			suite.addTest( BytecodeSuite.suite() );
@@ -289,6 +274,8 @@
 			suite.addTest( SQLFunctionsInterSystemsTest.suite() );
 			suite.addTest( LobSuite.suite() );
 			suite.addTest( IdentifierPropertyReferencesTest.suite() );
+			suite.addTest( DeleteTransientEntityTest.suite() );
+			suite.addTest( UserCollectionTypeTest.suite() );
 
 			return filter( suite );
 			//return suite;
@@ -335,6 +322,7 @@
 			suite.addTest( OneToOneCacheTest.suite() );
 			suite.addTest( NonReflectiveBinderTest.suite() );
 			suite.addTest( ConfigurationPerformanceTest.suite() ); // Added to ensure we can utilize the recommended performance tips ;)
+			suite.addTest( CustomSQLTest.suite() );
 			return filter( suite );
 //			return suite;
 		}
@@ -390,10 +378,7 @@
 		}
 
 		public void startingTestSuite(TestSuite suite) {
-			currentStackElement = new TestSuiteStackEntry(
-					new TestSuite( suite.getName() ),
-					currentStackElement
-			);
+			currentStackElement = new TestSuiteStackEntry( instantiateCopy( suite ), currentStackElement );
 			if ( topStackElement == null ) {
 				topStackElement = currentStackElement;
 			}
@@ -408,5 +393,19 @@
 		public TestSuite getFilteredTestSuite() {
 			return topStackElement.testSuite;
 		}
+
+		private static final Class[] EXPECTED_CTOR_SIG = new Class[] { String.class };
+
+		private TestSuite instantiateCopy(TestSuite suite) {
+			try {
+				Class testSuiteClass = suite.getClass();
+				Constructor ctor = testSuiteClass.getDeclaredConstructor( EXPECTED_CTOR_SIG );
+				ctor.setAccessible( true );
+				return ( TestSuite ) ctor.newInstance( new Object[]  { suite.getName() } );
+			}
+			catch ( Throwable t ) {
+				throw new RuntimeException( "Unable to build test suite copy [" + suite + "]", t );
+			}
+		}
 	}
 }
\ No newline at end of file

Deleted: trunk/Hibernate3/test/org/hibernate/test/DatabaseSpecificTestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/DatabaseSpecificTestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/DatabaseSpecificTestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,23 +0,0 @@
-package org.hibernate.test;
-
-/**
- * @author Steve Ebersole
- */
-public abstract class DatabaseSpecificTestCase extends TestCase {
-	public DatabaseSpecificTestCase(String name) {
-		super( name );
-	}
-
-	protected void runTest() throws Throwable {
-		// Note: this protection comes into play when running
-		// tests individually.  The suite as a whole is already
-		// "protected" by the fact that these tests are actually
-		// filtered out of the suite
-		if ( appliesTo( getDialect() ) ) {
-			super.runTest();
-		}
-		else {
-			SKIP_LOG.warn( "skipping database-specific test [" + fullTestName() + "] for dialect [" + getDialect().getClass().getName() + "]" );
-		}
-	}
-}

Modified: trunk/Hibernate3/test/org/hibernate/test/TestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/TestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/TestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -114,6 +114,9 @@
 	}
 
 	protected Dialect getDialect() {
+		if ( dialect == null ) {
+			dialect = Dialect.getDialect();
+		}
 		return dialect;
 	}
 

Modified: trunk/Hibernate3/test/org/hibernate/test/TestSelector.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/TestSelector.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/TestSelector.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,26 +1,28 @@
 package org.hibernate.test;
 
+import java.util.Set;
+import java.util.HashSet;
+import java.io.File;
+
 import org.apache.tools.ant.types.selectors.FileSelector;
 import org.apache.tools.ant.BuildException;
 
-import java.io.File;
-import java.util.Set;
-import java.util.HashSet;
+import org.hibernate.junit.TestSuiteVisitor;
 
-import junit.framework.TestSuite;
 import junit.framework.Test;
+import junit.framework.TestSuite;
 
 /**
  * A custom Ant FileSelector used to limit the tests run from the Ant
- * build script to only those defined in the {@link AllTests} suite.
+ * build script to only those defined in the {@link org.hibernate.test.AllTests} suite.
  * <p/>
- * {@link AllTests} is used/maintained by the developers to easily
+ * {@link org.hibernate.test.AllTests} is used/maintained by the developers to easily
  * run the test suite in all IDEs.  It represents all the tests
  * which should actually be run and included in test results.
- * 
+ *
  * @author Steve Ebersole
  */
-public class TestSelector extends junit.framework.TestCase implements FileSelector {
+public class TestSelector implements FileSelector {
 
 	private final Set allTestClassNames = new HashSet();
 
@@ -59,12 +61,4 @@
 		return file;
 	}
 
-
-	// unit tests ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-	public void testFileSelection() {
-		File file = new File( "" );
-		assertTrue( "valid test not selected", isSelected( file, "org/hibernate/test/hql/HQLTest.class", file ) );
-		assertFalse( "invalid test selected", isSelected( file, "hithere.class", file ) );
-	}
 }

Deleted: trunk/Hibernate3/test/org/hibernate/test/TestSuiteVisitor.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/TestSuiteVisitor.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/TestSuiteVisitor.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,42 +0,0 @@
-package org.hibernate.test;
-
-import junit.framework.TestSuite;
-import junit.framework.Test;
-
-import java.util.Enumeration;
-
-/**
- * Handles walking a TestSuite hierarchy for recognition of individual tests.
- * 
- * @author Steve Ebersole
- */
-public class TestSuiteVisitor {
-
-	private final Handler handler;
-
-	public TestSuiteVisitor(Handler handler) {
-		this.handler = handler;
-	}
-
-	public void visit(TestSuite testSuite) {
-		handler.startingTestSuite( testSuite );
-		Enumeration tests = testSuite.tests();
-		while ( tests.hasMoreElements() ) {
-			Test test = ( Test ) tests.nextElement();
-			if ( test instanceof TestSuite ) {
-				visit( ( TestSuite ) test );
-			}
-			else {
-				handler.handleTestCase( test );
-			}
-		}
-		handler.completedTestSuite( testSuite );
-	}
-
-	public static interface Handler {
-		public void handleTestCase(Test test);
-		public void startingTestSuite(TestSuite suite);
-		public void completedTestSuite(TestSuite suite);
-	}
-
-}

Modified: trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/cid/AbstractCompositeIdTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/cid/AbstractCompositeIdTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/cid/AbstractCompositeIdTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,24 +1,25 @@
 package org.hibernate.test.abstractembeddedcomponents.cid;
 
-import org.hibernate.test.TestCase;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 /**
  * @author Steve Ebersole
  */
-public class AbstractCompositeIdTest extends TestCase {
+public class AbstractCompositeIdTest extends FunctionalTestCase {
 	public AbstractCompositeIdTest(String x) {
 		super( x );
 	}
 
 	public static Test suite() {
-		return new TestSuite( AbstractCompositeIdTest.class );
+		return new FunctionalTestClassTestSuite( AbstractCompositeIdTest.class );
 	}
 
-	protected String[] getMappings() {
+	public String[] getMappings() {
 		return new String[] { "abstractembeddedcomponents/cid/Mappings.hbm.xml" };
 	}
 

Modified: trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/propertyref/AbstractComponentPropertyRefTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/propertyref/AbstractComponentPropertyRefTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/abstractembeddedcomponents/propertyref/AbstractComponentPropertyRefTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,24 +1,25 @@
 package org.hibernate.test.abstractembeddedcomponents.propertyref;
 
-import org.hibernate.test.TestCase;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 /**
  * @author Steve Ebersole
  */
-public class AbstractComponentPropertyRefTest extends TestCase {
+public class AbstractComponentPropertyRefTest extends FunctionalTestCase {
 	public AbstractComponentPropertyRefTest(String name) {
 		super( name );
 	}
 
 	public static Test suite() {
-		return new TestSuite( AbstractComponentPropertyRefTest.class );
+		return new FunctionalTestClassTestSuite( AbstractComponentPropertyRefTest.class );
 	}
 
-	protected String[] getMappings() {
+	public String[] getMappings() {
 		return new String[] { "abstractembeddedcomponents/propertyref/Mappings.hbm.xml" };
 	}
 

Modified: trunk/Hibernate3/test/org/hibernate/test/any/Address.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/any/Address.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/any/Address.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -12,7 +12,6 @@
 	private Long id;
 	private Set lines = new HashSet();
 
-
 	public Long getId() {
 		return id;
 	}

Modified: trunk/Hibernate3/test/org/hibernate/test/any/AnyTypeTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/any/AnyTypeTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/any/AnyTypeTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,31 +1,32 @@
 package org.hibernate.test.any;
 
-import org.hibernate.test.TestCase;
 import org.hibernate.Session;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+import org.hibernate.junit.functional.FunctionalTestCase;
+
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 /**
  * todo: describe AnyTypeTest
  *
  * @author Steve Ebersole
  */
-public class AnyTypeTest extends TestCase {
+public class AnyTypeTest extends FunctionalTestCase {
 	public AnyTypeTest(String name) {
 		super( name );
 	}
 
-	protected String[] getMappings() {
+	public String[] getMappings() {
 		return new String[] { "any/Person.hbm.xml" };
 	}
 
-	protected String getCacheConcurrencyStrategy() {
+	public String getCacheConcurrencyStrategy() {
 		// having second level cache causes a condition whereby the original test case would not fail...
 		return null;
 	}
 
 	public static Test suite() {
-		return new TestSuite( AnyTypeTest.class );
+		return new FunctionalTestClassTestSuite( AnyTypeTest.class );
 	}
 
 	/**

Modified: trunk/Hibernate3/test/org/hibernate/test/array/ArrayTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/array/ArrayTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/array/ArrayTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -2,17 +2,29 @@
 package org.hibernate.test.array;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 import org.hibernate.Session;
 import org.hibernate.Transaction;
-import org.hibernate.test.TestCase;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 
 /**
  * @author Emmanuel Bernard
  */
-public class ArrayTest extends TestCase {
-	
+public class ArrayTest extends FunctionalTestCase {
+
+	public ArrayTest(String x) {
+		super( x );
+	}
+
+	public String[] getMappings() {
+		return new String[] { "array/A.hbm.xml" };
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( ArrayTest.class );
+	}
+
 	public void testArrayJoinFetch() throws Exception {
 		Session s;
 		Transaction tx;
@@ -38,18 +50,4 @@
 		tx.commit();
 		s.close();
 	}
-	
-	public ArrayTest(String x) {
-		super( x );
-	}
-
-	public static Test suite() {
-		return new TestSuite( ArrayTest.class );
-	}
-
-	protected String[] getMappings() {
-		return new String[] {
-			"array/A.hbm.xml"
-		};
-	}
 }

Modified: trunk/Hibernate3/test/org/hibernate/test/ast/ASTIteratorTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/ast/ASTIteratorTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/ast/ASTIteratorTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -3,8 +3,9 @@
 
 import java.io.PrintWriter;
 
+import antlr.ASTFactory;
+import antlr.collections.AST;
 import junit.framework.Test;
-import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 import org.hibernate.hql.antlr.HqlTokenTypes;
@@ -13,14 +14,12 @@
 import org.hibernate.hql.ast.util.ASTParentsFirstIterator;
 import org.hibernate.hql.ast.util.ASTPrinter;
 import org.hibernate.hql.ast.util.ASTUtil;
+import org.hibernate.junit.UnitTestCase;
 
-import antlr.ASTFactory;
-import antlr.collections.AST;
-
 /**
  * Test ASTIterator.
  */
-public class ASTIteratorTest extends TestCase {
+public class ASTIteratorTest extends UnitTestCase {
 	private ASTFactory factory;
 
 	/**

Modified: trunk/Hibernate3/test/org/hibernate/test/ast/ASTUtilTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/ast/ASTUtilTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/ast/ASTUtilTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,19 +1,18 @@
 // $Id$
 package org.hibernate.test.ast;
 
+import antlr.ASTFactory;
+import antlr.collections.AST;
 import junit.framework.Test;
-import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 import org.hibernate.hql.ast.util.ASTUtil;
+import org.hibernate.junit.UnitTestCase;
 
-import antlr.ASTFactory;
-import antlr.collections.AST;
-
 /**
  * Unit test for ASTUtil.
  */
-public class ASTUtilTest extends TestCase {
+public class ASTUtilTest extends UnitTestCase {
 	private ASTFactory factory;
 
 	/**

Modified: trunk/Hibernate3/test/org/hibernate/test/batch/BatchTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/batch/BatchTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/batch/BatchTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -4,67 +4,78 @@
 import java.math.BigDecimal;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 import org.hibernate.CacheMode;
 import org.hibernate.ScrollMode;
 import org.hibernate.ScrollableResults;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 import org.hibernate.cfg.Configuration;
 import org.hibernate.cfg.Environment;
-import org.hibernate.test.TestCase;
 
 /**
  * This is how to do batch processing in Hibernate.
- * Remember to enable JDBC batch updates, or this 
+ * Remember to enable JDBC batch updates, or this
  * test will take a Very Long Time!
- * 
+ *
  * @author Gavin King
  */
-public class BatchTest extends TestCase {
-	
+public class BatchTest extends FunctionalTestCase {
+
 	public BatchTest(String str) {
-		super(str);
+		super( str );
 	}
-	
+
+	public String[] getMappings() {
+		return new String[] { "batch/DataPoint.hbm.xml" };
+	}
+
+	public String getCacheConcurrencyStrategy() {
+		return null;
+	}
+
+	public void configure(Configuration cfg) {
+		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "20" );
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( BatchTest.class );
+	}
+
 	public void testBatchInsertUpdate() {
-		
-		//remember to set hibernate.jdbc.batch_size=20
-		
 		long start = System.currentTimeMillis();
-		
-		final boolean flushInBatches = true;
 		final int N = 5000; //26 secs with batch flush, 26 without
 		//final int N = 100000; //53 secs with batch flush, OOME without
 		//final int N = 250000; //137 secs with batch flush, OOME without
-		
+
 		Session s = openSession();
-		s.setCacheMode(CacheMode.IGNORE);
-		Transaction t = s.beginTransaction();		
-		for ( int i=0; i<N; i++ ) {
+		s.setCacheMode( CacheMode.IGNORE );
+		Transaction t = s.beginTransaction();
+		for ( int i = 0; i < N; i++ ) {
 			DataPoint dp = new DataPoint();
-			dp.setX( new BigDecimal(i * 0.1d).setScale(19, BigDecimal.ROUND_DOWN) );
-			dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale(19, BigDecimal.ROUND_DOWN) );
-			s.save(dp);
-			if ( flushInBatches && i % 20 == 0 ) {
+			dp.setX( new BigDecimal( i * 0.1d ).setScale( 19, BigDecimal.ROUND_DOWN ) );
+			dp.setY( new BigDecimal( Math.cos( dp.getX().doubleValue() ) ).setScale( 19, BigDecimal.ROUND_DOWN ) );
+			s.save( dp );
+			if ( i % 20 == 0 ) {
 				s.flush();
 				s.clear();
 			}
 		}
 		t.commit();
 		s.close();
-		
+
 		s = openSession();
-		s.setCacheMode(CacheMode.IGNORE);
+		s.setCacheMode( CacheMode.IGNORE );
 		t = s.beginTransaction();
 		int i = 0;
-		ScrollableResults sr = s.createQuery("from DataPoint dp order by dp.x asc")
-				.scroll(ScrollMode.FORWARD_ONLY);
+		ScrollableResults sr = s.createQuery( "from DataPoint dp order by dp.x asc" )
+				.scroll( ScrollMode.FORWARD_ONLY );
 		while ( sr.next() ) {
-			DataPoint dp = (DataPoint) sr.get(0);
-			dp.setDescription("done!");
-			if ( flushInBatches && ++i % 20 == 0 ) {
+			DataPoint dp = ( DataPoint ) sr.get( 0 );
+			dp.setDescription( "done!" );
+			if ( ++i % 20 == 0 ) {
 				s.flush();
 				s.clear();
 			}
@@ -73,22 +84,6 @@
 		s.close();
 		System.out.println( System.currentTimeMillis() - start );
 	}
-	
-	protected void configure(Configuration cfg) {
-		cfg.setProperty(Environment.STATEMENT_BATCH_SIZE, "20");
-	}
 
-	protected String[] getMappings() {
-		return new String[] { "batch/DataPoint.hbm.xml" };
-	}
-
-	public static Test suite() {
-		return new TestSuite(BatchTest.class);
-	}
-
-	public String getCacheConcurrencyStrategy() {
-		return null;
-	}
-
 }
 

Modified: trunk/Hibernate3/test/org/hibernate/test/batchfetch/BatchFetchTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/batchfetch/BatchFetchTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/batchfetch/BatchFetchTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -6,118 +6,117 @@
 import java.util.List;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 import org.hibernate.Hibernate;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
-import org.hibernate.test.TestCase;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 
 /**
  * @author Gavin King
  */
-public class BatchFetchTest extends TestCase {
-	
+public class BatchFetchTest extends FunctionalTestCase {
+
 	public BatchFetchTest(String str) {
-		super(str);
+		super( str );
 	}
-	
+
+	public String[] getMappings() {
+		return new String[] { "batchfetch/ProductLine.hbm.xml" };
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( BatchFetchTest.class );
+	}
+
 	public void testBatchFetch() {
 		Session s = openSession();
 		Transaction t = s.beginTransaction();
 		ProductLine cars = new ProductLine();
-		cars.setDescription("Cars");
-		Model monaro = new Model(cars);
-		monaro.setName("monaro");
-		monaro.setDescription("Holden Monaro");
-		Model hsv = new Model(cars);
-		hsv.setName("hsv");
-		hsv.setDescription("Holden Commodore HSV");
-		s.save(cars);
-		
+		cars.setDescription( "Cars" );
+		Model monaro = new Model( cars );
+		monaro.setName( "monaro" );
+		monaro.setDescription( "Holden Monaro" );
+		Model hsv = new Model( cars );
+		hsv.setName( "hsv" );
+		hsv.setDescription( "Holden Commodore HSV" );
+		s.save( cars );
+
 		ProductLine oss = new ProductLine();
-		oss.setDescription("OSS");
-		Model jboss = new Model(oss);
-		jboss.setName("JBoss");
-		jboss.setDescription("JBoss Application Server");
-		Model hibernate = new Model(oss);
-		hibernate.setName("Hibernate");
-		hibernate.setDescription("Hibernate");
-		Model cache = new Model(oss);
-		cache.setName("JBossCache");
-		cache.setDescription("JBoss TreeCache");
-		s.save(oss);
-		
+		oss.setDescription( "OSS" );
+		Model jboss = new Model( oss );
+		jboss.setName( "JBoss" );
+		jboss.setDescription( "JBoss Application Server" );
+		Model hibernate = new Model( oss );
+		hibernate.setName( "Hibernate" );
+		hibernate.setDescription( "Hibernate" );
+		Model cache = new Model( oss );
+		cache.setName( "JBossCache" );
+		cache.setDescription( "JBoss TreeCache" );
+		s.save( oss );
+
 		t.commit();
 		s.close();
-		
-		s.getSessionFactory().evict(Model.class);
-		s.getSessionFactory().evict(ProductLine.class);
-		
+
+		s.getSessionFactory().evict( Model.class );
+		s.getSessionFactory().evict( ProductLine.class );
+
 		s = openSession();
 		t = s.beginTransaction();
-		
-		List list = s.createQuery("from ProductLine pl order by pl.description").list();
-		cars = (ProductLine) list.get(0);
-		oss = (ProductLine) list.get(1);
+
+		List list = s.createQuery( "from ProductLine pl order by pl.description" ).list();
+		cars = ( ProductLine ) list.get( 0 );
+		oss = ( ProductLine ) list.get( 1 );
 		assertFalse( Hibernate.isInitialized( cars.getModels() ) );
 		assertFalse( Hibernate.isInitialized( oss.getModels() ) );
 		assertEquals( cars.getModels().size(), 2 ); //fetch both collections
 		assertTrue( Hibernate.isInitialized( cars.getModels() ) );
 		assertTrue( Hibernate.isInitialized( oss.getModels() ) );
-		
+
 		s.clear();
-		
-		list = s.createQuery("from Model m").list();
-		hibernate = (Model) s.get(Model.class, hibernate.getId());
+
+		list = s.createQuery( "from Model m" ).list();
+		hibernate = ( Model ) s.get( Model.class, hibernate.getId() );
 		hibernate.getProductLine().getId();
-		for ( Iterator i=list.iterator(); i.hasNext(); ) {
-			assertFalse( Hibernate.isInitialized( ( (Model) i.next() ).getProductLine() ) );
+		for ( Iterator i = list.iterator(); i.hasNext(); ) {
+			assertFalse( Hibernate.isInitialized( ( ( Model ) i.next() ).getProductLine() ) );
 		}
 		assertEquals( hibernate.getProductLine().getDescription(), "OSS" ); //fetch both productlines
-		
+
 		s.clear();
-		
-		Iterator iter = s.createQuery("from Model").iterate();
+
+		Iterator iter = s.createQuery( "from Model" ).iterate();
 		list = new ArrayList();
 		while ( iter.hasNext() ) {
 			list.add( iter.next() );
 		}
-		Model m = (Model) list.get(0);
+		Model m = ( Model ) list.get( 0 );
 		m.getDescription(); //fetch a batch of 4
-		
+
 		s.clear();
-		
-		list = s.createQuery("from ProductLine").list();
-		ProductLine pl = (ProductLine) list.get(0);
-		ProductLine pl2 = (ProductLine) list.get(1);
-		s.evict(pl2);
+
+		list = s.createQuery( "from ProductLine" ).list();
+		ProductLine pl = ( ProductLine ) list.get( 0 );
+		ProductLine pl2 = ( ProductLine ) list.get( 1 );
+		s.evict( pl2 );
 		pl.getModels().size(); //fetch just one collection! (how can we write an assertion for that??)
-		
+
 		t.commit();
 		s.close();
 
 		s = openSession();
 		t = s.beginTransaction();
-		list = s.createQuery("from ProductLine pl order by pl.description").list();
-		cars = (ProductLine) list.get(0);
-		oss = (ProductLine) list.get(1);
+		list = s.createQuery( "from ProductLine pl order by pl.description" ).list();
+		cars = ( ProductLine ) list.get( 0 );
+		oss = ( ProductLine ) list.get( 1 );
 		assertEquals( cars.getModels().size(), 2 );
 		assertEquals( oss.getModels().size(), 3 );
-		s.delete(cars);
-		s.delete(oss);
+		s.delete( cars );
+		s.delete( oss );
 		t.commit();
 		s.close();
 	}
 
-	
-	protected String[] getMappings() {
-		return new String[] { "batchfetch/ProductLine.hbm.xml" };
-	}
-
-	public static Test suite() {
-		return new TestSuite(BatchFetchTest.class);
-	}
-
 }
 

Modified: trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -5,65 +5,75 @@
 import java.util.Date;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 import org.hibernate.Hibernate;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 import org.hibernate.dialect.PostgreSQLDialect;
-import org.hibernate.test.TestCase;
 
 /**
  * @author Gavin King
  */
-public class AuctionTest extends TestCase {
-	
+public class AuctionTest extends FunctionalTestCase {
+
 	public AuctionTest(String str) {
-		super(str);
+		super( str );
 	}
-	
+
+	public String[] getMappings() {
+		return new String[] { "bidi/Auction.hbm.xml" };
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( AuctionTest.class );
+	}
+
 	public void testLazy() {
-		if ( getDialect() instanceof PostgreSQLDialect ) return; //doesn't like boolean=1
-		
+		if ( getDialect() instanceof PostgreSQLDialect ) {
+			return; //doesn't like boolean=1
+		}
+
 		Session s = openSession();
 		Transaction t = s.beginTransaction();
 		Auction a = new Auction();
-		a.setDescription("an auction for something");
+		a.setDescription( "an auction for something" );
 		a.setEnd( new Date() );
 		Bid b = new Bid();
-		b.setAmount( new BigDecimal(123.34).setScale(19, BigDecimal.ROUND_DOWN) );
-		b.setSuccessful(true);
+		b.setAmount( new BigDecimal( 123.34 ).setScale( 19, BigDecimal.ROUND_DOWN ) );
+		b.setSuccessful( true );
 		b.setDatetime( new Date() );
-		b.setItem(a);
-		a.getBids().add(b);
-		a.setSuccessfulBid(b);
-		s.persist(b);
+		b.setItem( a );
+		a.getBids().add( b );
+		a.setSuccessfulBid( b );
+		s.persist( b );
 		t.commit();
 		s.close();
-		
+
 		Long aid = a.getId();
 		Long bid = b.getId();
-		
+
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		assertFalse( Hibernate.isInitialized(b) );
-		a = (Auction) s.get( Auction.class, aid );
+		b = ( Bid ) s.load( Bid.class, bid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		a = ( Auction ) s.get( Auction.class, aid );
 		assertFalse( Hibernate.isInitialized( a.getBids() ) );
 		assertTrue( Hibernate.isInitialized( a.getSuccessfulBid() ) );
 		assertSame( a.getBids().iterator().next(), b );
 		assertSame( b, a.getSuccessfulBid() );
-		assertTrue( Hibernate.isInitialized(b) );
+		assertTrue( Hibernate.isInitialized( b ) );
 		assertTrue( b.isSuccessful() );
 		t.commit();
 		s.close();
 
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		assertFalse( Hibernate.isInitialized(b) );
-		a = (Auction) s.createQuery("from Auction a left join fetch a.bids").uniqueResult();
-		assertTrue( Hibernate.isInitialized(b) );
+		b = ( Bid ) s.load( Bid.class, bid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		a = ( Auction ) s.createQuery( "from Auction a left join fetch a.bids" ).uniqueResult();
+		assertTrue( Hibernate.isInitialized( b ) );
 		assertTrue( Hibernate.isInitialized( a.getBids() ) );
 		assertSame( b, a.getSuccessfulBid() );
 		assertSame( a.getBids().iterator().next(), b );
@@ -73,13 +83,13 @@
 
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		a = (Auction) s.load( Auction.class, aid );
-		assertFalse( Hibernate.isInitialized(b) );
-		assertFalse( Hibernate.isInitialized(a) );
-		s.createQuery("from Auction a left join fetch a.successfulBid").list();
-		assertTrue( Hibernate.isInitialized(b) );
-		assertTrue( Hibernate.isInitialized(a) );
+		b = ( Bid ) s.load( Bid.class, bid );
+		a = ( Auction ) s.load( Auction.class, aid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		assertFalse( Hibernate.isInitialized( a ) );
+		s.createQuery( "from Auction a left join fetch a.successfulBid" ).list();
+		assertTrue( Hibernate.isInitialized( b ) );
+		assertTrue( Hibernate.isInitialized( a ) );
 		assertSame( b, a.getSuccessfulBid() );
 		assertFalse( Hibernate.isInitialized( a.getBids() ) );
 		assertSame( a.getBids().iterator().next(), b );
@@ -89,14 +99,14 @@
 
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		a = (Auction) s.load( Auction.class, aid );
-		assertFalse( Hibernate.isInitialized(b) );
-		assertFalse( Hibernate.isInitialized(a) );
+		b = ( Bid ) s.load( Bid.class, bid );
+		a = ( Auction ) s.load( Auction.class, aid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		assertFalse( Hibernate.isInitialized( a ) );
 		assertSame( s.get( Bid.class, bid ), b );
-		assertTrue( Hibernate.isInitialized(b) );
-		assertSame( s.get(Auction.class, aid ), a );
-		assertTrue( Hibernate.isInitialized(a) );
+		assertTrue( Hibernate.isInitialized( b ) );
+		assertSame( s.get( Auction.class, aid ), a );
+		assertTrue( Hibernate.isInitialized( a ) );
 		assertSame( b, a.getSuccessfulBid() );
 		assertFalse( Hibernate.isInitialized( a.getBids() ) );
 		assertSame( a.getBids().iterator().next(), b );
@@ -104,14 +114,6 @@
 		t.commit();
 		s.close();
 	}
-	
-	protected String[] getMappings() {
-		return new String[] { "bidi/Auction.hbm.xml" };
-	}
 
-	public static Test suite() {
-		return new TestSuite(AuctionTest.class);
-	}
-
 }
 

Modified: trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest2.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest2.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/bidi/AuctionTest2.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -7,64 +7,74 @@
 import org.hibernate.Hibernate;
 import org.hibernate.Session;
 import org.hibernate.Transaction;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 import org.hibernate.dialect.Oracle9Dialect;
-import org.hibernate.test.TestCase;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
 /**
  * @author Gavin King
  */
-public class AuctionTest2 extends TestCase {
-	
+public class AuctionTest2 extends FunctionalTestCase {
+
 	public AuctionTest2(String str) {
-		super(str);
+		super( str );
 	}
 
+	public String[] getMappings() {
+		return new String[] { "bidi/Auction2.hbm.xml" };
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( AuctionTest2.class );
+	}
+
 	public void testLazy() {
-		
-		if ( getDialect() instanceof Oracle9Dialect ) return; //ora doesn't like exists() in the select clause
-		
+
+		if ( getDialect() instanceof Oracle9Dialect ) {
+			return; //ora doesn't like exists() in the select clause
+		}
+
 		Session s = openSession();
 		Transaction t = s.beginTransaction();
 		Auction a = new Auction();
-		a.setDescription("an auction for something");
+		a.setDescription( "an auction for something" );
 		a.setEnd( new Date() );
 		Bid b = new Bid();
-		b.setAmount( new BigDecimal(123.34).setScale(19, BigDecimal.ROUND_DOWN) );
-		b.setSuccessful(true);
+		b.setAmount( new BigDecimal( 123.34 ).setScale( 19, BigDecimal.ROUND_DOWN ) );
+		b.setSuccessful( true );
 		b.setDatetime( new Date() );
-		b.setItem(a);
-		a.getBids().add(b);
-		a.setSuccessfulBid(b);
-		s.persist(b);
+		b.setItem( a );
+		a.getBids().add( b );
+		a.setSuccessfulBid( b );
+		s.persist( b );
 		t.commit();
 		s.close();
-		
+
 		Long aid = a.getId();
 		Long bid = b.getId();
-		
+
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		assertFalse( Hibernate.isInitialized(b) );
-		a = (Auction) s.get( Auction.class, aid );
+		b = ( Bid ) s.load( Bid.class, bid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		a = ( Auction ) s.get( Auction.class, aid );
 		assertFalse( Hibernate.isInitialized( a.getBids() ) );
 		assertFalse( Hibernate.isInitialized( a.getSuccessfulBid() ) );
 		assertSame( a.getBids().iterator().next(), b );
 		assertSame( b, a.getSuccessfulBid() );
-		assertTrue( Hibernate.isInitialized(b) );
+		assertTrue( Hibernate.isInitialized( b ) );
 		assertTrue( b.isSuccessful() );
 		t.commit();
 		s.close();
 
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		assertFalse( Hibernate.isInitialized(b) );
-		a = (Auction) s.createQuery("from Auction a left join fetch a.bids").uniqueResult();
-		assertTrue( Hibernate.isInitialized(b) );
+		b = ( Bid ) s.load( Bid.class, bid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		a = ( Auction ) s.createQuery( "from Auction a left join fetch a.bids" ).uniqueResult();
+		assertTrue( Hibernate.isInitialized( b ) );
 		assertTrue( Hibernate.isInitialized( a.getBids() ) );
 		assertSame( b, a.getSuccessfulBid() );
 		assertSame( a.getBids().iterator().next(), b );
@@ -74,13 +84,13 @@
 
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		a = (Auction) s.load( Auction.class, aid );
-		assertFalse( Hibernate.isInitialized(b) );
-		assertFalse( Hibernate.isInitialized(a) );
-		s.createQuery("from Auction a left join fetch a.successfulBid").list();
-		assertTrue( Hibernate.isInitialized(b) );
-		assertTrue( Hibernate.isInitialized(a) );
+		b = ( Bid ) s.load( Bid.class, bid );
+		a = ( Auction ) s.load( Auction.class, aid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		assertFalse( Hibernate.isInitialized( a ) );
+		s.createQuery( "from Auction a left join fetch a.successfulBid" ).list();
+		assertTrue( Hibernate.isInitialized( b ) );
+		assertTrue( Hibernate.isInitialized( a ) );
 		assertSame( b, a.getSuccessfulBid() );
 		assertFalse( Hibernate.isInitialized( a.getBids() ) );
 		assertSame( a.getBids().iterator().next(), b );
@@ -90,14 +100,14 @@
 
 		s = openSession();
 		t = s.beginTransaction();
-		b = (Bid) s.load( Bid.class, bid );
-		a = (Auction) s.load( Auction.class, aid );
-		assertFalse( Hibernate.isInitialized(b) );
-		assertFalse( Hibernate.isInitialized(a) );
+		b = ( Bid ) s.load( Bid.class, bid );
+		a = ( Auction ) s.load( Auction.class, aid );
+		assertFalse( Hibernate.isInitialized( b ) );
+		assertFalse( Hibernate.isInitialized( a ) );
 		assertSame( s.get( Bid.class, bid ), b );
-		assertTrue( Hibernate.isInitialized(b) );
-		assertSame( s.get(Auction.class, aid ), a );
-		assertTrue( Hibernate.isInitialized(a) );
+		assertTrue( Hibernate.isInitialized( b ) );
+		assertSame( s.get( Auction.class, aid ), a );
+		assertTrue( Hibernate.isInitialized( a ) );
 		assertSame( b, a.getSuccessfulBid() );
 		assertFalse( Hibernate.isInitialized( a.getBids() ) );
 		assertSame( a.getBids().iterator().next(), b );
@@ -105,13 +115,5 @@
 		t.commit();
 		s.close();
 	}
-	
-	protected String[] getMappings() {
-		return new String[] { "bidi/Auction2.hbm.xml" };
-	}
 
-	public static Test suite() {
-		return new TestSuite(AuctionTest2.class);
-	}
-
 }

Modified: trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/InvocationTargetExceptionTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/InvocationTargetExceptionTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/InvocationTargetExceptionTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -4,6 +4,9 @@
 import org.hibernate.test.bytecode.Bean;
 import org.hibernate.Session;
 import org.hibernate.Hibernate;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 import org.hibernate.cfg.Environment;
 import junit.framework.TestSuite;
 
@@ -15,17 +18,17 @@
  *
  * @author Steve Ebersole
  */
-public class InvocationTargetExceptionTest extends TestCase {
+public class InvocationTargetExceptionTest extends FunctionalTestCase {
 	public InvocationTargetExceptionTest(String name) {
 		super( name );
 	}
 
-	protected String[] getMappings() {
+	public String[] getMappings() {
 		return new String[] { "bytecode/Bean.hbm.xml" };
 	}
 
 	public static TestSuite suite() {
-		return new TestSuite( InvocationTargetExceptionTest.class );
+		return new FunctionalTestClassTestSuite( InvocationTargetExceptionTest.class );
 	}
 
 	public void testProxiedInvocationException() {

Modified: trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/ReflectionOptimizerTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/ReflectionOptimizerTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/bytecode/cglib/ReflectionOptimizerTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,16 +1,22 @@
 package org.hibernate.test.bytecode.cglib;
 
-import junit.framework.TestCase;
 import junit.framework.TestSuite;
+
+import org.hibernate.bytecode.ReflectionOptimizer;
 import org.hibernate.bytecode.cglib.BytecodeProviderImpl;
-import org.hibernate.bytecode.ReflectionOptimizer;
+import org.hibernate.junit.UnitTestCase;
 import org.hibernate.test.bytecode.Bean;
 import org.hibernate.test.bytecode.BeanReflectionHelper;
 
 /**
  * @author Steve Ebersole
  */
-public class ReflectionOptimizerTest extends TestCase {
+public class ReflectionOptimizerTest extends UnitTestCase {
+
+	public ReflectionOptimizerTest(String string) {
+		super( string );
+	}
+
 	public void testReflectionOptimization() {
 		BytecodeProviderImpl provider = new BytecodeProviderImpl();
 		ReflectionOptimizer optimizer = provider.getReflectionOptimizer(

Modified: trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/InvocationTargetExceptionTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/InvocationTargetExceptionTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/InvocationTargetExceptionTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,38 +1,41 @@
 package org.hibernate.test.bytecode.javassist;
 
-import org.hibernate.test.TestCase;
-import org.hibernate.test.bytecode.Bean;
-import org.hibernate.Session;
-import org.hibernate.Hibernate;
-import org.hibernate.cfg.Environment;
-
 import java.text.ParseException;
 
 import junit.framework.TestSuite;
 
+import org.hibernate.Hibernate;
+import org.hibernate.Session;
+import org.hibernate.cfg.Environment;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+import org.hibernate.test.bytecode.Bean;
+
 /**
  * Test that the Javassist-based lazy initializer properly handles
  * InvocationTargetExceptions
  *
  * @author Steve Ebersole
  */
-public class InvocationTargetExceptionTest extends TestCase {
+public class InvocationTargetExceptionTest extends FunctionalTestCase {
 	public InvocationTargetExceptionTest(String name) {
 		super( name );
 	}
 
-	protected String[] getMappings() {
+	public String[] getMappings() {
 		return new String[] { "bytecode/Bean.hbm.xml" };
 	}
 
 	public static TestSuite suite() {
-		return new TestSuite( InvocationTargetExceptionTest.class );
+		return new FunctionalTestClassTestSuite( InvocationTargetExceptionTest.class );
 	}
 
 	public void testProxiedInvocationException() {
-		if ( ! ( Environment.getBytecodeProvider() instanceof org.hibernate.bytecode.javassist.BytecodeProviderImpl ) ) {
+		if ( !( Environment.getBytecodeProvider() instanceof org.hibernate.bytecode.javassist.BytecodeProviderImpl ) ) {
 			// because of the scoping :(
-			reportSkip( "env not configured for javassist provider", "bytecode-provider InvocationTargetException handling" );
+			reportSkip(
+					"env not configured for javassist provider", "bytecode-provider InvocationTargetException handling"
+			);
 			return;
 		}
 		Session s = openSession();
@@ -54,7 +57,7 @@
 		catch ( ParseException e ) {
 			// expected behavior
 		}
-		catch( Throwable t ) {
+		catch ( Throwable t ) {
 			fail( "unexpected exception type : " + t );
 		}
 

Modified: trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/ReflectionOptimizerTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/ReflectionOptimizerTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/bytecode/javassist/ReflectionOptimizerTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,16 +1,22 @@
 package org.hibernate.test.bytecode.javassist;
 
-import junit.framework.TestCase;
 import junit.framework.TestSuite;
+
+import org.hibernate.bytecode.ReflectionOptimizer;
 import org.hibernate.bytecode.javassist.BytecodeProviderImpl;
-import org.hibernate.bytecode.ReflectionOptimizer;
+import org.hibernate.junit.UnitTestCase;
 import org.hibernate.test.bytecode.Bean;
 import org.hibernate.test.bytecode.BeanReflectionHelper;
 
 /**
  * @author Steve Ebersole
  */
-public class ReflectionOptimizerTest extends TestCase {
+public class ReflectionOptimizerTest extends UnitTestCase {
+
+	public ReflectionOptimizerTest(String string) {
+		super( string );
+	}
+
 	public void testReflectionOptimization() {
 		BytecodeProviderImpl provider = new BytecodeProviderImpl();
 		ReflectionOptimizer optimizer = provider.getReflectionOptimizer(

Modified: trunk/Hibernate3/test/org/hibernate/test/cache/BaseCacheProviderTestCase.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/cache/BaseCacheProviderTestCase.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/cache/BaseCacheProviderTestCase.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,16 +1,16 @@
 package org.hibernate.test.cache;
 
+import java.util.HashMap;
 import java.util.Map;
-import java.util.HashMap;
 
 import org.hibernate.Session;
 import org.hibernate.Transaction;
 import org.hibernate.cache.ReadWriteCache;
 import org.hibernate.cfg.Configuration;
 import org.hibernate.cfg.Environment;
+import org.hibernate.junit.functional.FunctionalTestCase;
 import org.hibernate.stat.SecondLevelCacheStatistics;
 import org.hibernate.stat.Statistics;
-import org.hibernate.test.TestCase;
 import org.hibernate.test.tm.DummyConnectionProvider;
 import org.hibernate.test.tm.DummyTransactionManagerLookup;
 import org.hibernate.transaction.JDBCTransactionFactory;
@@ -20,7 +20,7 @@
  *
  * @author Steve Ebersole
  */
-public abstract class BaseCacheProviderTestCase extends TestCase {
+public abstract class BaseCacheProviderTestCase extends FunctionalTestCase {
 
 	// note that a lot of the fucntionality here is intended to be used
 	// in creating specific tests for each CacheProvider that would extend
@@ -30,11 +30,11 @@
 		super( x );
 	}
 
-	protected String[] getMappings() {
+	public String[] getMappings() {
 		return new String[] { "cache/Item.hbm.xml" };
 	}
 
-	protected void configure(Configuration cfg) {
+	public void configure(Configuration cfg) {
 		super.configure( cfg );
 		cfg.setProperty( Environment.CACHE_REGION_PREFIX, "" );
 		cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "true" );

Modified: trunk/Hibernate3/test/org/hibernate/test/cache/ehcache/EhCacheTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/cache/ehcache/EhCacheTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/cache/ehcache/EhCacheTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -2,9 +2,10 @@
 package org.hibernate.test.cache.ehcache;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
+
 import org.hibernate.cache.EhCacheProvider;
 import org.hibernate.cfg.Environment;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
 import org.hibernate.test.cache.BaseCacheProviderTestCase;
 
 /**
@@ -21,7 +22,7 @@
 	}
 
 	public static Test suite() {
-		return new TestSuite( EhCacheTest.class );
+		return new FunctionalTestClassTestSuite( EhCacheTest.class );
 	}
 
 	public String getCacheConcurrencyStrategy() {

Modified: trunk/Hibernate3/test/org/hibernate/test/cache/treecache/optimistic/OptimisticTreeCacheTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/cache/treecache/optimistic/OptimisticTreeCacheTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/cache/treecache/optimistic/OptimisticTreeCacheTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,16 +1,17 @@
 package org.hibernate.test.cache.treecache.optimistic;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.hibernate.cache.OptimisticTreeCacheProvider;
-import org.hibernate.cfg.Environment;
-import org.hibernate.test.cache.BaseCacheProviderTestCase;
-import org.hibernate.test.tm.DummyTransactionManager;
 import org.jboss.cache.Fqn;
 import org.jboss.cache.TreeCache;
 import org.jboss.cache.config.Option;
 import org.jboss.cache.optimistic.DataVersion;
 
+import org.hibernate.cache.OptimisticTreeCacheProvider;
+import org.hibernate.cfg.Environment;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+import org.hibernate.test.cache.BaseCacheProviderTestCase;
+import org.hibernate.test.tm.DummyTransactionManager;
+
 /**
  * @author Steve Ebersole
  */
@@ -25,7 +26,7 @@
 	}
 
 	public static Test suite() {
-		return new TestSuite( OptimisticTreeCacheTest.class );
+		return new FunctionalTestClassTestSuite( OptimisticTreeCacheTest.class );
 	}
 
 	public String getCacheConcurrencyStrategy() {

Modified: trunk/Hibernate3/test/org/hibernate/test/cache/treecache/pessimistic/TreeCacheTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/cache/treecache/pessimistic/TreeCacheTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/cache/treecache/pessimistic/TreeCacheTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,10 +1,11 @@
 package org.hibernate.test.cache.treecache.pessimistic;
 
-import org.hibernate.test.cache.BaseCacheProviderTestCase;
+import junit.framework.Test;
+
 import org.hibernate.cache.TreeCacheProvider;
 import org.hibernate.cfg.Environment;
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+import org.hibernate.test.cache.BaseCacheProviderTestCase;
 
 /**
  * @author Steve Ebersole
@@ -20,7 +21,7 @@
 	}
 
 	public static Test suite() {
-		return new TestSuite( TreeCacheTest.class );
+		return new FunctionalTestClassTestSuite( TreeCacheTest.class );
 	}
 
 	public String getCacheConcurrencyStrategy() {

Modified: trunk/Hibernate3/test/org/hibernate/test/cascade/RefreshTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/cascade/RefreshTest.java	2006-12-12 23:22:26 UTC (rev 10976)
+++ trunk/Hibernate3/test/org/hibernate/test/cascade/RefreshTest.java	2006-12-12 23:28:04 UTC (rev 10977)
@@ -1,38 +1,35 @@
 // $Id$
 package org.hibernate.test.cascade;
 
-import org.hibernate.test.TestCase;
-import org.hibernate.Session;
-import org.hibernate.Transaction;
-
-import java.util.Date;
-import java.util.Iterator;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
+import java.util.Date;
+import java.util.Iterator;
 
 import junit.framework.Test;
-import junit.framework.TestSuite;
 
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.junit.functional.FunctionalTestCase;
+import org.hibernate.junit.functional.FunctionalTestClassTestSuite;
+
 /**
  * Implementation of RefreshTest.
  *
  * @author Steve Ebersole
  */
-public class RefreshTest extends TestCase {
+public class RefreshTest extends FunctionalTestCase {
 
 	public RefreshTest(String name) {
 		super( name );
 	}
 
-	protected String[] getMappings() {
-		return new String[] {
-			"cascade/Job.hbm.xml",
-			"cascade/JobBatch.hbm.xml"
-		};
+	public String[] getMappings() {
+		return new String[] { "cascade/Job.hbm.xml", "cascade/JobBatch.hbm.xml" };
 	}
 
 	public static Test suite() {
-		return new TestSuite( RefreshTest.class );
+		return new FunctionalTestClassTestSuite( RefreshTest.class );
 	}
 
 	public void testRefreshCascade() throws Throwable {
@@ -64,7 +61,6 @@
 	}
 
 	private void updateStatuses(Connection connection) throws Throwable {
-
 		PreparedStatement stmnt = null;
 		try {
 			stmnt = connection.prepareStatement( "UPDATE T_JOB SET JOB_STATUS = 1" );

Modified: trunk/Hibernate3/test/org/hibernate/test/cfg/CacheableF