You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by ja...@apache.org on 2018/08/22 05:42:28 UTC
ant git commit: [junitlauncher] Launch "testclasses" as one single
JUnit5 LauncherDiscoveryRequest
Repository: ant
Updated Branches:
refs/heads/master 039ee10f9 -> 3f806148c
[junitlauncher] Launch "testclasses" as one single JUnit5 LauncherDiscoveryRequest
Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/3f806148
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/3f806148
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/3f806148
Branch: refs/heads/master
Commit: 3f806148c3f3542b8526d5f91f10d6189bf0607d
Parents: 039ee10
Author: Jaikiran Pai <ja...@apache.org>
Authored: Mon Aug 13 17:44:49 2018 +0530
Committer: Jaikiran Pai <ja...@apache.org>
Committed: Wed Aug 22 11:08:42 2018 +0530
----------------------------------------------------------------------
.../optional/junitlauncher/SingleTestClass.java | 17 +--
.../optional/junitlauncher/TestClasses.java | 147 ++++++++++---------
.../optional/junitlauncher/TestDefinition.java | 45 +++++-
3 files changed, 125 insertions(+), 84 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ant/blob/3f806148/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/SingleTestClass.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/SingleTestClass.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/SingleTestClass.java
index 3744a81..0321c48 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/SingleTestClass.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/SingleTestClass.java
@@ -18,7 +18,6 @@
package org.apache.tools.ant.taskdefs.optional.junitlauncher;
import org.junit.platform.engine.discovery.DiscoverySelectors;
-import org.junit.platform.launcher.EngineFilter;
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
import javax.xml.stream.XMLStreamConstants;
@@ -27,7 +26,6 @@ import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import java.util.Collections;
import java.util.LinkedHashSet;
-import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
@@ -96,8 +94,8 @@ public class SingleTestClass extends TestDefinition implements NamedTest {
}
@Override
- List<TestRequest> createTestRequests() {
- final LauncherDiscoveryRequestBuilder requestBuilder = LauncherDiscoveryRequestBuilder.request();
+ void addDiscoverySelectors(final TestRequest testRequest) {
+ final LauncherDiscoveryRequestBuilder requestBuilder = testRequest.getDiscoveryRequest();
if (!this.hasMethodsSpecified()) {
requestBuilder.selectors(DiscoverySelectors.selectClass(this.testClass));
} else {
@@ -106,18 +104,9 @@ public class SingleTestClass extends TestDefinition implements NamedTest {
requestBuilder.selectors(DiscoverySelectors.selectMethod(this.testClass, method));
}
}
- // add any engine filters
- final String[] enginesToInclude = this.getIncludeEngines();
- if (enginesToInclude != null && enginesToInclude.length > 0) {
- requestBuilder.filters(EngineFilter.includeEngines(enginesToInclude));
- }
- final String[] enginesToExclude = this.getExcludeEngines();
- if (enginesToExclude != null && enginesToExclude.length > 0) {
- requestBuilder.filters(EngineFilter.excludeEngines(enginesToExclude));
- }
- return Collections.singletonList(new TestRequest(this, requestBuilder));
}
+
@Override
protected void toForkedRepresentation(final JUnitLauncherTask task, final XMLStreamWriter writer) throws XMLStreamException {
writer.writeStartElement(LD_XML_ELM_TEST);
http://git-wip-us.apache.org/repos/asf/ant/blob/3f806148/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestClasses.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestClasses.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestClasses.java
index cbba484..1769d10 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestClasses.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestClasses.java
@@ -20,6 +20,9 @@ package org.apache.tools.ant.taskdefs.optional.junitlauncher;
import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.Resources;
+import org.apache.tools.ant.types.resources.StringResource;
+import org.junit.platform.engine.discovery.DiscoverySelectors;
+import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
@@ -30,6 +33,12 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import static org.apache.tools.ant.taskdefs.optional.junitlauncher.Constants.LD_XML_ATTR_CLASS_NAME;
+import static org.apache.tools.ant.taskdefs.optional.junitlauncher.Constants.LD_XML_ATTR_EXCLUDE_ENGINES;
+import static org.apache.tools.ant.taskdefs.optional.junitlauncher.Constants.LD_XML_ATTR_HALT_ON_FAILURE;
+import static org.apache.tools.ant.taskdefs.optional.junitlauncher.Constants.LD_XML_ATTR_INCLUDE_ENGINES;
+import static org.apache.tools.ant.taskdefs.optional.junitlauncher.Constants.LD_XML_ATTR_OUTPUT_DIRECTORY;
+import static org.apache.tools.ant.taskdefs.optional.junitlauncher.Constants.LD_XML_ELM_TEST;
import static org.apache.tools.ant.taskdefs.optional.junitlauncher.Constants.LD_XML_ELM_TEST_CLASSES;
/**
@@ -48,23 +57,22 @@ public class TestClasses extends TestDefinition {
}
@Override
- List<TestRequest> createTestRequests() {
- final List<SingleTestClass> tests = this.getTests();
+ void addDiscoverySelectors(final TestRequest testRequest) {
+ final List<String> tests = getTestClassNames();
if (tests.isEmpty()) {
- return Collections.emptyList();
+ return;
}
- final List<TestRequest> requests = new ArrayList<>();
- for (final SingleTestClass test : tests) {
- requests.addAll(test.createTestRequests());
+ final LauncherDiscoveryRequestBuilder requestBuilder = testRequest.getDiscoveryRequest();
+ for (final String test : tests) {
+ requestBuilder.selectors(DiscoverySelectors.selectClass(test));
}
- return requests;
}
- private List<SingleTestClass> getTests() {
+ private List<String> getTestClassNames() {
if (this.resources.isEmpty()) {
return Collections.emptyList();
}
- final List<SingleTestClass> tests = new ArrayList<>();
+ final List<String> tests = new ArrayList<>();
for (final Resource resource : resources) {
if (!resource.isExists()) {
continue;
@@ -75,83 +83,84 @@ public class TestClasses extends TestDefinition {
continue;
}
final String className = name.substring(0, name.lastIndexOf('.'));
- final BatchSourcedSingleTest test = new BatchSourcedSingleTest(className.replace(File.separatorChar, '.').replace('/', '.').replace('\\', '.'));
- tests.add(test);
+ tests.add(className.replace(File.separatorChar, '.').replace('/', '.').replace('\\', '.'));
}
return tests;
}
- /**
- * A {@link BatchSourcedSingleTest} is similar to a {@link SingleTestClass} except that
- * some of the characteristics of the test (like whether to halt on failure) are borrowed
- * from the {@link TestClasses batch} to which this test belongs to
- */
- private final class BatchSourcedSingleTest extends SingleTestClass {
-
- private BatchSourcedSingleTest(final String testClassName) {
- this.setName(testClassName);
- }
-
- @Override
- String getIfProperty() {
- return TestClasses.this.getIfProperty();
- }
-
- @Override
- String getUnlessProperty() {
- return TestClasses.this.getUnlessProperty();
- }
-
- @Override
- boolean isHaltOnFailure() {
- return TestClasses.this.isHaltOnFailure();
- }
-
- @Override
- String getFailureProperty() {
- return TestClasses.this.getFailureProperty();
- }
-
- @Override
- List<ListenerDefinition> getListeners() {
- return TestClasses.this.getListeners();
- }
-
- @Override
- String getOutputDir() {
- return TestClasses.this.getOutputDir();
- }
-
- @Override
- String[] getIncludeEngines() {
- return TestClasses.this.getIncludeEngines();
- }
-
- @Override
- String[] getExcludeEngines() {
- return TestClasses.this.getExcludeEngines();
- }
- }
-
@Override
protected void toForkedRepresentation(final JUnitLauncherTask task, final XMLStreamWriter writer) throws XMLStreamException {
writer.writeStartElement(LD_XML_ELM_TEST_CLASSES);
- // write out as multiple SingleTestClass representations
- for (final SingleTestClass singleTestClass : getTests()) {
- singleTestClass.toForkedRepresentation(task, writer);
+ // write out each test class
+ for (final String test : getTestClassNames()) {
+ writer.writeStartElement(LD_XML_ELM_TEST);
+ writer.writeAttribute(LD_XML_ATTR_CLASS_NAME, test);
+ if (haltOnFailure != null) {
+ writer.writeAttribute(LD_XML_ATTR_HALT_ON_FAILURE, haltOnFailure.toString());
+ }
+ if (outputDir != null) {
+ writer.writeAttribute(LD_XML_ATTR_OUTPUT_DIRECTORY, outputDir);
+ }
+ if (includeEngines != null) {
+ writer.writeAttribute(LD_XML_ATTR_INCLUDE_ENGINES, includeEngines);
+ }
+ if (excludeEngines != null) {
+ writer.writeAttribute(LD_XML_ATTR_EXCLUDE_ENGINES, excludeEngines);
+ }
+ // listeners for this test
+ if (listeners != null) {
+ for (final ListenerDefinition listenerDef : getListeners()) {
+ if (!listenerDef.shouldUse(task.getProject())) {
+ // not applicable
+ continue;
+ }
+ listenerDef.toForkedRepresentation(writer);
+ }
+ }
+ writer.writeEndElement();
}
writer.writeEndElement();
}
static List<TestDefinition> fromForkedRepresentation(final XMLStreamReader reader) throws XMLStreamException {
reader.require(XMLStreamConstants.START_ELEMENT, null, LD_XML_ELM_TEST_CLASSES);
- final List<TestDefinition> testDefinitions = new ArrayList<>();
+ final TestClasses testDefinition = new TestClasses();
// read out as multiple SingleTestClass representations
while (reader.nextTag() != XMLStreamConstants.END_ELEMENT) {
reader.require(XMLStreamConstants.START_ELEMENT, null, Constants.LD_XML_ELM_TEST);
- testDefinitions.add(SingleTestClass.fromForkedRepresentation(reader));
+ final String testClassName = requireAttributeValue(reader, LD_XML_ATTR_CLASS_NAME);
+ testDefinition.add(new StringResource(testClassName + ".class"));
+ final String halt = reader.getAttributeValue(null, LD_XML_ATTR_HALT_ON_FAILURE);
+ if (halt != null) {
+ testDefinition.setHaltOnFailure(Boolean.parseBoolean(halt));
+ }
+ final String outDir = reader.getAttributeValue(null, LD_XML_ATTR_OUTPUT_DIRECTORY);
+ if (outDir != null) {
+ testDefinition.setOutputDir(outDir);
+ }
+ final String includeEngs = reader.getAttributeValue(null, LD_XML_ATTR_INCLUDE_ENGINES);
+ if (includeEngs != null) {
+ testDefinition.setIncludeEngines(includeEngs);
+ }
+ final String excludeEngs = reader.getAttributeValue(null, LD_XML_ATTR_EXCLUDE_ENGINES);
+ if (excludeEngs != null) {
+ testDefinition.setExcludeEngines(excludeEngs);
+ }
+ while (reader.nextTag() != XMLStreamConstants.END_ELEMENT) {
+ reader.require(XMLStreamConstants.START_ELEMENT, null, Constants.LD_XML_ELM_LISTENER);
+ testDefinition.addConfiguredListener(ListenerDefinition.fromForkedRepresentation(reader));
+ }
+ reader.require(XMLStreamConstants.END_ELEMENT, null, Constants.LD_XML_ELM_TEST);
}
reader.require(XMLStreamConstants.END_ELEMENT, null, LD_XML_ELM_TEST_CLASSES);
- return testDefinitions;
+ return Collections.singletonList(testDefinition);
+ }
+
+ private static String requireAttributeValue(final XMLStreamReader reader, final String attrName) throws XMLStreamException {
+ final String val = reader.getAttributeValue(null, attrName);
+ if (val != null) {
+ return val;
+ }
+ throw new XMLStreamException("Attribute " + attrName + " is missing at " + reader.getLocation());
}
}
http://git-wip-us.apache.org/repos/asf/ant/blob/3f806148/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestDefinition.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestDefinition.java b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestDefinition.java
index 9fe452f..4a42b6a 100644
--- a/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestDefinition.java
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/junitlauncher/TestDefinition.java
@@ -20,6 +20,9 @@ package org.apache.tools.ant.taskdefs.optional.junitlauncher;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.PropertyHelper;
+import org.junit.platform.engine.Filter;
+import org.junit.platform.launcher.EngineFilter;
+import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
@@ -107,7 +110,47 @@ abstract class TestDefinition {
return this.forkDefinition;
}
- abstract List<TestRequest> createTestRequests();
+ /**
+ * Create and return the {@link TestRequest TestRequests} for this test definition. This
+ * typically involves creating the JUnit test discovery request(s) and applying the necessary
+ * discovery selectors, filters and other necessary constructs.
+ *
+ * @return Returns the test requests
+ */
+ List<TestRequest> createTestRequests() {
+ // create a TestRequest and add necessary selectors, filters to it
+ final LauncherDiscoveryRequestBuilder requestBuilder = LauncherDiscoveryRequestBuilder.request();
+ final TestRequest request = new TestRequest(this, requestBuilder);
+ addDiscoverySelectors(request);
+ addFilters(request);
+ return Collections.singletonList(request);
+ }
+
+ /**
+ * Add necessary {@link org.junit.platform.engine.DiscoverySelector JUnit discovery selectors} to
+ * the {@code testRequest}
+ *
+ * @param testRequest The test request
+ */
+ abstract void addDiscoverySelectors(final TestRequest testRequest);
+
+ /**
+ * Add necessary {@link Filter JUnit filters} to the {@code testRequest}
+ *
+ * @param testRequest The test request
+ */
+ void addFilters(final TestRequest testRequest) {
+ final LauncherDiscoveryRequestBuilder requestBuilder = testRequest.getDiscoveryRequest();
+ // add any engine filters
+ final String[] enginesToInclude = this.getIncludeEngines();
+ if (enginesToInclude != null && enginesToInclude.length > 0) {
+ requestBuilder.filters(EngineFilter.includeEngines(enginesToInclude));
+ }
+ final String[] enginesToExclude = this.getExcludeEngines();
+ if (enginesToExclude != null && enginesToExclude.length > 0) {
+ requestBuilder.filters(EngineFilter.excludeEngines(enginesToExclude));
+ }
+ }
protected boolean shouldRun(final Project project) {
final PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(project);