From 98dc5d7b07677da94773b5c6cd23ea60a09962ac Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Wed, 19 Nov 2025 11:21:17 -0700 Subject: [PATCH 1/2] HHH-19916 - More drop JUnit 4 usage work --- .../hibernate-integrationtest-java-modules.gradle | 4 +--- .../src/test/java/module-info.java | 4 ++-- .../java/module/test/JavaModulePathIT.java | 14 +++++--------- .../java/module/test/ScannerTest.java | 13 +++++++------ 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle b/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle index 78c72e02f3ed..57203b29a176 100644 --- a/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle +++ b/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle @@ -24,9 +24,7 @@ dependencies { api project( ':hibernate-envers' ) implementation project( ':hibernate-scan-jandex' ) - // todo : to get rid of these - testImplementation testLibs.junit4 - testImplementation testLibs.junit4Engine + testImplementation testLibs.junitJupiterApi //Provide the jakarta.cdi module, as it's required by module jakarta.transaction //but not provided as transitive dependency of Narayana. diff --git a/hibernate-integrationtest-java-modules/src/test/java/module-info.java b/hibernate-integrationtest-java-modules/src/test/java/module-info.java index 3b810ff9f77c..78c1322e5c7f 100644 --- a/hibernate-integrationtest-java-modules/src/test/java/module-info.java +++ b/hibernate-integrationtest-java-modules/src/test/java/module-info.java @@ -22,6 +22,6 @@ * Test-only configuration. */ - opens org.hibernate.orm.integrationtest.java.module.test to junit; - requires junit; + opens org.hibernate.orm.integrationtest.java.module.test to org.junit.platform.commons; + requires org.junit.jupiter.api; } diff --git a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java index be688bccf516..0e38bb2483a6 100644 --- a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java +++ b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java @@ -4,18 +4,15 @@ */ package org.hibernate.orm.integrationtest.java.module.test; - - import org.hibernate.Session; import org.hibernate.envers.boot.internal.EnversIntegrator; import org.hibernate.orm.integrationtest.java.module.test.service.AuthorService; - -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.Arrays; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class JavaModulePathIT { @@ -67,9 +64,8 @@ public void integrator() { } private void checkIsInModulePath(Class clazz) { - Assert.assertTrue( - clazz + " should be part of a named module - there is a problem in test setup", - clazz.getModule().isNamed() + assertTrue( clazz.getModule().isNamed(), + clazz + " should be part of a named module - there is a problem in test setup" ); } } diff --git a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/ScannerTest.java b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/ScannerTest.java index 17e8e6ed2064..ab3c09d27e69 100644 --- a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/ScannerTest.java +++ b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/ScannerTest.java @@ -14,9 +14,10 @@ import org.hibernate.boot.archive.scan.spi.ClassDescriptor; import org.hibernate.boot.archive.scan.spi.ScanResult; import org.hibernate.orm.integrationtest.java.module.test.entity.Author; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * We need to test that the scanner works, including when there is a module-info.class @@ -34,11 +35,11 @@ public void verifyModuleInfoScanner() { StandardScanParameters.INSTANCE ); Set locatedClasses = scan.getLocatedClasses(); - Assert.assertEquals( 1, locatedClasses.size() ); + assertEquals( 1, locatedClasses.size() ); ClassDescriptor classDescriptor = locatedClasses.iterator().next(); - Assert.assertNotNull( classDescriptor ); - Assert.assertEquals( Author.class.getName(), classDescriptor.getName() ); - Assert.assertEquals( ClassDescriptor.Categorization.MODEL, classDescriptor.getCategorization() ); + assertNotNull( classDescriptor ); + assertEquals( Author.class.getName(), classDescriptor.getName() ); + assertEquals( ClassDescriptor.Categorization.MODEL, classDescriptor.getCategorization() ); } } From d8e850aabdd01581918e1c5233ed8616b5353808 Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Wed, 19 Nov 2025 13:03:52 -0700 Subject: [PATCH 2/2] HHH-19925 - Locking root(s) should be based on select-clause, not from-clause --- .../TestAutoFlushBeforeQueryExecution.java | 8 +- .../testing/orm/junit/BaseUnitTest.java | 8 ++ .../orm/junit/BootstrapServiceRegistry.java | 8 +- .../BootstrapServiceRegistryProducer.java | 10 ++- .../junit/ClassLoadingIsolaterExtension.java | 11 +++ .../orm/junit/DialectFilterExtension.java | 10 +-- .../testing/orm/junit/DomainModel.java | 78 +++++-------------- .../orm/junit/DomainModelExtension.java | 18 ++--- .../junit/DomainModelFunctionalTesting.java | 23 +++++- .../junit/DomainModelParameterResolver.java | 7 +- .../orm/junit/DomainModelProducer.java | 9 ++- .../testing/orm/junit/DomainModelScope.java | 8 +- .../orm/junit/DomainModelScopeAware.java | 8 +- .../testing/orm/junit/ExpectedException.java | 16 ++-- .../orm/junit/ExpectedExceptionExtension.java | 16 ++-- .../testing/orm/junit/FailureExpected.java | 12 ++- .../orm/junit/FailureExpectedExtension.java | 8 +- .../orm/junit/FailureExpectedGroup.java | 6 +- .../org/hibernate/testing/orm/junit/Jira.java | 15 ++-- .../testing/orm/junit/JiraGroup.java | 10 +-- .../hibernate/testing/orm/junit/JiraKey.java | 14 ++-- .../testing/orm/junit/JiraKeyGroup.java | 10 +-- .../hibernate/testing/orm/junit/Logger.java | 8 +- .../testing/orm/junit/LoggingInspections.java | 18 +++-- .../junit/LoggingInspectionsExtension.java | 8 +- .../orm/junit/LoggingInspectionsScope.java | 10 ++- .../LoggingInspectionsScopeResolver.java | 7 +- .../orm/junit/MessageKeyInspection.java | 12 +-- .../junit/MessageKeyInspectionExtension.java | 9 ++- .../testing/orm/junit/MessageKeyWatcher.java | 9 ++- .../orm/junit/MessageKeyWatcherImpl.java | 6 +- .../orm/junit/MessageKeyWatcherResolver.java | 8 +- .../testing/orm/junit/ServiceRegistry.java | 63 ++++----------- .../orm/junit/ServiceRegistryExtension.java | 18 +++-- .../ServiceRegistryFunctionalTesting.java | 12 +-- .../ServiceRegistryParameterResolver.java | 7 +- .../orm/junit/ServiceRegistryProducer.java | 15 ++-- .../orm/junit/ServiceRegistryScope.java | 12 ++- .../testing/orm/junit/SessionFactory.java | 30 +++++-- .../orm/junit/SessionFactoryExtension.java | 18 ++--- 40 files changed, 294 insertions(+), 289 deletions(-) diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/flush/TestAutoFlushBeforeQueryExecution.java b/hibernate-core/src/test/java/org/hibernate/orm/test/flush/TestAutoFlushBeforeQueryExecution.java index 2aa3c4d6b722..2eedb535db73 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/flush/TestAutoFlushBeforeQueryExecution.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/flush/TestAutoFlushBeforeQueryExecution.java @@ -6,6 +6,7 @@ import org.hibernate.Hibernate; import org.hibernate.boot.Metadata; +import org.hibernate.boot.registry.BootstrapServiceRegistry; import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.boot.spi.BootstrapContext; import org.hibernate.engine.spi.ActionQueue; @@ -15,10 +16,10 @@ import org.hibernate.event.spi.PreUpdateEvent; import org.hibernate.event.spi.PreUpdateEventListener; import org.hibernate.integrator.spi.Integrator; +import org.hibernate.testing.orm.junit.BootstrapServiceRegistryProducer; import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; import org.hibernate.testing.orm.junit.ServiceRegistryFunctionalTesting; -import org.hibernate.testing.orm.junit.ServiceRegistryProducer; import org.hibernate.testing.orm.junit.SessionFactory; import org.hibernate.testing.orm.junit.SessionFactoryScope; import org.junit.jupiter.api.Assertions; @@ -36,7 +37,7 @@ @ServiceRegistryFunctionalTesting @DomainModel(annotatedClasses = { Author.class, Book.class, Publisher.class, UnrelatedEntity.class }) @SessionFactory -public class TestAutoFlushBeforeQueryExecution implements ServiceRegistryProducer { +public class TestAutoFlushBeforeQueryExecution implements BootstrapServiceRegistryProducer { @Test public void testAutoflushIsRequired(SessionFactoryScope factoryScope) { @@ -211,7 +212,7 @@ record Ids (Long publisherId, Long unrelatedEntityId ) { } @Override - public void prepareBootstrapRegistryBuilder(BootstrapServiceRegistryBuilder builder) { + public BootstrapServiceRegistry produceServiceRegistry(BootstrapServiceRegistryBuilder builder) { builder.applyIntegrator( new Integrator() { @Override @@ -229,6 +230,7 @@ private void integrate(SessionFactoryImplementor sessionFactory) { } } ); + return builder.build(); } public static class InitializingPreUpdateEventListener implements PreUpdateEventListener { diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BaseUnitTest.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BaseUnitTest.java index ef6c4473d26b..d531cde2bb2f 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BaseUnitTest.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BaseUnitTest.java @@ -13,6 +13,14 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; +/// Applies standard set of JUnit Jupiter [extensions][org.junit.jupiter.api.extension.Extension] +/// useful for all testing. +/// +/// @see FailureExpectedExtension +/// @see ExpectedExceptionExtension +/// @see DialectFilterExtension +/// +/// @author Steve Ebersole @Inherited @Target( ElementType.TYPE ) @Retention( RetentionPolicy.RUNTIME ) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistry.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistry.java index b1f7b9ea3c47..4c8553e8f2f1 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistry.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistry.java @@ -12,9 +12,11 @@ import org.hibernate.integrator.spi.Integrator; -/** - * Used to define the bootstrap ServiceRegistry to be used for testing. - */ +/// Used to define the bootstrap [org.hibernate.boot.registry.BootstrapServiceRegistry] to be used for testing. +/// +/// @see ServiceRegistryExtension +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistryProducer.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistryProducer.java index f255caf0ca2d..5a705bbb5908 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistryProducer.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/BootstrapServiceRegistryProducer.java @@ -7,9 +7,13 @@ import org.hibernate.boot.registry.BootstrapServiceRegistry; import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; -/** - * Producer of BootstrapServiceRegistry - */ +/// An alternative to [@BootstrapServiceRegistry][org.hibernate.testing.orm.junit.BootstrapServiceRegistry] +/// for producing a [BootstrapServiceRegistry] when programmatic building is needed. +/// +/// @see ServiceRegistryExtension +/// +/// @author Steve Ebersole public interface BootstrapServiceRegistryProducer { + /// Produce the [BootstrapServiceRegistry] BootstrapServiceRegistry produceServiceRegistry(BootstrapServiceRegistryBuilder builder); } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ClassLoadingIsolaterExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ClassLoadingIsolaterExtension.java index f6fb72422a5a..1fdb0b577d86 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ClassLoadingIsolaterExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ClassLoadingIsolaterExtension.java @@ -10,6 +10,17 @@ import org.jboss.logging.Logger; +/// Provides [ClassLoader] isolation for tests. +/// Used in combination with the test class implementing the [IsolatedClassLoaderProvider], e.g. +/// +/// ```java +/// @ExtendWith(ClassLoadingIsolaterExtension.class) +/// class SomeTestClass implements IsolatedClassLoaderProvider { +/// ... +/// } +/// ``` +/// +/// @author Andrea Boriero public class ClassLoadingIsolaterExtension implements AfterEachCallback, BeforeEachCallback { private static final Logger log = Logger.getLogger( ClassLoadingIsolaterExtension.class ); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFilterExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFilterExtension.java index a286bef1c23b..d0da75bc63c8 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFilterExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFilterExtension.java @@ -18,12 +18,10 @@ import org.jboss.logging.Logger; -/** - * JUnit Jupiter extension used to add {@link RequiresDialect} and {@link SkipForDialect} - * handling - * - * @author Steve Ebersole - */ +/// JUnit Jupiter extension used to add [RequiresDialect] and [SkipForDialect] +/// handling +/// +/// @author Steve Ebersole public class DialectFilterExtension implements ExecutionCondition { private static final Logger log = Logger.getLogger( DialectFilterExtension.class ); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModel.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModel.java index 0110ec4cb8cf..e159e2be089a 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModel.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModel.java @@ -20,64 +20,26 @@ import jakarta.persistence.SharedCacheMode; -/** - * @asciidoc - * - * Used to define the test model ({@link org.hibernate.boot.spi.MetadataImplementor}) - * to be used for testing. - * - * Can be used by itself, along with {@link DomainModelScopeAware}, to test the MetadataImplementor. E.g. - * - * [source, java, indent=0] - * ---- - * @TestDomain ( ... ) - * class MyTest implements TestDomainAware { - * - * @Test - * public void doTheTest() { - * // use the injected MetadataImplementor - * } - * - * private MetadataImplementor model; - * - * @Override - * public void injectTestModelScope(MetadataImplementor model) { - * this.model = model; - * } - * } - * ---- - * - * - * Can optionally be used with {@link ServiceRegistry} to define the ServiceRegistry used to - * build the MetadataImplementor (passed to - * {@link org.hibernate.boot.MetadataSources#MetadataSources(org.hibernate.service.ServiceRegistry)}). - * - * [source, java, indent=0] - * ---- - * @ServiceRegistry ( ... ) - * @TestDomain ( ... ) - * class MyTest implements TestDomainAware { - * - * @Test - * public void doTheTest() { - * // use the injected MetadataImplementor - * } - * - * private MetadataImplementor model; - * - * @Override - * public void injectTestModelScope(MetadataImplementor model) { - * this.model = model; - * } - * } - * ---- - * - * It can also be used in conjunction with {@link SessionFactory} - * - * @see DomainModelScopeAware - * - * @author Steve Ebersole - */ +/// Used to define the [domain model][org.hibernate.boot.spi.MetadataImplementor] to be used for testing. +/// Produces a [DomainModelScope] which can be injected via [JUnit ParameterResolver][DomainModelParameterResolver] +/// or via [DomainModelScopeAware]; the ParameterResolver should be preferred. +/// +/// ```java +/// @DomainModel(annotatedClasses=SomeEntity.class) +/// class SomeTest { +/// @Test +/// void testStuff(DomainModelScope modelScope) { +/// ... +/// } +/// } +/// ``` +/// +/// @see DomainModelExtension +/// @see DomainModelScope +/// @see DomainModelScopeAware +/// @see DomainModelProducer +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java index fafe2748de9d..bcdd298ea6e2 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java @@ -32,15 +32,15 @@ import jakarta.persistence.SharedCacheMode; -/** - * hibernate-testing implementation of a few JUnit5 contracts to support SessionFactory-based testing, - * including argument injection (or see {@link DomainModelScopeAware}) - * - * @see ServiceRegistryScope - * @see DomainModelExtension - * - * @author Steve Ebersole - */ +/// Support for defining the [domain model][MetadataImplementor] used in a test. +/// +/// @see DomainModel +/// @see DomainModelFunctionalTesting +/// @see DomainModelProducer +/// +/// @implNote Leverages the [service registry][ServiceRegistryScope] defined using the [ServiceRegistryExtension]. +/// +/// @author Steve Ebersole public class DomainModelExtension implements TestInstancePostProcessor, BeforeEachCallback, TestExecutionExceptionHandler { diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelFunctionalTesting.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelFunctionalTesting.java index 411c35391785..0b2599370d29 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelFunctionalTesting.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelFunctionalTesting.java @@ -13,9 +13,26 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; -/** - * @author Steve Ebersole - */ +/// Used in conjunction with [DomainModelProducer] to behave +/// as if [@DomainModel][DomainModel] were used. E.g. +/// +/// ```java +/// @DomainModelFunctionalTesting +/// class SomeTest implements DomainModelProducer { +/// @Override +/// MetadataImplementor produceModel(StandardServiceRegistry serviceRegistry) { +/// } +/// +/// @Test +/// void testStuff(DomainModelScope modelScope) { +/// ... +/// } +/// +/// ... +/// } +/// ``` +/// +/// @author Steve Ebersole @Inherited @Retention( RetentionPolicy.RUNTIME ) @Target({ElementType.TYPE, ElementType.METHOD}) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelParameterResolver.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelParameterResolver.java index 05203d1cabb2..418d771cd985 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelParameterResolver.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelParameterResolver.java @@ -11,9 +11,10 @@ import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.api.extension.ParameterResolver; -/** - * @author Steve Ebersole - */ +/// ParameterResolver for [DomainModelExtension], capable of resolving +/// either [DomainModelScope] or [MetadataImplementor]. +/// +/// @author Steve Ebersole public class DomainModelParameterResolver implements ParameterResolver { @Override public boolean supportsParameter( diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelProducer.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelProducer.java index df5d08ac77d1..5107cc795a5d 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelProducer.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelProducer.java @@ -7,9 +7,12 @@ import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.spi.MetadataImplementor; -/** - * @author Steve Ebersole - */ +/// Alternative to [@DomainModel][DomainModel] for defining the +/// [domain model][MetadataImplementor] to use for testing. +/// Generally used in conjunction with [DomainModelFunctionalTesting]. +/// +/// @author Steve Ebersole public interface DomainModelProducer { + /// Produce the domain model MetadataImplementor produceModel(StandardServiceRegistry serviceRegistry); } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java index fed37ad6d759..af55787f5568 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java @@ -11,9 +11,11 @@ import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.RootClass; -/** - * @author Steve Ebersole - */ +/// Access to the domain model for testing as defined by either [@DomainModel][DomainModel] +/// or [DomainModelProducer]. +/// Can be injected via [JUnit][DomainModelParameterResolver] or via [DomainModelScopeAware]. +/// +/// @author Steve Ebersole public interface DomainModelScope { MetadataImplementor getDomainModel(); void releaseModel(); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScopeAware.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScopeAware.java index 652fa4d3e6e9..a30b364c090e 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScopeAware.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScopeAware.java @@ -4,9 +4,11 @@ */ package org.hibernate.testing.orm.junit; -/** - * @author Steve Ebersole - */ +/// Contract for injection of DomainModelScope. +/// +/// @implNote Prefer use of JUnit injection via [DomainModelParameterResolver]. +/// +/// @author Steve Ebersole public interface DomainModelScopeAware { void injectTestModelScope(DomainModelScope modelScope); } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedException.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedException.java index 9aa9ddee2b52..36c988511913 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedException.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedException.java @@ -12,15 +12,13 @@ import org.junit.jupiter.api.extension.ExtendWith; -/** - * Annotation that can be used, in conjunction with {@link ExpectedExceptionExtension}, - * to indicate that a specific test is expected to fail in a particular way - * (throw the specified exception) as its "success condition". - * - * @see ExpectedExceptionExtension - * - * @author Steve Ebersole - */ +/// Annotation that can be used, in conjunction with [ExpectedExceptionExtension], +/// to indicate that a specific test is expected to fail in a particular way +/// (throw the specified exception) as its "success condition". +/// +/// @see ExpectedExceptionExtension +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedExceptionExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedExceptionExtension.java index 764bfb51fb13..e978d5f622ab 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedExceptionExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ExpectedExceptionExtension.java @@ -9,15 +9,13 @@ import org.jboss.logging.Logger; -/** - * TestExecutionExceptionHandler used in conjunction with {@link ExpectedException} - * to support annotating tests with a specific exception that indicates a - * success (we are expecting that exception in that tested condition). - * - * @see ExpectedException - * - * @author Steve Ebersole - */ +/// TestExecutionExceptionHandler used in conjunction with [ExpectedException] +/// to support annotating tests with a specific exception that indicates a +/// success (we are expecting that exception in that tested condition). +/// +/// @see ExpectedException +/// +/// @author Steve Ebersole public class ExpectedExceptionExtension implements TestExecutionExceptionHandler { private static final Logger log = Logger.getLogger( ExpectedExceptionExtension.class ); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpected.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpected.java index 167a5ea86d0e..c98a5259f712 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpected.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpected.java @@ -13,13 +13,11 @@ import org.junit.jupiter.api.extension.ExtendWith; -/** - * Marks a test method or class as being expected to fail. - * - * @see FailureExpectedExtension - * - * @author Steve Ebersole - */ +/// Marks a test method or class as being expected to fail. +/// +/// @see FailureExpectedExtension +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedExtension.java index b8ac9dcbc374..5894b65ecbc1 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedExtension.java @@ -15,11 +15,9 @@ import org.jboss.logging.Logger; -/** - * JUnit Jupiter extension used to support {@link FailureExpected} handling - * - * @author Steve Ebersole - */ +/// JUnit Jupiter extension used to support [FailureExpected] handling +/// +/// @author Steve Ebersole public class FailureExpectedExtension implements ExecutionCondition, BeforeEachCallback, AfterEachCallback, TestExecutionExceptionHandler { diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedGroup.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedGroup.java index 2b82fef9d6b3..aec8b1280f30 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedGroup.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/FailureExpectedGroup.java @@ -12,9 +12,9 @@ import org.junit.jupiter.api.extension.ExtendWith; -/** - * @author Steve Ebersole - */ +/// Grouping annotation for repeatable [@FailureExpected][FailureExpected] annotations. +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jira.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jira.java index a7fa3c01f0b3..c1847e3801c9 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jira.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jira.java @@ -10,14 +10,13 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * Specifies the URL to the Jira issue associated with a test. - * Is repeatable, so multiple JIRA issues can be indicated. - * - * @see JiraGroup - * - * @author Steve Ebersole - */ +/// Specifies the URL to the Jira issue associated with a test. +/// Is repeatable, so multiple JIRA issues can be indicated. +/// +/// @see JiraGroup +/// @see JiraKey +/// +/// @author Steve Ebersole @Retention( RetentionPolicy.RUNTIME ) @Target({ElementType.TYPE, ElementType.METHOD}) @Repeatable( JiraGroup.class ) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraGroup.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraGroup.java index ee3f7b08233c..36948b219f71 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraGroup.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraGroup.java @@ -9,13 +9,9 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * Grouping annotation for `@Jira` - * - * @see Jira - * - * @author Steve Ebersole - */ +/// Grouping annotation for repeatable [@Jira][Jira] annotations. +/// +/// @author Steve Ebersole @Retention( RetentionPolicy.RUNTIME ) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface JiraGroup { diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKey.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKey.java index b3e4768a231f..ad949a2253d6 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKey.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKey.java @@ -10,14 +10,12 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * Identifies the JIRA issue associated with a test. Is repeatable, so - * multiple JIRA issues can be indicated. - * - * @see JiraKeyGroup - * - * @author Steve Ebersole - */ +/// Identifies the key of a JIRA issue associated with a test. +/// +/// @see JiraKeyGroup +/// @see Jira +/// +/// @author Steve Ebersole @Retention( RetentionPolicy.RUNTIME ) @Target({ElementType.TYPE, ElementType.METHOD}) @Repeatable( JiraKeyGroup.class ) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKeyGroup.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKeyGroup.java index 296668c29aa3..4870e2844d4a 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKeyGroup.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/JiraKeyGroup.java @@ -9,13 +9,9 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -/** - * Grouping annotation for `@JiraKey` - * - * @see JiraKey - * - * @author Steve Ebersole - */ +/// Grouping annotation for the repeatable [@JiraKey][JiraKey] annotation. +/// +/// @author Steve Ebersole @Retention( RetentionPolicy.RUNTIME ) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface JiraKeyGroup { diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Logger.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Logger.java index ef111317c8da..764be1d83dd0 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Logger.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Logger.java @@ -4,9 +4,9 @@ */ package org.hibernate.testing.orm.junit; -/** - * Must specify one of {@link #loggerNameClass} or {@link #loggerName()} - */ +/// Must specify one of [#loggerNameClass] or [#loggerName()] +/// +/// @author Steve Ebersole public @interface Logger { // I think we can actually look up the "bare" Logger and still get the same // capability in terms of register listeners @@ -22,7 +22,7 @@ /** * The `Class` used as the base for the logger name. * - * @see org.jboss.logging.Logger#getLogger(Class) + * @see org.jboss.logging.Logger#getLogger(String) */ String loggerName() default ""; } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspections.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspections.java index 7eb2b5b9f786..448efac9f799 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspections.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspections.java @@ -13,14 +13,16 @@ import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtendWith; -/** - * Injects the ability to watch multiple for log messages being triggered. - * - * Only available at the class-level - * - * For watching a single message-key, {@link MessageKeyInspection} is a - * better option. - */ +/// Injects the ability to watch multiple for log messages being triggered. +/// +/// @see LoggingInspectionsScope +/// @see LoggingInspectionsExtension +/// +/// @apiNote Only available at the class-level +/// @implNote For watching a single message-key, [MessageKeyInspection] is a +/// better option. +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsExtension.java index c2c190421258..513788a0792a 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsExtension.java @@ -9,9 +9,11 @@ import org.junit.jupiter.api.extension.ExtensionContext.Store; import org.junit.jupiter.api.extension.TestInstancePostProcessor; -/** - * @author Steve Ebersole - */ +/// Support for [LoggingInspectionsScope]. +/// +/// @see LoggingInspections +/// +/// @author Steve Ebersole public class LoggingInspectionsExtension implements TestInstancePostProcessor, BeforeEachCallback { private static final String KEY = LoggingInspectionsExtension.class.getName(); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScope.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScope.java index e5a34b39230a..5645885db580 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScope.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScope.java @@ -9,9 +9,13 @@ import org.junit.jupiter.api.extension.ExtensionContext; -/** - * Manages all of the MessageKeyWatcher defined by LoggingInspectionsScope - */ +/// Manages all the MessageKeyWatcher defined by LoggingInspectionsScope +/// +/// @see LoggingInspections +/// @see LoggingInspectionsExtension +/// @see LoggingInspectionsScopeResolver +/// +/// @author Steve Ebersole public class LoggingInspectionsScope { private final Map> watcherMap = new HashMap<>(); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScopeResolver.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScopeResolver.java index b58b431a92ec..1d1be8d0f564 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScopeResolver.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/LoggingInspectionsScopeResolver.java @@ -9,10 +9,9 @@ import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.api.extension.ParameterResolver; -/** - * ParameterResolver implementation for resolving - * {@link LoggingInspectionsScope} ParameterResolver - */ +/// ParameterResolver implementation for resolving [LoggingInspectionsScope] +/// +/// @author Steve Ebersole public class LoggingInspectionsScopeResolver implements ParameterResolver { @Override public boolean supportsParameter( diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspection.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspection.java index dd55dc83e39f..be30a4fcab83 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspection.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspection.java @@ -13,11 +13,13 @@ import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtendWith; -/** - * Injects the ability to watch for a log messages being triggered. - * - * For watching a multiple message-keys, see {@link LoggingInspections} - */ +/// Injects the ability to watch for a log messages being triggered. +/// +/// @see MessageKeyWatcher +/// @see MessageKeyInspectionExtension +/// @see MessageKeyWatcherResolver +/// +/// @apiNote For watching multiple message-keys, see [LoggingInspections] @Inherited @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspectionExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspectionExtension.java index 39990c1d37f7..4c543cb310a9 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspectionExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyInspectionExtension.java @@ -12,9 +12,12 @@ import static org.junit.jupiter.api.extension.ExtensionContext.Namespace.create; -/** - * @author Steve Ebersole - */ +/// Support for [MessageKeyWatcher] +/// +/// @see MessageKeyInspection +/// @see MessageKeyWatcherResolver +/// +/// @author Steve Ebersole public class MessageKeyInspectionExtension implements TestInstancePostProcessor, BeforeEachCallback { public static final String KEY = LoggingInspectionsExtension.class.getName(); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcher.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcher.java index 3f58e6a8105f..c2ef9eaf165e 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcher.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcher.java @@ -6,9 +6,12 @@ import java.util.List; -/** - * @author Steve Ebersole - */ +/// Allows watching of log messages. +/// +/// @see LoggingInspections +/// @see MessageKeyInspection +/// +/// @author Steve Ebersole public interface MessageKeyWatcher { String getMessageKey(); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherImpl.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherImpl.java index fb772d868b18..ee7f8eabf5ba 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherImpl.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherImpl.java @@ -12,9 +12,9 @@ import org.jboss.logging.Logger; -/** - * MessageIdWatcher implementation - */ +/// MessageKeyWatcher implementation +/// +/// @author Steve Ebersole public class MessageKeyWatcherImpl implements MessageKeyWatcher, LogListener { private final String messageKey; private final boolean resetBeforeEach; diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherResolver.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherResolver.java index 6b9e5a2d5459..e738b7b505c5 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherResolver.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/MessageKeyWatcherResolver.java @@ -9,9 +9,11 @@ import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.api.extension.ParameterResolver; -/** - * @author Steve Ebersole - */ +/// ParameterResolver for [MessageKeyWatcher] +/// +/// @see MessageKeyInspectionExtension +/// +/// @author Steve Ebersole public class MessageKeyWatcherResolver implements ParameterResolver { @Override public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException { diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistry.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistry.java index 50c50a967bf1..bc8eb3c8451a 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistry.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistry.java @@ -12,55 +12,26 @@ import org.hibernate.boot.registry.StandardServiceInitiator; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.service.spi.ServiceContributor; import org.junit.jupiter.api.extension.ExtensionContext; -/** - * @asciidoc - * - * Used to define the ServiceRegistry to be used for testing. Can be used alone: - * - * [source, java, indent=0] - * ---- - * @ServiceRegistry ( ... ) - * class MyTest extends ServiceRegistryAware { - * @Test - * public void doTheTest() { - * // use the injected registry... - * - * ... - * } - * - * private StandardServiceRegistry registry; - * - * @Override - * public void injectServiceRegistryScope(StandardServiceRegistry registry) { - * this.registry = registry; - * } - * } - * ---- - * - * It can also be used as the basis for building a - * {@link org.hibernate.boot.spi.MetadataImplementor} via {@link DomainModel} - * or {@link SessionFactoryImplementor} via {@link SessionFactory}, - * with or without {@link ServiceRegistryScopeAware}. E.g. - * - * [source, java, indent=0] - * ---- - * @ServiceRegistry ( ... ) - * @TestDomain ( ... ) - * class MyTest ... { - * } - * ---- - * - * Here, the managed ServiceRegistry is used to create the - * {@link org.hibernate.boot.spi.MetadataImplementor} - * - * @see ServiceRegistryScopeAware - * - * @author Steve Ebersole - */ +/// Used to define the [org.hibernate.service.ServiceRegistry] to be used for testing. +/// Produces a [ServiceRegistryScope] which can be injected via [JUnit ParameterResolver][ServiceRegistryParameterResolver] +/// or via [ServiceRegistryScopeAware]; the ParameterResolver should be preferred. +/// +/// ```java +/// @ServiceRegistry(settings=@Setting(name=LOG_SQL, value="true")) +/// class SomeTest { +/// @Test +/// void testStuff(ServiceRegistryScope registryScope) { +/// ... +/// } +/// } +/// ``` +/// +/// @see ServiceRegistryExtension +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.TYPE, ElementType.METHOD}) @Retention( RetentionPolicy.RUNTIME ) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java index 181c2aeba343..d53f7d82d899 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java @@ -33,12 +33,17 @@ import java.util.Map; import java.util.Optional; -/** - * JUnit extension used to manage the StandardServiceRegistry used by a test including - * creating the StandardServiceRegistry and releasing it afterwards - * - * @author Steve Ebersole - */ +/// JUnit extension used to manage the StandardServiceRegistry used by a test including +/// creating the StandardServiceRegistry and releasing it afterwards +/// +/// @see BootstrapServiceRegistry +/// @see ServiceRegistry +/// @see ServiceRegistryFunctionalTesting +/// @see ServiceRegistryProducer +/// @see ServiceRegistryScopeAware +/// @see ServiceRegistryParameterResolver +/// +/// @author Steve Ebersole public class ServiceRegistryExtension implements TestInstancePostProcessor, BeforeEachCallback, TestExecutionExceptionHandler { private static final Logger log = Logger.getLogger( ServiceRegistryExtension.class ); @@ -357,7 +362,6 @@ public ServiceRegistryScopeImpl(BootstrapServiceRegistryProducer bsrProducer, Se private StandardServiceRegistry createRegistry() { BootstrapServiceRegistryBuilder bsrb = new BootstrapServiceRegistryBuilder().enableAutoClose(); bsrb.applyClassLoader( Thread.currentThread().getContextClassLoader() ); - ssrProducer.prepareBootstrapRegistryBuilder( bsrb ); final org.hibernate.boot.registry.BootstrapServiceRegistry bsr = bsrProducer.produceServiceRegistry( bsrb ); try { diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryFunctionalTesting.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryFunctionalTesting.java index 4c7b204bb198..bf7b67d777c9 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryFunctionalTesting.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryFunctionalTesting.java @@ -13,12 +13,12 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; -/** - * Composite annotation for applying extensions needed for managing - * a StandardServiceRegistry as part of the test lifecycle. - * - * @author Steve Ebersole - */ +/// Applies extensions needed for managing a ServiceRegistry as part of the test lifecycle. +/// Used in combination with [BootstrapServiceRegistryProducer] / +/// [ServiceRegistryProducer] as an alternative to [@BootstrapServiceRegistry][BootstrapServiceRegistry] / +/// [@ServiceRegistry][ServiceRegistry]. +/// +/// @author Steve Ebersole @Inherited @Retention( RetentionPolicy.RUNTIME ) @Target({ElementType.TYPE, ElementType.METHOD}) diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryParameterResolver.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryParameterResolver.java index 8e90d43a104b..eceacc6cb719 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryParameterResolver.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryParameterResolver.java @@ -11,9 +11,10 @@ import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.api.extension.ParameterResolver; -/** - * @author Steve Ebersole - */ +/// ParameterResolver for [ServiceRegistryExtension], capable of resolving +/// either [ServiceRegistryScope] or [StandardServiceRegistry] references. +/// +/// @author Steve Ebersole public class ServiceRegistryParameterResolver implements ParameterResolver { @Override public boolean supportsParameter( diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryProducer.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryProducer.java index a657398d7746..8e27be8c9d72 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryProducer.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryProducer.java @@ -4,19 +4,18 @@ */ package org.hibernate.testing.orm.junit; -import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -/** - * @author Steve Ebersole - */ +/// Alternative to [@ServiceRegistry][ServiceRegistry] for defining the +/// [StandardServiceRegistry] to use for testing when programmatic building is needed. +/// Generally used in conjunction with [ServiceRegistryFunctionalTesting]. +/// +/// @see BootstrapServiceRegistryProducer +/// +/// @author Steve Ebersole public interface ServiceRegistryProducer { default StandardServiceRegistry produceServiceRegistry(StandardServiceRegistryBuilder builder) { return builder.build(); } - - default void prepareBootstrapRegistryBuilder(BootstrapServiceRegistryBuilder bsrb) { - // generally this is not the one we are interested in - } } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java index 80b478470014..bfc23c65eae9 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java @@ -14,9 +14,15 @@ import org.hibernate.jpa.HibernatePersistenceConfiguration; import org.hibernate.service.Service; -/** - * @author Steve Ebersole - */ +/// Access to the service registry used for testing. +/// Can be injected via [JUnit][ServiceRegistryParameterResolver] or via [ServiceRegistryScopeAware]. +/// +/// @see BootstrapServiceRegistry +/// @see BootstrapServiceRegistryProducer +/// @see ServiceRegistry +/// @see ServiceRegistryProducer +/// +/// @author Steve Ebersole public interface ServiceRegistryScope { /** * Generalized support for running exception-safe code using a ServiceRegistry to diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactory.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactory.java index fb8362803dd0..f61fa27e9cfa 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactory.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactory.java @@ -19,9 +19,25 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.extension.ExtendWith; -/** - * @author Steve Ebersole - */ +/// Defines the SessionFactory to be used for testing. +/// Produces a [SessionFactoryScope] which can be injected via [JUnit][SessionFactoryScopeParameterResolver] +/// or via [SessionFactoryScopeAware]; the JUnit approach should be preferred. +/// +/// ```java +/// @DomainModel(annotatedClasses=SomeEntity.class) +/// @SessionFactory +/// class SomeTest { +/// @Test +/// void testStuff(SessionFactoryScope factoryScope) { +/// ... +/// } +/// } +/// ``` +/// +/// @see SessionFactoryExtension +/// @see SessionFactoryScope +/// +/// @author Steve Ebersole @Inherited @Target({ElementType.TYPE, ElementType.METHOD}) @Retention( RetentionPolicy.RUNTIME ) @@ -50,11 +66,9 @@ Class statementInspectorClass() default StatementInspector.class; - /** - * Shorthand for {@code statementInspectorClass = org.hibernate.testing.jdbc.SQLStatementInspector.class} - * - * @see SQLStatementInspector - */ + /// Shorthand for `statementInspectorClass = org.hibernate.testing.jdbc.SQLStatementInspector.class` + /// + /// @see SQLStatementInspector boolean useCollectingStatementInspector() default false; boolean applyCollectionsInDefaultFetchGroup() default true; diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java index b968e2a7169d..d3841b2b4041 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java @@ -35,15 +35,15 @@ import java.util.function.Consumer; import java.util.function.Function; -/** - * hibernate-testing implementation of a few JUnit5 contracts to support SessionFactory-based testing, - * including argument injection (or see {@link SessionFactoryScopeAware}) - * - * @see SessionFactoryScope - * @see DomainModelExtension - * - * @author Steve Ebersole - */ +/// JUnit Jupiter [extension][org.junit.jupiter.api.extension.Extension] to support +/// SessionFactory-based functional testing. +/// +/// @see SessionFactoryScope +/// @see DomainModelExtension +/// +/// @implNote Leverages the [domain model][DomainModelScope] defined using the [DomainModelExtension]. +/// +/// @author Steve Ebersole public class SessionFactoryExtension implements TestInstancePostProcessor, BeforeEachCallback, TestExecutionExceptionHandler {