This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new d931ad228 tests cleanup
d931ad228 is described below

commit d931ad2284d25f5a3f11dd31aa00b023dc27ffda
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun May 17 11:10:50 2026 -0400

    tests cleanup
---
 .../org/apache/cayenne/unit/CayenneTestsEnv.java   | 80 ++++++++++++----------
 1 file changed, 45 insertions(+), 35 deletions(-)

diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java 
b/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java
index c29755470..2358839fa 100644
--- a/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java
+++ b/cayenne/src/test/java/org/apache/cayenne/unit/CayenneTestsEnv.java
@@ -75,17 +75,18 @@ public class CayenneTestsEnv implements BeforeEachCallback, 
AfterEachCallback {
         COMMON_SCHEMA.rebuildSchema();
     }
 
+    public static CayenneTestsEnv forProject(String project) {
+        // Soft refs by default instead of weak — avoids GC-sensitive test 
flakiness.
+        return new CayenneTestsEnv(project, new Module[0], true, "soft");
+    }
+
     private final String project;
     private final Module[] extraModules;
     private final boolean autoClean;
     private final String retainStrategy;
 
-    // single-test scoped vars
-    private DataContext context;
-    private DbHelper dbHelper;
-    private DbCleaner dbCleaner;
-    private CayenneRuntime runtime;
-    private TestDbAdapter testDbAdapter;
+    // created in beforeEach, discarded in afterEach
+    private TestScope scope;
 
     private CayenneTestsEnv(String project, Module[] extraModules, boolean 
autoClean, String retainStrategy) {
         this.project = Objects.requireNonNull(project);
@@ -93,12 +94,7 @@ public class CayenneTestsEnv implements BeforeEachCallback, 
AfterEachCallback {
         this.autoClean = autoClean;
         this.retainStrategy = retainStrategy;
     }
-
-    public static CayenneTestsEnv forProject(String project) {
-        // Soft refs by default instead of weak — avoids GC-sensitive test 
flakiness.
-        return new CayenneTestsEnv(project, new Module[0], true, "soft");
-    }
-
+    
     public CayenneTestsEnv withExtraModules(Module... modules) {
         return new CayenneTestsEnv(project, modules, autoClean, 
retainStrategy);
     }
@@ -113,38 +109,36 @@ public class CayenneTestsEnv implements 
BeforeEachCallback, AfterEachCallback {
 
     @Override
     public void beforeEach(ExtensionContext ctx) {
-        this.runtime = buildRuntime();
-        this.context = (DataContext) runtime.newContext();
+        CayenneRuntime runtime = buildRuntime();
+        DataContext context = (DataContext) runtime.newContext();
 
         DbAdapter firstAdapter = 
runtime.getDataDomain().getDataNodes().iterator().next().getAdapter();
-        this.testDbAdapter = TestDbAdapter.of(firstAdapter);
+        TestDbAdapter testDbAdapter = TestDbAdapter.of(firstAdapter);
         tweakProcedures(runtime, testDbAdapter);
 
-        this.dbHelper = new FlavorAwareDbHelper(
+        DbHelper dbHelper = new FlavorAwareDbHelper(
                 COMMON_SCHEMA.dataSource(),
                 firstAdapter.getQuotingStrategy(),
                 context.getEntityResolver().getDataMaps().iterator().next());
 
-        this.dbCleaner = new DbCleaner(
+        DbCleaner dbCleaner = new DbCleaner(
                 COMMON_SCHEMA,
                 dbHelper,
                 
context.getEntityResolver().getDataMaps().stream().map(DataMap::getName).collect(Collectors.toSet()));
 
+        this.scope = new TestScope(runtime, context, testDbAdapter, dbHelper, 
dbCleaner);
+
         if (autoClean) {
-            dbCleaner.clean();
+            scope.clean();
         }
     }
 
     @Override
     public void afterEach(ExtensionContext ctx) {
-        if (runtime != null) {
-            runtime.shutdown();
+        if (scope != null) {
+            scope.shutdown();
+            this.scope = null;
         }
-        this.context = null;
-        this.dbHelper = null;
-        this.dbCleaner = null;
-        this.runtime = null;
-        this.testDbAdapter = null;
     }
 
     private CayenneRuntime buildRuntime() {
@@ -170,47 +164,63 @@ public class CayenneTestsEnv implements 
BeforeEachCallback, AfterEachCallback {
     }
 
     public DataContext context() {
-        return context;
+        return scope.context();
     }
 
     public TableHelper table(String tableName, String... columns) {
-        return new TableHelper(dbHelper, tableName, columns);
+        return new TableHelper(scope.dbHelper(), tableName, columns);
     }
 
     public CayenneRuntime runtime() {
-        return runtime;
+        return scope.runtime();
     }
 
     public TestDbAdapter testDbAdapter() {
-        return testDbAdapter;
+        return scope.testDbAdapter();
     }
 
     public EntityResolver entityResolver() {
-        return runtime.getDataDomain().getEntityResolver();
+        return scope.runtime().getDataDomain().getEntityResolver();
     }
 
     public DataNode dataNode() {
-        DataDomain channel = runtime.getDataDomain();
+        DataDomain channel = scope.runtime().getDataDomain();
         return channel.getDataNodes().iterator().next();
     }
 
     public void runWithQueriesBlocked(Runnable task) {
-        TestTelemetry.runWithQueriesBlocked(runtime, task);
+        TestTelemetry.runWithQueriesBlocked(scope.runtime(), task);
     }
 
     public int runWithQueryCounter(Runnable task) {
-        return TestTelemetry.runWithQueryCounter(runtime, task);
+        return TestTelemetry.runWithQueryCounter(scope.runtime(), task);
     }
 
     public AdhocObjectFactory adhocObjectFactory() {
-        return runtime.getInjector().getInstance(AdhocObjectFactory.class);
+        return 
scope.runtime().getInjector().getInstance(AdhocObjectFactory.class);
     }
 
     public DbCleaner dbCleaner() {
-        return dbCleaner;
+        return scope.dbCleaner();
     }
 
     public SQLTemplateCustomizer sqlTemplateCustomizer() {
         return SQLTemplateCustomizer.of(dataNode().getAdapter());
     }
+
+    private record TestScope(
+            CayenneRuntime runtime,
+            DataContext context,
+            TestDbAdapter testDbAdapter,
+            DbHelper dbHelper,
+            DbCleaner dbCleaner) {
+
+        void clean() {
+            dbCleaner.clean();
+        }
+
+        void shutdown() {
+            runtime.shutdown();
+        }
+    }
 }

Reply via email to