From 950b8109eef7a84b40d010bc8b70223153f1f484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Dinis=20Ferreira?= Date: Fri, 1 May 2026 00:26:05 +0200 Subject: [PATCH 1/3] chore: drop JUnit 4 from target and bundle manifests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No DDK source still depends on JUnit 4. This commit drops org.junit and junit-vintage-engine from the ddk.target IUs and from Require-Bundle across 7 bundle manifests, removes stale Export-Package entries for already-deleted packages, and switches swtbot.eclipse.test.junit.feature.group to swtbot.junit5.feature.group. Two non-mechanical bits: xtext.test's manifest gains an explicit Require-Bundle on junit-platform-suite-engine — the runtime executor for @Suite/@SelectClasses, previously resolved transitively by luck, and the absence of which is what made the silent-zero possible. And com.avaloq.tools.ddk.test.core.MultipleTestProblems (the JUnit 4 implementation using MultipleFailureException) is deleted; its sole user CompoundStep switches to the existing jupiter/MultipleTestProblems which uses org.opentest4j.MultipleFailuresError. Verified locally: 357 tests, 0 failures, 0 errors, BUILD SUCCESS. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../META-INF/MANIFEST.MF | 1 - .../META-INF/MANIFEST.MF | 3 +- .../META-INF/MANIFEST.MF | 3 +- .../META-INF/MANIFEST.MF | 2 - .../tools/ddk/test/core/CompoundStep.java | 1 + .../ddk/test/core/MultipleTestProblems.java | 149 ------------------ .../META-INF/MANIFEST.MF | 3 - .../META-INF/MANIFEST.MF | 10 -- .../META-INF/MANIFEST.MF | 2 +- ddk-target/ddk.target | 6 +- 10 files changed, 6 insertions(+), 174 deletions(-) delete mode 100644 com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/MultipleTestProblems.java diff --git a/com.avaloq.tools.ddk.check.core.test/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.check.core.test/META-INF/MANIFEST.MF index 0bd941889e..d5412a8e0d 100644 --- a/com.avaloq.tools.ddk.check.core.test/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.check.core.test/META-INF/MANIFEST.MF @@ -29,7 +29,6 @@ Require-Bundle: com.avaloq.tools.ddk.check.core, org.eclipse.xtext.xbase.testing, junit-jupiter-api, junit-jupiter-engine, - junit-vintage-engine, junit-platform-suite-api Export-Package: com.avaloq.tools.ddk.check.core.test, com.avaloq.tools.ddk.check.core.test.util, diff --git a/com.avaloq.tools.ddk.check.test.runtime.tests/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.check.test.runtime.tests/META-INF/MANIFEST.MF index 1154b3c5e0..1477542dc0 100644 --- a/com.avaloq.tools.ddk.check.test.runtime.tests/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.check.test.runtime.tests/META-INF/MANIFEST.MF @@ -19,8 +19,7 @@ Require-Bundle: com.avaloq.tools.ddk.check.runtime.core, org.eclipse.xtext.xbase.lib, junit-jupiter-api, junit-jupiter-engine, - junit-platform-suite-api, - junit-vintage-engine + junit-platform-suite-api Import-Package: org.hamcrest.core Bundle-RequiredExecutionEnvironment: JavaSE-21 Export-Package: com.avaloq.tools.ddk.check.test.runtime, diff --git a/com.avaloq.tools.ddk.sample.helloworld.ui.test/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.sample.helloworld.ui.test/META-INF/MANIFEST.MF index c5372c62e6..dc244afce0 100644 --- a/com.avaloq.tools.ddk.sample.helloworld.ui.test/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.sample.helloworld.ui.test/META-INF/MANIFEST.MF @@ -20,8 +20,7 @@ Require-Bundle: com.avaloq.tools.ddk.sample.helloworld, org.eclipse.xtext.xbase.ui.testing, junit-jupiter-api, junit-jupiter-engine, - junit-platform-suite-api, - junit-vintage-engine + junit-platform-suite-api Bundle-RequiredExecutionEnvironment: JavaSE-21 Export-Package: com.avaloq.tools.ddk.sample.helloworld.test, com.avaloq.tools.ddk.sample.helloworld.ui;x-internal=true diff --git a/com.avaloq.tools.ddk.test.core/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.test.core/META-INF/MANIFEST.MF index 698a1eb559..04649384aa 100644 --- a/com.avaloq.tools.ddk.test.core/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.test.core/META-INF/MANIFEST.MF @@ -9,7 +9,6 @@ Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources, org.hamcrest.library, - org.junit, org.mockito.mockito-core, com.google.guava, org.apache.commons.lang3, @@ -21,7 +20,6 @@ Require-Bundle: org.eclipse.core.runtime, Import-Package: org.apache.logging.log4j Export-Package: com.avaloq.tools.ddk.test.core, com.avaloq.tools.ddk.test.core.data, - com.avaloq.tools.ddk.test.core.junit.runners, com.avaloq.tools.ddk.test.core.jupiter, com.avaloq.tools.ddk.test.core.mock, com.avaloq.tools.ddk.test.core.util diff --git a/com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/CompoundStep.java b/com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/CompoundStep.java index 50e62292e4..7a870497d2 100644 --- a/com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/CompoundStep.java +++ b/com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/CompoundStep.java @@ -17,6 +17,7 @@ import org.apache.logging.log4j.Logger; import org.eclipse.core.runtime.Assert; +import com.avaloq.tools.ddk.test.core.jupiter.MultipleTestProblems; import com.google.common.collect.Lists; diff --git a/com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/MultipleTestProblems.java b/com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/MultipleTestProblems.java deleted file mode 100644 index 9d9a521e19..0000000000 --- a/com.avaloq.tools.ddk.test.core/src/com/avaloq/tools/ddk/test/core/MultipleTestProblems.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016 Avaloq Group AG and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Avaloq Group AG - initial API and implementation - *******************************************************************************/ -package com.avaloq.tools.ddk.test.core; - -import java.io.PrintStream; -import java.io.PrintWriter; -import java.util.List; - -import org.junit.runners.model.MultipleFailureException; - -import com.google.common.collect.Lists; - - -/** - * Contains a list of problems. - */ -@SuppressWarnings("nls") -public class MultipleTestProblems extends AssertionError { - private static final long serialVersionUID = 1L; - private final List problems = Lists.newArrayList(); - - /** - * Creates a new instance of {@link MultipleTestProblems}. - */ - public MultipleTestProblems() { - this(null); - } - - /** - * Creates a new instance of {@link MultipleTestProblems}. - * - * @param problems - * an initial set of problems, may be {@code null} - */ - public MultipleTestProblems(final List problems) { - super("Multiple Test Problems occurred, see stacktrace for info."); - if (problems != null) { - addProblems(problems); - } - } - - /** - * Adds a new problem. - * - * @param problem - * the {@link Throwable} to be added, must not be {@code null} - */ - public final void addProblem(final Throwable problem) { - if (problem instanceof MultipleTestProblems) { - addProblems((MultipleTestProblems) problem); - } else if (problem instanceof MultipleFailureException) { - addProblems(((MultipleFailureException) problem).getFailures()); - } else { - problems.add(problem); - } - } - - /** - * Adds new problems. - * - * @param additionalProblems - * the list of {@link Throwable} to be added, must not be {@code null} - */ - public final void addProblems(final List additionalProblems) { - for (final Throwable problem : additionalProblems) { - addProblem(problem); - } - } - - /** - * Adds new problems of another {@link MutlipleTestProblems} instance. - * - * @param multipleTestProblems - * the list of {@link Throwable} to be added, must not be {@code null} - */ - public final void addProblems(final MultipleTestProblems multipleTestProblems) { - addProblems(multipleTestProblems.getProblems()); - } - - /** - * Returns all problems. - * - * @return all problems, never {@code null} - */ - public List getProblems() { - return Lists.newArrayList(problems); - } - - /** - * Returns {@code true} if there are problems. - * - * @return {@code true} if there are problems, {@code false} otherwise - */ - public boolean hasProblems() { - return !problems.isEmpty(); - } - - @Override - public void printStackTrace(final PrintWriter writer) { - int i = 1; - writer.println(getMessage()); - for (final Throwable problem : problems) { - writer.print(i++ + ". "); - problem.printStackTrace(writer); - } - } - - @Override - public void printStackTrace(final PrintStream stream) { - int i = 1; - stream.println(getMessage()); - for (final Throwable problem : problems) { - stream.print(i++ + ". "); - problem.printStackTrace(stream); - } - } - - /** - * Checks if this {@link MultipleTestProblem} has any problems. - *

