This closes #93 pull request at github/apache/ant repomaster
| @@ -281,6 +281,7 @@ Matthew Warman | |||||
| Matthew Watson | Matthew Watson | ||||
| Matthew Yanos | Matthew Yanos | ||||
| Matthias Bhend | Matthias Bhend | ||||
| Matthias Gutheil | |||||
| Michael Bayne | Michael Bayne | ||||
| Michael Clarke | Michael Clarke | ||||
| Michael Davey | Michael Davey | ||||
| @@ -12,6 +12,13 @@ Fixed bugs: | |||||
| has now been fixed. | has now been fixed. | ||||
| Bugzilla Report 63446 | Bugzilla Report 63446 | ||||
| Other changes: | |||||
| -------------- | |||||
| * junitlauncher task now supports selecting test classes for execution, | |||||
| based on the JUnit 5 tags, through the new "includeTags" and | |||||
| "excludeTags" attributes. | |||||
| Changes from Ant 1.10.5 TO Ant 1.10.6 | Changes from Ant 1.10.5 TO Ant 1.10.6 | ||||
| ===================================== | ===================================== | ||||
| @@ -1167,6 +1167,10 @@ | |||||
| <first>Matthias</first> | <first>Matthias</first> | ||||
| <last>Bhend</last> | <last>Bhend</last> | ||||
| </name> | </name> | ||||
| <name> | |||||
| <first>Matthias</first> | |||||
| <last>Gutheil</last> | |||||
| </name> | |||||
| <name> | <name> | ||||
| <first>Michael</first> | <first>Michael</first> | ||||
| <last>Bayne</last> | <last>Bayne</last> | ||||
| @@ -129,6 +129,20 @@ | |||||
| <th scope="col">Description</th> | <th scope="col">Description</th> | ||||
| <th scope="col">Required</th> | <th scope="col">Required</th> | ||||
| </tr> | </tr> | ||||
| <tr> | |||||
| <td>includeTags</td> | |||||
| <td>A comma separated list of <a href="https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations">JUnit 5 tags</a>, describing the tests to include. | |||||
| <p><em>Since Ant 1.10.7</em></p> | |||||
| </td> | |||||
| <td>No</td> | |||||
| </tr> | |||||
| <tr> | |||||
| <td>excludeTags</td> | |||||
| <td>A comma separated list of <a href="https://junit.org/junit5/docs/current/user-guide/#writing-tests-annotations">JUnit 5 tags</a>, describing the tests to exclude. | |||||
| <p><em>Since Ant 1.10.7</em></p> | |||||
| </td> | |||||
| <td>No</td> | |||||
| </tr> | |||||
| <tr> | <tr> | ||||
| <td>haltOnFailure</td> | <td>haltOnFailure</td> | ||||
| <td>A value of <q>true</q> implies that build has to stop if any failure occurs in any of | <td>A value of <q>true</q> implies that build has to stop if any failure occurs in any of | ||||
| @@ -268,5 +268,70 @@ | |||||
| </testclasses> | </testclasses> | ||||
| </junitlauncher> | </junitlauncher> | ||||
| </target> | </target> | ||||
| <target name="test-method-with-include-tag" depends="init"> | |||||
| <!-- junitlauncher includeTags="fast, superfast" excludeTags="slow"--> | |||||
| <junitlauncher includeTags=" fast , superfast" excludeTags=" slow"> | |||||
| <test name="org.example.junitlauncher.jupiter.JupiterSampleTest" outputdir="${output.dir}"> | |||||
| <listener classname="org.example.junitlauncher.Tracker" outputDir="${output.dir}" | |||||
| resultFile="${test-method-with-include-tag.tracker}" if="test-method-with-include-tag.tracker" /> | |||||
| </test> | |||||
| </junitlauncher> | |||||
| </target> | |||||
| <target name="test-method-with-exclude-tag" depends="init"> | |||||
| <junitlauncher excludeTags="slow"> | |||||
| <test name="org.example.junitlauncher.jupiter.JupiterSampleTest" outputdir="${output.dir}"> | |||||
| <listener classname="org.example.junitlauncher.Tracker" outputDir="${output.dir}" | |||||
| resultFile="${test-method-with-exclude-tag.tracker}" if="test-method-with-exclude-tag.tracker" /> | |||||
| </test> | |||||
| </junitlauncher> | |||||
| </target> | |||||
| <target name="test-method-with-tag-2-classes" depends="init"> | |||||
| <junitlauncher includeTags="fast"> | |||||
| <test name="org.example.junitlauncher.jupiter.JupiterSampleTest" outputdir="${output.dir}"> | |||||
| <listener classname="org.example.junitlauncher.Tracker" outputDir="${output.dir}" | |||||
| resultFile="${test-method-with-tag-2-classes1.tracker}" if="test-method-with-tag-2-classes1.tracker" /> | |||||
| </test> | |||||
| <test name="org.example.junitlauncher.jupiter.JupiterTagSampleTest" outputdir="${output.dir}"> | |||||
| <listener classname="org.example.junitlauncher.Tracker" outputDir="${output.dir}" | |||||
| resultFile="${test-method-with-tag-2-classes2.tracker}" if="test-method-with-tag-2-classes2.tracker" /> | |||||
| </test> | |||||
| </junitlauncher> | |||||
| </target> | |||||
| <target name="test-method-with-tag-fileset" depends="init"> | |||||
| <property name="junitlauncher.test.tracker.append.file" value="${output.dir}/${test-method-with-tag-fileset.tracker}"/> | |||||
| <junitlauncher includeTags="fast"> | |||||
| <testclasses outputdir="${output.dir}"> | |||||
| <fileset dir="${build.classes.dir}"> | |||||
| <include name="org/example/junitlauncher/jupiter/*" /> | |||||
| </fileset> | |||||
| <listener classname="org.example.junitlauncher.Tracker" outputDir="${output.dir}" | |||||
| if="test-method-with-tag-fileset.tracker" /> | |||||
| </testclasses> | |||||
| </junitlauncher> | |||||
| </target> | |||||
| <target name="test-method-with-tag-fileset-fork" depends="init"> | |||||
| <property name="junitlauncher.test.tracker.append.file" value="${output.dir}/${test-method-with-tag-fileset-fork.tracker}" /> | |||||
| <junitlauncher includeTags="fast"> | |||||
| <classpath refid="junit.engine.jupiter.classpath" /> | |||||
| <classpath> | |||||
| <pathelement location="${build.classes.dir}" /> | |||||
| </classpath> | |||||
| <classpath refid="junit.platform.classpath" /> | |||||
| <testclasses outputdir="${output.dir}"> | |||||
| <fileset dir="${build.classes.dir}"> | |||||
| <include name="org/example/junitlauncher/jupiter/*" /> | |||||
| </fileset> | |||||
| <fork dir="${basedir}" includeJUnitPlatformLibraries="false"> | |||||
| </fork> | |||||
| <listener classname="org.example.junitlauncher.Tracker" outputDir="${output.dir}" | |||||
| if="test-method-with-tag-fileset-fork.tracker" /> | |||||
| </testclasses> | |||||
| </junitlauncher> | |||||
| </target> | |||||
| </project> | </project> | ||||
| @@ -18,6 +18,7 @@ | |||||
| package org.apache.tools.ant.taskdefs.optional.junitlauncher; | package org.apache.tools.ant.taskdefs.optional.junitlauncher; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.MagicNames; | import org.apache.tools.ant.MagicNames; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| @@ -34,6 +35,7 @@ import org.junit.platform.engine.discovery.DiscoverySelectors; | |||||
| import org.junit.platform.launcher.EngineFilter; | import org.junit.platform.launcher.EngineFilter; | ||||
| import org.junit.platform.launcher.Launcher; | import org.junit.platform.launcher.Launcher; | ||||
| import org.junit.platform.launcher.LauncherDiscoveryRequest; | import org.junit.platform.launcher.LauncherDiscoveryRequest; | ||||
| import org.junit.platform.launcher.TagFilter; | |||||
| import org.junit.platform.launcher.TestExecutionListener; | import org.junit.platform.launcher.TestExecutionListener; | ||||
| import org.junit.platform.launcher.TestPlan; | import org.junit.platform.launcher.TestPlan; | ||||
| import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; | import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; | ||||
| @@ -463,6 +465,13 @@ public class LauncherSupport { | |||||
| if (enginesToExclude != null && enginesToExclude.length > 0) { | if (enginesToExclude != null && enginesToExclude.length > 0) { | ||||
| requestBuilder.filters(EngineFilter.excludeEngines(enginesToExclude)); | requestBuilder.filters(EngineFilter.excludeEngines(enginesToExclude)); | ||||
| } | } | ||||
| // add any tag filters | |||||
| if (this.launchDefinition.getIncludeTags().size() > 0) { | |||||
| requestBuilder.filters(TagFilter.includeTags(this.launchDefinition.getIncludeTags())); | |||||
| } | |||||
| if (this.launchDefinition.getExcludeTags().size() > 0) { | |||||
| requestBuilder.filters(TagFilter.excludeTags(this.launchDefinition.getExcludeTags())); | |||||
| } | |||||
| } | } | ||||
| private enum StreamType { | private enum StreamType { | ||||
| @@ -39,18 +39,22 @@ import java.util.Collections; | |||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Optional; | import java.util.Optional; | ||||
| import java.util.Properties; | import java.util.Properties; | ||||
| import java.util.stream.Stream; | |||||
| import static javax.xml.stream.XMLStreamConstants.END_DOCUMENT; | import static javax.xml.stream.XMLStreamConstants.END_DOCUMENT; | ||||
| import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; | import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; | ||||
| import static javax.xml.stream.XMLStreamConstants.START_DOCUMENT; | import static javax.xml.stream.XMLStreamConstants.START_DOCUMENT; | ||||
| import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; | import static javax.xml.stream.XMLStreamConstants.START_ELEMENT; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_EXCLUDE_TAGS; | |||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_HALT_ON_FAILURE; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_HALT_ON_FAILURE; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_INCLUDE_TAGS; | |||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_PRINT_SUMMARY; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_PRINT_SUMMARY; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_LAUNCH_DEF; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_LAUNCH_DEF; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_LISTENER; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_LISTENER; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_TEST; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_TEST; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_TEST_CLASSES; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_TEST_CLASSES; | ||||
| /** | /** | ||||
| * Used for launching forked tests from the {@link JUnitLauncherTask}. | * Used for launching forked tests from the {@link JUnitLauncherTask}. | ||||
| * <p> | * <p> | ||||
| @@ -140,6 +144,14 @@ public class StandaloneLauncher { | |||||
| if (haltOnfFailure != null) { | if (haltOnfFailure != null) { | ||||
| forkedLaunch.setHaltOnFailure(Boolean.parseBoolean(haltOnfFailure)); | forkedLaunch.setHaltOnFailure(Boolean.parseBoolean(haltOnfFailure)); | ||||
| } | } | ||||
| final String includeTags = reader.getAttributeValue(null, LD_XML_ATTR_INCLUDE_TAGS); | |||||
| if (includeTags != null) { | |||||
| Stream.of(includeTags.split(",")).forEach(i -> forkedLaunch.addIncludeTag(i)); | |||||
| } | |||||
| final String excludeTags = reader.getAttributeValue(null, LD_XML_ATTR_EXCLUDE_TAGS); | |||||
| if (excludeTags != null) { | |||||
| Stream.of(excludeTags.split(",")).forEach(e -> forkedLaunch.addExcludeTag(e)); | |||||
| } | |||||
| final String printSummary = reader.getAttributeValue(null, LD_XML_ATTR_PRINT_SUMMARY); | final String printSummary = reader.getAttributeValue(null, LD_XML_ATTR_PRINT_SUMMARY); | ||||
| if (printSummary != null) { | if (printSummary != null) { | ||||
| forkedLaunch.setPrintSummary(Boolean.parseBoolean(printSummary)); | forkedLaunch.setPrintSummary(Boolean.parseBoolean(printSummary)); | ||||
| @@ -204,6 +216,8 @@ public class StandaloneLauncher { | |||||
| private boolean haltOnFailure; | private boolean haltOnFailure; | ||||
| private List<TestDefinition> tests = new ArrayList<>(); | private List<TestDefinition> tests = new ArrayList<>(); | ||||
| private List<ListenerDefinition> listeners = new ArrayList<>(); | private List<ListenerDefinition> listeners = new ArrayList<>(); | ||||
| private List<String> includeTags = new ArrayList<>(); | |||||
| private List<String> excludeTags = new ArrayList<>(); | |||||
| @Override | @Override | ||||
| public List<TestDefinition> getTests() { | public List<TestDefinition> getTests() { | ||||
| @@ -249,5 +263,23 @@ public class StandaloneLauncher { | |||||
| public ClassLoader getClassLoader() { | public ClassLoader getClassLoader() { | ||||
| return this.getClass().getClassLoader(); | return this.getClass().getClassLoader(); | ||||
| } | } | ||||
| void addIncludeTag(final String filter) { | |||||
| this.includeTags.add(filter); | |||||
| } | |||||
| @Override | |||||
| public List<String> getIncludeTags() { | |||||
| return includeTags; | |||||
| } | |||||
| void addExcludeTag(final String filter) { | |||||
| this.excludeTags.add(filter); | |||||
| } | |||||
| @Override | |||||
| public List<String> getExcludeTags() { | |||||
| return excludeTags; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -36,6 +36,8 @@ public final class Constants { | |||||
| public static final String LD_XML_ELM_TEST = "test"; | public static final String LD_XML_ELM_TEST = "test"; | ||||
| public static final String LD_XML_ELM_TEST_CLASSES = "test-classes"; | public static final String LD_XML_ELM_TEST_CLASSES = "test-classes"; | ||||
| public static final String LD_XML_ATTR_HALT_ON_FAILURE = "haltOnFailure"; | public static final String LD_XML_ATTR_HALT_ON_FAILURE = "haltOnFailure"; | ||||
| public static final String LD_XML_ATTR_INCLUDE_TAGS = "includeTags"; | |||||
| public static final String LD_XML_ATTR_EXCLUDE_TAGS = "excludeTags"; | |||||
| public static final String LD_XML_ATTR_OUTPUT_DIRECTORY = "outDir"; | public static final String LD_XML_ATTR_OUTPUT_DIRECTORY = "outDir"; | ||||
| public static final String LD_XML_ATTR_INCLUDE_ENGINES = "includeEngines"; | public static final String LD_XML_ATTR_INCLUDE_ENGINES = "includeEngines"; | ||||
| public static final String LD_XML_ATTR_EXCLUDE_ENGINES = "excludeEngines"; | public static final String LD_XML_ATTR_EXCLUDE_ENGINES = "excludeEngines"; | ||||
| @@ -41,12 +41,17 @@ import java.util.Collections; | |||||
| import java.util.Hashtable; | import java.util.Hashtable; | ||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Properties; | import java.util.Properties; | ||||
| import java.util.StringTokenizer; | |||||
| import java.util.concurrent.TimeoutException; | import java.util.concurrent.TimeoutException; | ||||
| import java.util.stream.Collectors; | |||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_EXCLUDE_TAGS; | |||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_HALT_ON_FAILURE; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_HALT_ON_FAILURE; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_INCLUDE_TAGS; | |||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_PRINT_SUMMARY; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ATTR_PRINT_SUMMARY; | ||||
| import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_LAUNCH_DEF; | import static org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.Constants.LD_XML_ELM_LAUNCH_DEF; | ||||
| /** | /** | ||||
| * An Ant {@link Task} responsible for launching the JUnit platform for running tests. | * An Ant {@link Task} responsible for launching the JUnit platform for running tests. | ||||
| * This requires a minimum of JUnit 5, since that's the version in which the JUnit platform launcher | * This requires a minimum of JUnit 5, since that's the version in which the JUnit platform launcher | ||||
| @@ -75,6 +80,8 @@ public class JUnitLauncherTask extends Task { | |||||
| private boolean printSummary; | private boolean printSummary; | ||||
| private final List<TestDefinition> tests = new ArrayList<>(); | private final List<TestDefinition> tests = new ArrayList<>(); | ||||
| private final List<ListenerDefinition> listeners = new ArrayList<>(); | private final List<ListenerDefinition> listeners = new ArrayList<>(); | ||||
| private List<String> includeTags = new ArrayList<>(); | |||||
| private List<String> excludeTags = new ArrayList<>(); | |||||
| public JUnitLauncherTask() { | public JUnitLauncherTask() { | ||||
| } | } | ||||
| @@ -158,6 +165,32 @@ public class JUnitLauncherTask extends Task { | |||||
| this.printSummary = printSummary; | this.printSummary = printSummary; | ||||
| } | } | ||||
| /** | |||||
| * Tags to include. Will trim each tag. | |||||
| * | |||||
| * @param includes comma separated list of tags to include while running the tests. | |||||
| * @since Ant 1.10.7 | |||||
| */ | |||||
| public void setIncludeTags(final String includes) { | |||||
| final StringTokenizer tokens = new StringTokenizer(includes, ","); | |||||
| while (tokens.hasMoreTokens()) { | |||||
| includeTags.add(tokens.nextToken().trim()); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Tags to exclude. Will trim each tag. | |||||
| * | |||||
| * @param excludes comma separated list of tags to exclude while running the tests. | |||||
| * @since Ant 1.10.7 | |||||
| */ | |||||
| public void setExcludeTags(final String excludes) { | |||||
| final StringTokenizer tokens = new StringTokenizer(excludes, ","); | |||||
| while (tokens.hasMoreTokens()) { | |||||
| excludeTags.add(tokens.nextToken().trim()); | |||||
| } | |||||
| } | |||||
| private void preConfigure(final TestDefinition test) { | private void preConfigure(final TestDefinition test) { | ||||
| if (test.getHaltOnFailure() == null) { | if (test.getHaltOnFailure() == null) { | ||||
| test.setHaltOnFailure(this.haltOnFailure); | test.setHaltOnFailure(this.haltOnFailure); | ||||
| @@ -233,6 +266,12 @@ public class JUnitLauncherTask extends Task { | |||||
| if (this.haltOnFailure) { | if (this.haltOnFailure) { | ||||
| writer.writeAttribute(LD_XML_ATTR_HALT_ON_FAILURE, "true"); | writer.writeAttribute(LD_XML_ATTR_HALT_ON_FAILURE, "true"); | ||||
| } | } | ||||
| if (this.includeTags.size() > 0) { | |||||
| writer.writeAttribute(LD_XML_ATTR_INCLUDE_TAGS, commaSeparatedListElements(includeTags)); | |||||
| } | |||||
| if (this.excludeTags.size() > 0) { | |||||
| writer.writeAttribute(LD_XML_ATTR_EXCLUDE_TAGS, commaSeparatedListElements(excludeTags)); | |||||
| } | |||||
| // task level listeners | // task level listeners | ||||
| for (final ListenerDefinition listenerDef : this.listeners) { | for (final ListenerDefinition listenerDef : this.listeners) { | ||||
| if (!listenerDef.shouldUse(getProject())) { | if (!listenerDef.shouldUse(getProject())) { | ||||
| @@ -294,6 +333,12 @@ public class JUnitLauncherTask extends Task { | |||||
| } | } | ||||
| } | } | ||||
| private static String commaSeparatedListElements(final List<String> stringList) { | |||||
| return stringList.stream() | |||||
| .map(Object::toString) | |||||
| .collect(Collectors.joining(", ")); | |||||
| } | |||||
| private int executeForkedTest(final ForkDefinition forkDefinition, final CommandlineJava commandlineJava) { | private int executeForkedTest(final ForkDefinition forkDefinition, final CommandlineJava commandlineJava) { | ||||
| final LogOutputStream outStream = new LogOutputStream(this, Project.MSG_INFO); | final LogOutputStream outStream = new LogOutputStream(this, Project.MSG_INFO); | ||||
| final LogOutputStream errStream = new LogOutputStream(this, Project.MSG_WARN); | final LogOutputStream errStream = new LogOutputStream(this, Project.MSG_WARN); | ||||
| @@ -359,6 +404,16 @@ public class JUnitLauncherTask extends Task { | |||||
| return haltOnFailure; | return haltOnFailure; | ||||
| } | } | ||||
| @Override | |||||
| public List<String> getIncludeTags() { | |||||
| return includeTags; | |||||
| } | |||||
| @Override | |||||
| public List<String> getExcludeTags() { | |||||
| return excludeTags; | |||||
| } | |||||
| @Override | @Override | ||||
| public ClassLoader getClassLoader() { | public ClassLoader getClassLoader() { | ||||
| return this.executionCL; | return this.executionCL; | ||||
| @@ -55,4 +55,15 @@ public interface LaunchDefinition { | |||||
| */ | */ | ||||
| ClassLoader getClassLoader(); | ClassLoader getClassLoader(); | ||||
| /** | |||||
| * @return Returns the list of tags which will be used to evaluate tests that need to be included | |||||
| * in the test execution | |||||
| */ | |||||
| List<String> getIncludeTags(); | |||||
| /** | |||||
| * @return Returns the list of tags which will be used to evaluate tests that need to be excluded | |||||
| * from the test execution | |||||
| */ | |||||
| List<String> getExcludeTags(); | |||||
| } | } | ||||
| @@ -23,6 +23,7 @@ import org.apache.tools.ant.Project; | |||||
| import org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.JUnitLauncherTask; | import org.apache.tools.ant.taskdefs.optional.junitlauncher.confined.JUnitLauncherTask; | ||||
| import org.apache.tools.ant.util.LoaderUtils; | import org.apache.tools.ant.util.LoaderUtils; | ||||
| import org.example.junitlauncher.jupiter.JupiterSampleTest; | import org.example.junitlauncher.jupiter.JupiterSampleTest; | ||||
| import org.example.junitlauncher.jupiter.JupiterTagSampleTest; | |||||
| import org.example.junitlauncher.vintage.AlwaysFailingJUnit4Test; | import org.example.junitlauncher.vintage.AlwaysFailingJUnit4Test; | ||||
| import org.example.junitlauncher.vintage.ForkedTest; | import org.example.junitlauncher.vintage.ForkedTest; | ||||
| import org.example.junitlauncher.vintage.JUnit4SampleTest; | import org.example.junitlauncher.vintage.JUnit4SampleTest; | ||||
| @@ -32,6 +33,7 @@ import org.junit.Rule; | |||||
| import org.junit.Test; | import org.junit.Test; | ||||
| import java.io.File; | import java.io.File; | ||||
| import java.nio.file.Files; | |||||
| import java.nio.file.Path; | import java.nio.file.Path; | ||||
| import java.nio.file.Paths; | import java.nio.file.Paths; | ||||
| @@ -228,7 +230,7 @@ public class JUnitLauncherTaskTest { | |||||
| final String targetName = "test-junit-ant-runtime-lib-excluded"; | final String targetName = "test-junit-ant-runtime-lib-excluded"; | ||||
| try { | try { | ||||
| buildRule.executeTarget(targetName); | buildRule.executeTarget(targetName); | ||||
| Assert.fail(targetName + " was expected to fail since JUnit platform libraries " + | |||||
| Assert.fail(targetName + " was expected to fail since Ant runtime libraries " + | |||||
| "weren't included in the classpath of the forked JVM"); | "weren't included in the classpath of the forked JVM"); | ||||
| } catch (BuildException be) { | } catch (BuildException be) { | ||||
| // expect a Error due to missing main class (which is part of Ant runtime libraries | // expect a Error due to missing main class (which is part of Ant runtime libraries | ||||
| @@ -313,6 +315,107 @@ public class JUnitLauncherTaskTest { | |||||
| JUnit4SampleTest.class.getName(), "testBar")); | JUnit4SampleTest.class.getName(), "testBar")); | ||||
| } | } | ||||
| /** | |||||
| * Tests execution of a test which is configured to execute only methods with a special tag | |||||
| */ | |||||
| @Test | |||||
| public void testMethodWithIncludeTag() throws Exception { | |||||
| final String target = "test-method-with-include-tag"; | |||||
| final Path tracker2 = setupTrackerProperty(target); | |||||
| buildRule.executeTarget(target); | |||||
| // verify only that specific method was run | |||||
| Assert.assertTrue("testMethodIncludeTagisExecuted was expected to be run", wasTestRun(tracker2, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecuted")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecuted was expected NOT to be run", wasTestRun(tracker2, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecuted")); | |||||
| } | |||||
| /** | |||||
| * Tests execution of a test which is configured to execute only methods without special tags | |||||
| */ | |||||
| @Test | |||||
| public void testMethodWithExcludeTag() throws Exception { | |||||
| final String target = "test-method-with-exclude-tag"; | |||||
| final Path tracker2 = setupTrackerProperty(target); | |||||
| buildRule.executeTarget(target); | |||||
| // verify only that specific method was run | |||||
| Assert.assertTrue("testMethodIncludeTagisExecuted was expected to be run", wasTestRun(tracker2, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecuted")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecuted was expected NOT to be run", wasTestRun(tracker2, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecuted")); | |||||
| } | |||||
| /** | |||||
| * Tests execution of a test which is configured to execute only methods with special tags, two classes specified | |||||
| */ | |||||
| @Test | |||||
| public void testMethodWithTag2Classes() throws Exception { | |||||
| final String target = "test-method-with-tag-2-classes"; | |||||
| final Path tracker1 = setupTrackerProperty(target + "1"); | |||||
| final Path tracker2 = setupTrackerProperty(target + "2"); | |||||
| buildRule.executeTarget(target); | |||||
| // verify only that specific method was run | |||||
| Assert.assertTrue("testMethodIncludeTagisExecuted was expected to be run", wasTestRun(tracker1, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecuted")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecuted was expected NOT to be run", wasTestRun(tracker1, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecuted")); | |||||
| Assert.assertTrue("testMethodIncludeTagisExecutedTagSampleTest was expected to be run", wasTestRun(tracker2, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecutedTagSampleTest")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecutedTagSampleTest was expected NOT to be run", wasTestRun(tracker2, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecutedTagSampleTest")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecutedTagSampleTest2 was expected NOT to be run", wasTestRun(tracker2, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecutedTagSampleTest2")); | |||||
| } | |||||
| /** | |||||
| * Tests execution of a test which is configured to execute only methods with special tags, two classes specified | |||||
| */ | |||||
| @Test | |||||
| public void testMethodWithTagFileSet() throws Exception { | |||||
| final String target = "test-method-with-tag-fileset"; | |||||
| final Path tracker = setupTrackerProperty(target); | |||||
| buildRule.executeTarget(target); | |||||
| // verify only that specific method was run | |||||
| Assert.assertTrue("testMethodIncludeTagisExecuted was expected to be run", wasTestRun(tracker, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecuted")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecuted was expected NOT to be run", wasTestRun(tracker, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecuted")); | |||||
| Assert.assertTrue("testMethodIncludeTagisExecutedTagSampleTest was expected to be run", wasTestRun(tracker, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecutedTagSampleTest")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecutedTagSampleTest was expected NOT to be run", wasTestRun(tracker, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecutedTagSampleTest")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecutedTagSampleTest2 was expected NOT to be run", wasTestRun(tracker, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecutedTagSampleTest2")); | |||||
| } | |||||
| /** | |||||
| * Tests execution of a test which is configured to execute only methods with special tags, two classes specified | |||||
| */ | |||||
| @Test | |||||
| public void testMethodWithTagFileSetFork() throws Exception { | |||||
| final String target = "test-method-with-tag-fileset-fork"; | |||||
| final Path tracker = setupTrackerProperty(target); | |||||
| buildRule.executeTarget(target); | |||||
| Assert.assertTrue("testMethodIncludeTagisExecuted was expected to be run", wasTestRun(tracker, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecuted")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecuted was expected NOT to be run", wasTestRun(tracker, JupiterSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecuted")); | |||||
| Assert.assertTrue("testMethodIncludeTagisExecutedTagSampleTest was expected to be run", wasTestRun(tracker, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisExecutedTagSampleTest")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecutedTagSampleTest was expected NOT to be run", wasTestRun(tracker, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecutedTagSampleTest")); | |||||
| Assert.assertFalse("testMethodIncludeTagisNotExecutedTagSampleTest2 was expected NOT to be run", wasTestRun(tracker, JupiterTagSampleTest.class.getName(), | |||||
| "testMethodIncludeTagisNotExecutedTagSampleTest2")); | |||||
| // Do it in the test, cause otherwise the file will be too big | |||||
| Files.deleteIfExists(tracker); | |||||
| } | |||||
| private Path setupTrackerProperty(final String targetName) { | private Path setupTrackerProperty(final String targetName) { | ||||
| final String filename = targetName + "-tracker.txt"; | final String filename = targetName + "-tracker.txt"; | ||||
| buildRule.getProject().setProperty(targetName + ".tracker", filename); | buildRule.getProject().setProperty(targetName + ".tracker", filename); | ||||
| @@ -22,6 +22,7 @@ import org.junit.jupiter.api.AfterEach; | |||||
| import org.junit.jupiter.api.BeforeAll; | import org.junit.jupiter.api.BeforeAll; | ||||
| import org.junit.jupiter.api.BeforeEach; | import org.junit.jupiter.api.BeforeEach; | ||||
| import org.junit.jupiter.api.Disabled; | import org.junit.jupiter.api.Disabled; | ||||
| import org.junit.jupiter.api.Tag; | |||||
| import org.junit.jupiter.api.Test; | import org.junit.jupiter.api.Test; | ||||
| import static org.junit.jupiter.api.Assertions.fail; | import static org.junit.jupiter.api.Assertions.fail; | ||||
| @@ -57,6 +58,21 @@ public class JupiterSampleTest { | |||||
| void testSkipped() { | void testSkipped() { | ||||
| } | } | ||||
| @Test | |||||
| @Tag("fast") | |||||
| void testMethodIncludeTagisExecuted() { | |||||
| } | |||||
| @Test | |||||
| @Tag("fast") | |||||
| void testMethodIncludeTagisExecuted2() { | |||||
| } | |||||
| @Test | |||||
| @Tag("slow") | |||||
| void testMethodIncludeTagisNotExecuted() { | |||||
| } | |||||
| @AfterEach | @AfterEach | ||||
| void afterEach() { | void afterEach() { | ||||
| } | } | ||||
| @@ -0,0 +1,63 @@ | |||||
| /* | |||||
| * 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.example.junitlauncher.jupiter; | |||||
| import org.junit.jupiter.api.AfterAll; | |||||
| import org.junit.jupiter.api.AfterEach; | |||||
| import org.junit.jupiter.api.BeforeAll; | |||||
| import org.junit.jupiter.api.BeforeEach; | |||||
| import org.junit.jupiter.api.Tag; | |||||
| import org.junit.jupiter.api.Test; | |||||
| /** | |||||
| * | |||||
| */ | |||||
| public class JupiterTagSampleTest { | |||||
| @BeforeAll | |||||
| static void beforeAll() { | |||||
| } | |||||
| @BeforeEach | |||||
| void beforeEach() { | |||||
| } | |||||
| @Test | |||||
| @Tag("fast") | |||||
| void testMethodIncludeTagisExecutedTagSampleTest() { | |||||
| } | |||||
| @Test | |||||
| @Tag("slow") | |||||
| void testMethodIncludeTagisNotExecutedTagSampleTest() { | |||||
| } | |||||
| @Test | |||||
| @Tag("extraSlow") | |||||
| void testMethodIncludeTagisNotExecuted2TagSampleTest() { | |||||
| } | |||||
| @AfterEach | |||||
| void afterEach() { | |||||
| } | |||||
| @AfterAll | |||||
| static void afterAll() { | |||||
| } | |||||
| } | |||||