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

veithen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ws-axiom.git

commit c89b2893d981ad8ebd52505986b15fb2eac30ec4
Author: Andreas Veithen-Knowles <[email protected]>
AuthorDate: Sun Mar 15 19:10:58 2026 +0000

    Make AbstractFanOutNode more flexible
---
 .../axiom/testutils/suite/AbstractFanOutNode.java  | 32 +++++-----------------
 .../org/apache/axiom/testutils/suite/Binding.java  | 25 +++++++++++++++++
 .../axiom/testutils/suite/DimensionFanOutNode.java |  2 +-
 .../axiom/testutils/suite/ParameterFanOutNode.java | 20 +++++---------
 4 files changed, 40 insertions(+), 39 deletions(-)

diff --git 
a/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/AbstractFanOutNode.java
 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/AbstractFanOutNode.java
index f20d8b44b..ea18396aa 100644
--- 
a/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/AbstractFanOutNode.java
+++ 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/AbstractFanOutNode.java
@@ -28,16 +28,12 @@ import org.junit.jupiter.api.DynamicContainer;
 import org.junit.jupiter.api.DynamicNode;
 
 import com.google.common.collect.ImmutableList;
-import com.google.inject.AbstractModule;
 import com.google.inject.Injector;
-import com.google.inject.Module;
 
 /**
  * Abstract base class for fan-out nodes that iterate over a list of values, 
creating one {@link
  * DynamicContainer} per value. For each value, a child Guice injector is 
created that binds the
- * value type to the specific instance. The binding is created by {@link
- * #createBindingModule(Object)}, which subclasses may override (e.g. {@link 
ParameterFanOutNode}
- * adds a {@code @Named} annotation).
+ * value type to the specific instance.
  *
  * <p>Subclasses define how test parameters (used for display names and LDAP 
filter matching) are
  * extracted from each value:
@@ -54,13 +50,14 @@ import com.google.inject.Module;
  * @param <T> the value type
  */
 public abstract class AbstractFanOutNode<T> extends MatrixTestNode {
-    protected final Class<T> type;
     private final ImmutableList<T> values;
+    private final Binding<T> binding;
     private final MatrixTestNode child;
 
-    protected AbstractFanOutNode(Class<T> type, ImmutableList<T> values, 
MatrixTestNode child) {
-        this.type = type;
+    protected AbstractFanOutNode(
+            ImmutableList<T> values, Binding<T> binding, MatrixTestNode child) 
{
         this.values = values;
+        this.binding = binding;
         this.child = child;
     }
 
@@ -70,22 +67,6 @@ public abstract class AbstractFanOutNode<T> extends 
MatrixTestNode {
      */
     protected abstract Map<String, String> extractParameters(T value);
 
-    /**
-     * Creates the Guice module that binds the value for a given fan-out 
iteration. Subclasses may
-     * override this to customise the binding (e.g. adding a binding 
annotation).
-     *
-     * @param value the current iteration value
-     * @return a module that provides the binding for {@code value}
-     */
-    protected Module createBindingModule(T value) {
-        return new AbstractModule() {
-            @Override
-            protected void configure() {
-                bind(type).toInstance(value);
-            }
-        };
-    }
-
     @Override
     Stream<DynamicNode> toDynamicNodes(
             Injector parentInjector,
@@ -95,7 +76,8 @@ public abstract class AbstractFanOutNode<T> extends 
MatrixTestNode {
                 .map(
                         value -> {
                             Injector childInjector =
-                                    
parentInjector.createChildInjector(createBindingModule(value));
+                                    parentInjector.createChildInjector(
+                                            binder -> 
binding.configure(binder, value));
 
                             Map<String, String> parameters = 
extractParameters(value);
                             HashMap<String, String> params = new 
HashMap<>(inheritedParameters);
diff --git 
a/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/Binding.java
 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/Binding.java
new file mode 100644
index 000000000..deb65746b
--- /dev/null
+++ 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/Binding.java
@@ -0,0 +1,25 @@
+/*
+ * 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
+ *
+ * http://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.axiom.testutils.suite;
+
+import com.google.inject.Binder;
+
+public interface Binding<T> {
+    void configure(Binder binder, T value);
+}
diff --git 
a/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/DimensionFanOutNode.java
 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/DimensionFanOutNode.java
index 1cecbda3a..8f3edc655 100644
--- 
a/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/DimensionFanOutNode.java
+++ 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/DimensionFanOutNode.java
@@ -35,7 +35,7 @@ import com.google.common.collect.ImmutableList;
 public class DimensionFanOutNode<D extends Dimension> extends 
AbstractFanOutNode<D> {
     public DimensionFanOutNode(
             Class<D> dimensionType, ImmutableList<D> dimensions, 
MatrixTestNode child) {
-        super(dimensionType, dimensions, child);
+        super(dimensions, (binder, value) -> 
binder.bind(dimensionType).toInstance(value), child);
     }
 
     @Override
diff --git 
a/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/ParameterFanOutNode.java
 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/ParameterFanOutNode.java
index a0c0d6127..15fa595d1 100644
--- 
a/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/ParameterFanOutNode.java
+++ 
b/testing/matrix-testsuite/src/main/java/org/apache/axiom/testutils/suite/ParameterFanOutNode.java
@@ -22,8 +22,6 @@ import java.util.Map;
 import java.util.function.Function;
 
 import com.google.common.collect.ImmutableList;
-import com.google.inject.AbstractModule;
-import com.google.inject.Module;
 import com.google.inject.name.Names;
 
 /**
@@ -43,21 +41,17 @@ public class ParameterFanOutNode<T> extends 
AbstractFanOutNode<T> {
             String parameterName,
             Function<T, String> parameterValueFunction,
             MatrixTestNode child) {
-        super(type, values, child);
+        super(
+                values,
+                (binder, value) ->
+                        binder.bind(type)
+                                .annotatedWith(Names.named(parameterName))
+                                .toInstance(value),
+                child);
         this.parameterName = parameterName;
         this.parameterValueFunction = parameterValueFunction;
     }
 
-    @Override
-    protected Module createBindingModule(T value) {
-        return new AbstractModule() {
-            @Override
-            protected void configure() {
-                
bind(type).annotatedWith(Names.named(parameterName)).toInstance(value);
-            }
-        };
-    }
-
     @Override
     protected Map<String, String> extractParameters(T value) {
         return Map.of(parameterName, parameterValueFunction.apply(value));

Reply via email to