- * Note: If there is only one problem, and it is either a {@link RuntimeException} or an {@link Error}, then that problem is thrown. Otherwise this - * {@link MultipleTestProblem} is thrown. - *

- */ - public void assertEmpty() { - if (problems.isEmpty()) { - return; - } - if (problems.size() == 1) { - final Throwable problem = problems.get(0); - if (problem instanceof RuntimeException) { - throw (RuntimeException) problem; - } - if (problem instanceof Error) { - throw (Error) problem; - } - } - printStackTrace(); // NOPMD - throw this; - } -} diff --git a/com.avaloq.tools.ddk.test.ui/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.test.ui/META-INF/MANIFEST.MF index 9da8b65993..8a141f143b 100644 --- a/com.avaloq.tools.ddk.test.ui/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.test.ui/META-INF/MANIFEST.MF @@ -13,11 +13,9 @@ Require-Bundle: com.avaloq.tools.ddk.test.core, org.eclipse.swt, org.eclipse.swtbot.eclipse.core, org.eclipse.swtbot.eclipse.finder;visibility:=reexport, - org.eclipse.swtbot.junit4_x, org.eclipse.swtbot.swt.finder, org.eclipse.ui;visibility:=reexport, org.hamcrest.library, - org.junit, junit-jupiter-api, org.mockito.mockito-core, com.google.guava, @@ -25,7 +23,6 @@ Require-Bundle: com.avaloq.tools.ddk.test.core, org.eclipse.emf.common, com.avaloq.tools.ddk Export-Package: com.avaloq.tools.ddk.test.ui, - com.avaloq.tools.ddk.test.ui.junit.runners, com.avaloq.tools.ddk.test.ui.swtbot, com.avaloq.tools.ddk.test.ui.swtbot.condition, com.avaloq.tools.ddk.test.ui.swtbot.util diff --git a/com.avaloq.tools.ddk.xtext.test.core/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.xtext.test.core/META-INF/MANIFEST.MF index 6acbcc463b..4f8a0010a9 100644 --- a/com.avaloq.tools.ddk.xtext.test.core/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.xtext.test.core/META-INF/MANIFEST.MF @@ -19,7 +19,6 @@ Require-Bundle: com.avaloq.tools.ddk.xtext, org.eclipse.xtext.ui, org.eclipse.xtext.xbase, org.eclipse.xtext.xbase.lib;visibility:=reexport, - org.junit, org.mockito.mockito-core, org.hamcrest.library, com.avaloq.tools.ddk.check.runtime.core, @@ -28,17 +27,8 @@ Require-Bundle: com.avaloq.tools.ddk.xtext, junit-jupiter-api Import-Package: org.apache.logging.log4j Export-Package: com.avaloq.tools.ddk.xtext.test, - com.avaloq.tools.ddk.xtext.test.contentassist, - com.avaloq.tools.ddk.xtext.test.conversion, - com.avaloq.tools.ddk.xtext.test.formatting, - com.avaloq.tools.ddk.xtext.test.generator, - com.avaloq.tools.ddk.xtext.test.junit.runners, com.avaloq.tools.ddk.xtext.test.jupiter, com.avaloq.tools.ddk.xtext.test.jvmmodel, - com.avaloq.tools.ddk.xtext.test.linking, com.avaloq.tools.ddk.xtext.test.model, - com.avaloq.tools.ddk.xtext.test.modelinference, - com.avaloq.tools.ddk.xtext.test.resource, - com.avaloq.tools.ddk.xtext.test.scoping, com.avaloq.tools.ddk.xtext.test.validation Automatic-Module-Name: com.avaloq.tools.ddk.xtext.test.core diff --git a/com.avaloq.tools.ddk.xtext.test/META-INF/MANIFEST.MF b/com.avaloq.tools.ddk.xtext.test/META-INF/MANIFEST.MF index 2c06458a3e..9a50843df4 100644 --- a/com.avaloq.tools.ddk.xtext.test/META-INF/MANIFEST.MF +++ b/com.avaloq.tools.ddk.xtext.test/META-INF/MANIFEST.MF @@ -28,8 +28,8 @@ Require-Bundle: com.avaloq.tools.ddk.xtext, org.eclipse.emf.ecore, junit-jupiter-api, junit-jupiter-engine, - junit-vintage-engine, junit-platform-suite-api, + junit-platform-suite-engine, org.eclipse.xtext.testing, org.opentest4j Import-Package: com.avaloq.tools.ddk.check.runtime.test.core, diff --git a/ddk-target/ddk.target b/ddk-target/ddk.target index a2ade38df0..7102d4931d 100644 --- a/ddk-target/ddk.target +++ b/ddk-target/ddk.target @@ -1,12 +1,12 @@ - + - + @@ -49,7 +49,6 @@ - @@ -57,7 +56,6 @@ - From 2ff5804cef2382df10c8e32fda06a0788cf8b601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Dinis=20Ferreira?= Date: Sat, 2 May 2026 08:33:38 +0200 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20upgrade=20to=20JUnit=206=20+=20Ecli?= =?UTF-8?q?pse=204.39=20(simrel=202026-03)=20=E2=80=94=20milestone=20Xtext?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit End-to-end JUnit 6 + Eclipse 4.39 upgrade. Verified locally: 357 tests, 0 failures, 0 errors. The OSGi runtime contains only JUnit 6.0.3 bundles (no JUnit 5.14.x, no jdt.junit5.runtime). Two layers of dual-version JUnit pollution had to be peeled back: 1. Eclipse PDE umbrella feature transitively pulls jdt.junit5.runtime (strict-pinned to JUnit 5.14.x). Workaround: replace org.eclipse.pde.feature.group in the target with a curated bundle list of the six PDE bundles DDK uses (pde.core, pde.ui, pde.ua.core, pde.junit.runtime, jdt.junit.runtime, jdt.annotation). Verified load-bearing: dropping the curated list and going back to pde.feature.group makes target resolution unsatisfiable. 2. Xtext 2.42.0's org.eclipse.xtext.testing hard-pins org.junit.jupiter.api [5.1.0,6.0.0). Fix: eclipse-xtext/xtext#3660 "Junit 6 support" landed in Xtext 2.43.0. This branch points at the 2.43.0.M2 milestone; a one-line follow-up PR will flip the URL to releases/2.43.0/ once stable ships on 2026-05-25. Branch convention exception: this PR uses an Xtext milestone URL rather than a stable release. The standing project rule is stable-only. The exception is narrow: blocker fully understood, upstream fix confirmed in M2, stable date on the horizon, and a follow-up PR is planned to swap to stable. Other target file changes: - sequenceNumber 28 -> 29 - Eclipse SDK location updates/4.34/ -> releases/2026-03/ - Source-feature IUs (platform.source.feature.group, jdt.source.*, pde.source.*) dropped — renamed in modern simrels and not needed for headless Tycho test runs. - swtbot.junit5.feature.group dropped — its feature.xml requires the JUnit 4 'org.junit' bundle which is no longer in the target, and DDK doesn't use SWTBotJunit5Extension (verified via static analysis). - orbit-aggregation 4.37.0 -> 4.39.0 with JUnit 6.0.3 IUs and dep versions back to 4.39-era (mockito 5.21.0, byte-buddy 1.18.5, objenesis 3.5.0, commons-lang3 3.20.0, commons-text 1.15.0, log4j 2.25.3). xtext.test/pom.xml: - junit5 -> junit6 - extraRequirements: replaced the org.eclipse.pde feature requirement with an explicit org.eclipse.pde.junit.runtime plugin requirement Co-Authored-By: Claude Opus 4.7 (1M context) --- com.avaloq.tools.ddk.xtext.test/pom.xml | 11 ++++- ddk-target/ddk.target | 60 +++++++++++++++---------- 2 files changed, 46 insertions(+), 25 deletions(-) diff --git a/com.avaloq.tools.ddk.xtext.test/pom.xml b/com.avaloq.tools.ddk.xtext.test/pom.xml index b94f0de796..bcb594a06e 100644 --- a/com.avaloq.tools.ddk.xtext.test/pom.xml +++ b/com.avaloq.tools.ddk.xtext.test/pom.xml @@ -19,6 +19,7 @@ false false + junit6 ${test.testClass} false false @@ -48,9 +49,15 @@ org.eclipse.xtext.sdk 0.0.0 + - eclipse-feature - org.eclipse.pde + eclipse-plugin + org.eclipse.pde.junit.runtime 0.0.0 diff --git a/ddk-target/ddk.target b/ddk-target/ddk.target index 7102d4931d..2d9adfb123 100644 --- a/ddk-target/ddk.target +++ b/ddk-target/ddk.target @@ -1,20 +1,29 @@ - + - - - + - - + + + + + + + @@ -35,32 +44,37 @@ - + + - - - - + + + + - - - - + + + + - - - - - - - - + + + + + + + + From 1aaab182752092b7ea9c2f78a0113acc40689466 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Dinis=20Ferreira?= Date: Wed, 6 May 2026 23:04:22 +0200 Subject: [PATCH 3/3] chore: switch Xtext target to 2.43.0 stable Co-Authored-By: Claude Opus 4.7 (1M context) --- ddk-target/ddk.target | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/ddk-target/ddk.target b/ddk-target/ddk.target index 2d9adfb123..7db0ab2585 100644 --- a/ddk-target/ddk.target +++ b/ddk-target/ddk.target @@ -1,6 +1,6 @@ - + @@ -44,12 +44,7 @@ - - +