diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/.classpath b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/.classpath new file mode 100644 index 0000000000..42e20b6d54 --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/.classpath @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/META-INF/MANIFEST.MF b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..cf690342c7 --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/META-INF/MANIFEST.MF @@ -0,0 +1,9 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Test Plug-in +Bundle-SymbolicName: bundle.test5 +Bundle-Version: 1.0.0 +Import-Package: javax.annotation, + org.osgi.framework +Automatic-Module-Name: bundle.test5 +Bundle-RequiredExecutionEnvironment: JavaSE-11 diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/build.properties b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/build.properties new file mode 100644 index 0000000000..92fe2f2b3b --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/build.properties @@ -0,0 +1,4 @@ +source.. = src/,src2/ +output.. = bin/ +bin.includes = META-INF/,\ + . diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/pom.xml b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/pom.xml new file mode 100644 index 0000000000..59fc27d97c --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + org.eclipse.tycho.tycho-its.surefire + bundle.test5 + eclipse-plugin + 1.0.0 + + https:////download.eclipse.org/releases/2022-12/ + 4.0.0-SNAPSHOT + + + + platform + ${target-platform} + p2 + + + + + + org.eclipse.tycho + tycho-maven-plugin + ${tycho-version} + true + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + org.apache.maven.surefire + surefire-junit47 + 3.0.0-M5 + + + + + execute-tests + + test + + + + + + + diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src/bundle/test/CountDown.java b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src/bundle/test/CountDown.java new file mode 100644 index 0000000000..ca27d5b7c4 --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src/bundle/test/CountDown.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2021 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich. - initial API and implementation + *******************************************************************************/ +package bundle.test; + +public class CountDown { + + RefMe refFromOtherSourceFolder; + + int count; + + public CountDown(int initalValue) { + count = initalValue; + } + + public void decrement(int x) { + if (x < 0) { + throw new IllegalArgumentException(); + } + if (count-x < 0) { + throw new IllegalStateException(); + } + count -= x; + } + + public int get() { + return count; + } +} diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src/bundle/test/Counter.java b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src/bundle/test/Counter.java new file mode 100644 index 0000000000..133e1b749b --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src/bundle/test/Counter.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2021 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich. - initial API and implementation + *******************************************************************************/ +package bundle.test; + +public class Counter { + + int count; + + public void increment(int x) { + if (x < 0) { + throw new IllegalArgumentException(); + } + count += x; + } + + public int get() { + return count; + } +} diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src2/bundle/test/RefMe.java b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src2/bundle/test/RefMe.java new file mode 100644 index 0000000000..2b479d82e1 --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src2/bundle/test/RefMe.java @@ -0,0 +1,18 @@ +/******************************************************************************* + * Copyright (c) 2021 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich. - initial API and implementation + *******************************************************************************/ + +package bundle.test; + +public class RefMe extends Counter{ + +} diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src_test/bundle/test/AdderTest.java b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src_test/bundle/test/AdderTest.java new file mode 100644 index 0000000000..e91f3fcf5b --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src_test/bundle/test/AdderTest.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2021 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich. - initial API and implementation + *******************************************************************************/ +package bundle.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class AdderTest { + + @org.junit.jupiter.api.Test + public void incrementTest() { + Counter counter = new Counter(); + counter.increment(1); + counter.increment(3); + assertEquals(4, counter.get()); + } + + @org.junit.jupiter.api.Test + public void decrementTest() { + assertThrows(IllegalArgumentException.class, ()->{ + Counter counter = new Counter(); + counter.increment(-1); + }); + } +} diff --git a/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src_test/bundle/test/SubtractorTest.java b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src_test/bundle/test/SubtractorTest.java new file mode 100644 index 0000000000..93100efa18 --- /dev/null +++ b/tycho-its/projects/surefire.combinedtests/bundle5.no.vintage.test/src_test/bundle/test/SubtractorTest.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2021 Christoph Läubrich and others. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Christoph Läubrich - initial API and implementation + *******************************************************************************/ +package bundle.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class SubtractorTest { + + @Test + public void incrementTest() { + CountDown counter = new CountDown(10); + counter.decrement(1); + counter.decrement(3); + assertEquals(6, counter.get()); + } + + @Test(expected = IllegalArgumentException.class) + public void decrementTest() { + CountDown counter = new CountDown(10); + counter.decrement(-1); + } + + @Test(expected = IllegalStateException.class) + public void decrementTest2() { + CountDown counter = new CountDown(1); + counter.decrement(5); + } +} diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/TestsInBundleTest.java b/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/TestsInBundleTest.java index dea4602f6c..d21704006e 100644 --- a/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/TestsInBundleTest.java +++ b/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/TestsInBundleTest.java @@ -47,6 +47,15 @@ public void testCompile5() throws Exception { new File(verifier.getBasedir(), "target/test-classes/bundle/test/AdderTest.class").exists()); } + @Test + public void testCompile5WithoutVintage() throws Exception { + Verifier verifier = getVerifier("surefire.combinedtests/bundle5.no.vintage.test"); + assertThrows("Compilation must fail because the usage of junit 4 annotations", VerificationException.class, + () -> verifier.executeGoals(Arrays.asList("clean", "test-compile"))); + verifier.verifyTextInLog("The import org.junit.Assert cannot be resolved"); + verifier.verifyTextInLog("The import org.junit.Test cannot be resolved"); + } + @Test public void testTest() throws Exception { Verifier verifier = getVerifier("surefire.combinedtests/bundle.test"); diff --git a/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/ClasspathParser.java b/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/ClasspathParser.java index 01a2459bcb..65f654596e 100644 --- a/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/ClasspathParser.java +++ b/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/ClasspathParser.java @@ -220,11 +220,24 @@ public Collection getArtifacts() { } else if (JUNIT4.equals(junit)) { return JUNIT4_PLUGINS; } else if (JUNIT5.equals(junit)) { - return JUNIT5_PLUGINS; + if (isVintage()) { + return JUNIT5_PLUGINS; + } else { + return JUNIT5_WITHOUT_VINTAGE_PLUGINS; + } } return Collections.emptyList(); } + @Override + public boolean isVintage() { + String vintage = getAttributes().get("vintage"); + if (vintage != null && !vintage.isBlank()) { + return Boolean.parseBoolean(vintage); + } + return true; + } + } private static class JDTContainerClasspathEntry implements ClasspathContainerEntry { diff --git a/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/JUnitClasspathContainerEntry.java b/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/JUnitClasspathContainerEntry.java index 157e46f1f5..3d66bf10db 100644 --- a/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/JUnitClasspathContainerEntry.java +++ b/tycho-metadata-model/src/main/java/org/eclipse/tycho/model/classpath/JUnitClasspathContainerEntry.java @@ -76,6 +76,12 @@ public interface JUnitClasspathContainerEntry extends ClasspathContainerEntry { JUNIT_PLATFORM_SUITE_API_PLUGIN, JUNIT_VINTAGE_ENGINE_PLUGIN, JUNIT_OPENTEST4J_PLUGIN, JUNIT_APIGUARDIAN_PLUGIN, JUNIT4_PLUGIN, HAMCREST_CORE_PLUGIN); + static final List JUNIT5_WITHOUT_VINTAGE_PLUGINS = List.of(JUNIT_JUPITER_API_PLUGIN, + JUNIT_JUPITER_ENGINE_PLUGIN, JUNIT_JUPITER_MIGRATIONSUPPORT_PLUGIN, JUNIT_JUPITER_PARAMS_PLUGIN, + JUNIT_PLATFORM_COMMONS_PLUGIN, JUNIT_PLATFORM_ENGINE_PLUGIN, JUNIT_PLATFORM_LAUNCHER_PLUGIN, + JUNIT_PLATFORM_RUNNER_PLUGIN, JUNIT_PLATFORM_SUITE_API_PLUGIN, JUNIT_OPENTEST4J_PLUGIN, + JUNIT_APIGUARDIAN_PLUGIN, HAMCREST_CORE_PLUGIN); + /** * * @return the JUnit part of the path @@ -93,4 +99,12 @@ default boolean isTest() { return true; } + /** + * Checks if for JUnit5 the vintage engine has to be included. This is only meaningful if + * {@link #getJUnitSegment()} is equal to {@link #JUNIT5} + * + * @return true if vintage is enabled (the default) + */ + boolean isVintage(); + }