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
The following commit(s) were added to refs/heads/master by this push:
new 06f96206b Rename to MatrixTestNode/Container/Case, derive display name
from parameter, update comparison table
06f96206b is described below
commit 06f96206b769887dae8f30133bd6e0ccb984a658
Author: Andreas Veithen-Knowles <[email protected]>
AuthorDate: Sun Feb 22 14:49:07 2026 +0000
Rename to MatrixTestNode/Container/Case, derive display name from
parameter, update comparison table
---
docs/design/test-suite-pattern.md | 46 +++++++++++++++++++--------------------
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/docs/design/test-suite-pattern.md
b/docs/design/test-suite-pattern.md
index 10db85273..10f26338f 100644
--- a/docs/design/test-suite-pattern.md
+++ b/docs/design/test-suite-pattern.md
@@ -183,7 +183,7 @@ class SAAJRITests extends SAAJTests {
| One class per test case | Required | Not required — tests are methods
returning `DynamicTest` |
| Boilerplate for saaj-testsuite | 10 files | 2–3 files |
| Test tree in IDE | Flat list with `[spec=SOAP11]` in name | Nested: SOAP11 >
testName, SOAP12 > testName |
-| Exclusion mechanism | LDAP filter on parameter dictionary | Conditional
logic, `@DisabledIf`, or `Assumptions.assumeThat()` |
+| Exclusion mechanism | LDAP filter on parameter dictionary | LDAP filter on
`MatrixTestNode` tree (see below) |
| Reusability across implementations | Subclass `TestCase` + pass factory to
builder | Subclass base test class + pass factory to constructor |
| Custom infrastructure needed | `MatrixTestSuiteBuilder`, `MatrixTestCase` |
None (built into JUnit 5) |
@@ -217,7 +217,7 @@ The larger suites present additional considerations:
output into `DynamicTest` instances would allow consuming modules to
migrate to
JUnit 5 runners without rewriting test case classes.
-### Replacement for MatrixTestSuiteBuilder: TestNode tree
+### Replacement for MatrixTestSuiteBuilder: MatrixTestNode tree
Since `DynamicContainer` and `DynamicTest` are `final` in JUnit 5, they cannot
be
subclassed to attach test parameters for LDAP-style filtering. Instead, a
parallel
@@ -231,10 +231,10 @@ parameters needed for exclusion filtering.
* Base class mirroring {@link DynamicNode}. Represents a node in the test tree
* that can be filtered before conversion to JUnit 5's dynamic test API.
*/
-abstract class TestNode {
+abstract class MatrixTestNode {
private final String displayName;
- TestNode(String displayName) {
+ MatrixTestNode(String displayName) {
this.displayName = displayName;
}
@@ -252,22 +252,22 @@ abstract class TestNode {
* Mirrors {@link DynamicContainer}. Represents a parameterized grouping level
* in the test tree (e.g. a SOAP version, a serialization strategy).
*
- * <p>Each {@code TestContainer} carries a single test parameter (name/value
pair).
- * The full parameter dictionary for any leaf {@code TestCase} is the
accumulation
- * of parameters from its ancestor {@code TestContainer} chain.
+ * <p>Each {@code MatrixTestContainer} carries a single test parameter
(name/value
+ * pair). The full parameter dictionary for any leaf {@code MatrixTestCase} is
the
+ * accumulation of parameters from its ancestor {@code MatrixTestContainer}
chain.
*/
-class TestContainer extends TestNode {
+class MatrixTestContainer extends MatrixTestNode {
private final String parameterName;
private final String parameterValue;
- private final List<TestNode> children = new ArrayList<>();
+ private final List<MatrixTestNode> children = new ArrayList<>();
- TestContainer(String displayName, String parameterName, String
parameterValue) {
- super(displayName);
+ MatrixTestContainer(String parameterName, String parameterValue) {
+ super(parameterName + "=" + parameterValue);
this.parameterName = parameterName;
this.parameterValue = parameterValue;
}
- void addChild(TestNode child) {
+ void addChild(MatrixTestNode child) {
children.add(child);
}
@@ -295,11 +295,11 @@ class TestContainer extends TestNode {
* Filtering is applied based on the accumulated parameters from ancestor
* containers plus the test class name.
*/
-class TestCase extends TestNode {
+class MatrixTestCase extends MatrixTestNode {
private final Class<?> testClass;
private final Executable executable;
- TestCase(String displayName, Class<?> testClass, Executable executable) {
+ MatrixTestCase(String displayName, Class<?> testClass, Executable
executable) {
super(displayName);
this.testClass = testClass;
this.executable = executable;
@@ -320,15 +320,15 @@ class TestCase extends TestNode {
#### How filtering works
-Each `TestContainer` level represents one test dimension and carries a single
parameter.
-As the tree is converted to `DynamicNode` instances via `toDynamicNode()`,
parameters
-accumulate from the root down:
+Each `MatrixTestContainer` level represents one test dimension and carries a
single
+parameter. As the tree is converted to `DynamicNode` instances via
`toDynamicNode()`,
+parameters accumulate from the root down:
```
-TestContainer("SOAP11", "spec", "soap11") → params: {spec=soap11}
- TestContainer("Text", "strategy", "text") → params: {spec=soap11,
strategy=text}
- TestCase("serializeToWriter", ...) → filtered against
{spec=soap11, strategy=text}
- TestCase("serializeToStream", ...) → filtered against
{spec=soap11, strategy=text}
+MatrixTestContainer("spec", "soap11") → params: {spec=soap11}
+ MatrixTestContainer("strategy", "text") → params: {spec=soap11,
strategy=text}
+ MatrixTestCase("serializeToWriter", ...) → filtered against
{spec=soap11, strategy=text}
+ MatrixTestCase("serializeToStream", ...) → filtered against
{spec=soap11, strategy=text}
```
Consumers apply exclusions exactly as they do today:
@@ -337,7 +337,7 @@ Consumers apply exclusions exactly as they do today:
class OMImplementationTests {
@TestFactory
Stream<DynamicNode> omTests() {
- TestContainer root = new OMTestTreeBuilder(metaFactory).build();
+ MatrixTestContainer root = new OMTestTreeBuilder(metaFactory).build();
List<Filter> excludes = new ArrayList<>();
excludes.add(Filter.forClass(TestSerialize.class, "(spec=soap12)"));
return root.toDynamicNode(new Hashtable<>(), excludes)
@@ -353,7 +353,7 @@ class OMImplementationTests {
* Parameters are distributed across the tree (one per container level)
rather than
accumulated on each leaf test case, making the structure explicit.
* Uses standard JUnit 5 `DynamicNode` for execution while keeping the
filtering
- infrastructure in the intermediate `TestNode` layer.
+ infrastructure in the intermediate `MatrixTestNode` layer.
* The LDAP-style filter mechanism is preserved unchanged.
### Hybrid approach: JUnit 5 adapter for MatrixTestSuiteBuilder