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

commit c241f8229250503c9d3f4b087ade8ada7e211d64
Author: Andrus Adamchik <[email protected]>
AuthorDate: Wed May 13 18:15:56 2026 -0400

    unifying CayenneTestsEnv tool
---
 .../org/apache/cayenne/access/ObjectStoreGCIT.java |   4 +-
 .../cayenne/unit/di/runtime/CayenneTestsEnv.java   |  40 ++++++-
 ...eakReferenceStrategyCayenneRuntimeProvider.java |  48 ---------
 .../WeakReferenceStrategyRuntimeCaseModule.java    |  36 -------
 .../di/runtime/WeakReferenceStrategyTestsEnv.java  | 117 ---------------------
 5 files changed, 37 insertions(+), 208 deletions(-)

diff --git 
a/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java 
b/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java
index 15ded4a67..8af1f88d3 100644
--- a/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java
+++ b/cayenne/src/test/java/org/apache/cayenne/access/ObjectStoreGCIT.java
@@ -24,7 +24,7 @@ import org.apache.cayenne.query.SQLTemplate;
 import org.apache.cayenne.test.parallel.ParallelTestContainer;
 import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.unit.di.runtime.CayenneProjects;
-import org.apache.cayenne.unit.di.runtime.WeakReferenceStrategyTestsEnv;
+import org.apache.cayenne.unit.di.runtime.CayenneTestsEnv;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
@@ -34,7 +34,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 public class ObjectStoreGCIT {
 
     @RegisterExtension
-    static final WeakReferenceStrategyTestsEnv env = 
WeakReferenceStrategyTestsEnv.forProject(CayenneProjects.TESTMAP_PROJECT);
+    static final CayenneTestsEnv env = 
CayenneTestsEnv.forProject(CayenneProjects.TESTMAP_PROJECT).withWeakReferenceStrategy();
 
     private DataContext context;
 
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java 
b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java
index bd6e2297c..499bc9bfc 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/CayenneTestsEnv.java
@@ -20,8 +20,12 @@ package org.apache.cayenne.unit.di.runtime;
 
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.configuration.Constants;
+import org.apache.cayenne.configuration.runtime.CoreModule;
+import org.apache.cayenne.di.Binder;
 import org.apache.cayenne.di.DIBootstrap;
 import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.di.Module;
 import org.apache.cayenne.di.spi.DefaultScope;
 import org.apache.cayenne.runtime.CayenneRuntime;
 import org.apache.cayenne.test.jdbc.DBHelper;
@@ -59,24 +63,26 @@ public class CayenneTestsEnv implements BeforeEachCallback, 
AfterEachCallback {
     private final String project;
     private final Class<?>[] extraModules;
     private final boolean autoClean;
+    private final boolean weakReferenceStrategy;
 
     private ObjectContext context;
     private DataContext dataContext;
     private DBHelper dbHelper;
     private CayenneRuntime runtime;
 
-    private CayenneTestsEnv(String project, Class<?>[] extraModules, boolean 
autoClean) {
+    private CayenneTestsEnv(String project, Class<?>[] extraModules, boolean 
autoClean, boolean weakReferenceStrategy) {
         this.project = project;
         this.extraModules = extraModules;
         this.autoClean = autoClean;
+        this.weakReferenceStrategy = weakReferenceStrategy;
     }
 
     public static CayenneTestsEnv forProject(String project) {
-        return new CayenneTestsEnv(project, new Class<?>[0], true);
+        return new CayenneTestsEnv(project, new Class<?>[0], true, false);
     }
 
     public CayenneTestsEnv withExtraModules(Class<?>... modules) {
-        return new CayenneTestsEnv(project, modules, autoClean);
+        return new CayenneTestsEnv(project, modules, autoClean, 
weakReferenceStrategy);
     }
 
     /**
@@ -87,13 +93,30 @@ public class CayenneTestsEnv implements BeforeEachCallback, 
AfterEachCallback {
      * from its own {@code @BeforeEach}.
      */
     public CayenneTestsEnv withoutAutoClean() {
-        return new CayenneTestsEnv(project, extraModules, false);
+        return new CayenneTestsEnv(project, extraModules, false, 
weakReferenceStrategy);
+    }
+
+    /**
+     * Configures the runtime with the weak-reference object-tracking strategy
+     * instead of the default soft-reference strategy used by other tests. Use
+     * for GC-sensitive tests that need objects to be collectable as soon as
+     * they become unreferenced.
+     */
+    public CayenneTestsEnv withWeakReferenceStrategy() {
+        return new CayenneTestsEnv(project, extraModules, autoClean, true);
     }
 
     @Override
     public void beforeEach(ExtensionContext ctx) throws Exception {
         
INJECTOR.getInstance(RuntimeCaseProperties.class).setConfigurationLocation(project);
-        
INJECTOR.getInstance(RuntimeCaseExtraModules.class).setExtraModules(extraModules);
+
+        Class<?>[] effectiveExtras = extraModules;
+        if (weakReferenceStrategy) {
+            effectiveExtras = new Class<?>[extraModules.length + 1];
+            System.arraycopy(extraModules, 0, effectiveExtras, 0, 
extraModules.length);
+            effectiveExtras[extraModules.length] = 
WeakReferenceStrategyModule.class;
+        }
+        
INJECTOR.getInstance(RuntimeCaseExtraModules.class).setExtraModules(effectiveExtras);
 
         runtime = INJECTOR.getInstance(CayenneRuntime.class);
         context = INJECTOR.getInstance(ObjectContext.class);
@@ -149,4 +172,11 @@ public class CayenneTestsEnv implements 
BeforeEachCallback, AfterEachCallback {
     public <T> T getInstance(Class<T> type) {
         return INJECTOR.getInstance(type);
     }
+
+    public static class WeakReferenceStrategyModule implements Module {
+        @Override
+        public void configure(Binder binder) {
+            
CoreModule.extend(binder).setProperty(Constants.OBJECT_RETAIN_STRATEGY_PROPERTY,
 "weak");
+        }
+    }
 }
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyCayenneRuntimeProvider.java
 
b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyCayenneRuntimeProvider.java
deleted file mode 100644
index 9628fb2ba..000000000
--- 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyCayenneRuntimeProvider.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.unit.di.runtime;
-
-import org.apache.cayenne.configuration.Constants;
-import org.apache.cayenne.configuration.runtime.CoreModule;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.di.Provider;
-import org.apache.cayenne.unit.UnitDbAdapter;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-public class WeakReferenceStrategyCayenneRuntimeProvider extends 
CayenneRuntimeProvider {
-
-    public WeakReferenceStrategyCayenneRuntimeProvider(@Inject 
RuntimeCaseDataSourceFactory dataSourceFactory,
-                                                       @Inject 
RuntimeCaseProperties properties,
-                                                       @Inject 
RuntimeCaseExtraModules extraModulesProperties,
-                                                       @Inject 
Provider<DbAdapter> dbAdapterProvider,
-                                                       @Inject UnitDbAdapter 
unitDbAdapter) {
-        super(dataSourceFactory, properties, extraModulesProperties, 
dbAdapterProvider, unitDbAdapter);
-    }
-
-    @Override
-    protected Collection<? extends Module> getExtraModules() {
-        Collection<Module> modules = new ArrayList<>(super.getExtraModules());
-        modules.add(b -> 
CoreModule.extend(b).setProperty(Constants.OBJECT_RETAIN_STRATEGY_PROPERTY, 
"weak"));
-        return modules;
-    }
-}
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyRuntimeCaseModule.java
 
b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyRuntimeCaseModule.java
deleted file mode 100644
index dc8dd83bb..000000000
--- 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyRuntimeCaseModule.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.unit.di.runtime;
-
-import org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.spi.DefaultScope;
-import org.apache.cayenne.runtime.CayenneRuntime;
-
-public class WeakReferenceStrategyRuntimeCaseModule extends RuntimeCaseModule {
-
-    public WeakReferenceStrategyRuntimeCaseModule(DefaultScope testScope) {
-        super(testScope);
-    }
-
-    @Override
-    public void configure(Binder binder){
-        super.configure(binder);
-        
binder.bind(CayenneRuntime.class).toProvider(WeakReferenceStrategyCayenneRuntimeProvider.class).in(testScope);
-    }
-}
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyTestsEnv.java
 
b/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyTestsEnv.java
deleted file mode 100644
index 54bd1248b..000000000
--- 
a/cayenne/src/test/java/org/apache/cayenne/unit/di/runtime/WeakReferenceStrategyTestsEnv.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.unit.di.runtime;
-
-import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.access.DataContext;
-import org.apache.cayenne.di.DIBootstrap;
-import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.di.spi.DefaultScope;
-import org.apache.cayenne.runtime.CayenneRuntime;
-import org.apache.cayenne.test.jdbc.DBHelper;
-import org.junit.jupiter.api.extension.AfterEachCallback;
-import org.junit.jupiter.api.extension.BeforeEachCallback;
-import org.junit.jupiter.api.extension.ExtensionContext;
-
-/**
- * Sibling of {@link CayenneTestsEnv} that wires its own injector via
- * {@link WeakReferenceStrategyRuntimeCaseModule}. Use it for tests that need
- * a runtime configured with the weak-reference object-tracking strategy.
- */
-// TODO: merge with CayenneTestsEnv
-@Deprecated(forRemoval = true)
-public class WeakReferenceStrategyTestsEnv implements BeforeEachCallback, 
AfterEachCallback {
-
-    private static final DefaultScope TEST_SCOPE;
-    private static final Injector INJECTOR;
-
-    static {
-        TEST_SCOPE = new DefaultScope();
-        INJECTOR = DIBootstrap.createInjector(new 
WeakReferenceStrategyRuntimeCaseModule(TEST_SCOPE));
-        INJECTOR.getInstance(SchemaBuilder.class).rebuildSchema();
-    }
-
-    private final String project;
-    private final Class<?>[] extraModules;
-
-    private ObjectContext context;
-    private DataContext dataContext;
-    private DBHelper dbHelper;
-    private CayenneRuntime runtime;
-
-    private WeakReferenceStrategyTestsEnv(String project, Class<?>[] 
extraModules) {
-        this.project = project;
-        this.extraModules = extraModules;
-    }
-
-    public static WeakReferenceStrategyTestsEnv forProject(String project) {
-        return new WeakReferenceStrategyTestsEnv(project, new Class<?>[0]);
-    }
-
-    public WeakReferenceStrategyTestsEnv withExtraModules(Class<?>... modules) 
{
-        return new WeakReferenceStrategyTestsEnv(project, modules);
-    }
-
-    @Override
-    public void beforeEach(ExtensionContext ctx) throws Exception {
-        
INJECTOR.getInstance(RuntimeCaseProperties.class).setConfigurationLocation(project);
-        
INJECTOR.getInstance(RuntimeCaseExtraModules.class).setExtraModules(extraModules);
-
-        runtime = INJECTOR.getInstance(CayenneRuntime.class);
-        context = INJECTOR.getInstance(ObjectContext.class);
-        dataContext = INJECTOR.getInstance(DataContext.class);
-        dbHelper = INJECTOR.getInstance(DBHelper.class);
-
-        DBCleaner dbCleaner = INJECTOR.getInstance(DBCleaner.class);
-        try {
-            dbCleaner.clean();
-        } catch (Exception ex) {
-            dbCleaner.clean();
-        }
-    }
-
-    @Override
-    public void afterEach(ExtensionContext ctx) {
-        TEST_SCOPE.shutdown();
-        context = null;
-        dataContext = null;
-        dbHelper = null;
-        runtime = null;
-    }
-
-    public ObjectContext context() {
-        return context;
-    }
-
-    public DataContext dataContext() {
-        return dataContext;
-    }
-
-    public DBHelper dbHelper() {
-        return dbHelper;
-    }
-
-    public CayenneRuntime runtime() {
-        return runtime;
-    }
-
-    public <T> T getInstance(Class<T> type) {
-        return INJECTOR.getInstance(type);
-    }
-}

Reply via email to