Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Sievers2018-03-27 11:34:16 -0400
committerJan Sievers2018-03-29 10:11:12 -0400
commit065ce8f0f5c4c344fc914a8eb18eae0353ead620 (patch)
tree0e25d4504c6550725b2232ab0761498906d3f943
parent1b92727667187d880b64f0d06fb4416c47b5cce2 (diff)
downloadorg.eclipse.tycho-065ce8f0f5c4c344fc914a8eb18eae0353ead620.tar.gz
org.eclipse.tycho-065ce8f0f5c4c344fc914a8eb18eae0353ead620.tar.xz
org.eclipse.tycho-065ce8f0f5c4c344fc914a8eb18eae0353ead620.zip
Bug 522475: Add support for JUnit 5
- add a new fragment org.eclipse.tycho.surefire.junit5 which wraps junit-platfrom-surefire-provider including all its dependencies (except org.junit.jupiter.api which is required by the test bundle and must be reused from the build's target platform) - the fragment is automatically added to the test runtime if the test bundle requires org.junit.jupiter.api - also provide support for running JUnit4 tests in the same bundle as JUnit5 tests by adding junit-vintage-engine and adding optional dependencies to JUnit4 packages to org.eclipse.tycho.surefire.junit5 - add integration test that verifies we can run both JUnit5 and JUnit4 tests in one bundle - verify that we can filter based on JUnit5 tags - in addition to Kepler for existing ITs, provide a small mirrored subset of the p2 Oxygen repo to run ITs against Change-Id: I5961c8fd0a283f6a5465d5e2ff6659936d800cd0
-rw-r--r--tycho-its/pom.xml123
-rw-r--r--tycho-its/projects/surefire.junit5/bundle.test/META-INF/MANIFEST.MF8
-rw-r--r--tycho-its/projects/surefire.junit5/bundle.test/build.properties4
-rw-r--r--tycho-its/projects/surefire.junit5/bundle.test/pom.xml37
-rw-r--r--tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit4Test.java22
-rw-r--r--tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit5Test.java35
-rw-r--r--tycho-its/repositories/.gitignore1
-rw-r--r--tycho-its/src/test/java/org/eclipse/tycho/test/surefire/JUnit5Test.java40
-rw-r--r--tycho-its/src/test/java/org/eclipse/tycho/test/util/ResourceUtil.java7
-rw-r--r--tycho-its/src/test/java/org/eclipse/tycho/test/util/SurefireUtil.java51
-rw-r--r--tycho-surefire/org.eclipse.tycho.surefire.junit5/.gitignore7
-rw-r--r--tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.core.prefs287
-rw-r--r--tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.ui.prefs56
-rw-r--r--tycho-surefire/org.eclipse.tycho.surefire.junit5/META-INF/MANIFEST.MF27
-rw-r--r--tycho-surefire/org.eclipse.tycho.surefire.junit5/build.properties13
-rw-r--r--tycho-surefire/org.eclipse.tycho.surefire.junit5/plugin.properties11
-rw-r--r--tycho-surefire/org.eclipse.tycho.surefire.junit5/pom.xml94
-rw-r--r--tycho-surefire/pom.xml1
-rw-r--r--tycho-surefire/tycho-surefire-plugin/pom.xml12
-rw-r--r--tycho-surefire/tycho-surefire-plugin/src/main/java/org/eclipse/tycho/surefire/provider/impl/JUnit5Provider.java58
-rw-r--r--tycho-surefire/tycho-surefire-plugin/src/test/java/org/eclipse/tycho/surefire/provider/impl/ProviderHelperTest.java12
21 files changed, 858 insertions, 48 deletions
diff --git a/tycho-its/pom.xml b/tycho-its/pom.xml
index 770e6a546..db5411c5c 100644
--- a/tycho-its/pom.xml
+++ b/tycho-its/pom.xml
@@ -24,13 +24,8 @@
<name>Tycho Integration Tests</name>
<properties>
- <!--
- To test a staged build
-
- /opt/maven/bin/mvn clean test -Pits -Dtycho-build-version=0.4.0-DEV-3023 -Dtycho.targetPlatform=/opt/eclipse-3.5/eclipse/
- -->
<tycho-build-version>${project.version}</tycho-build-version>
- <its-maven-version>${maven-version}</its-maven-version>
+ <its-maven-version>3.0.5</its-maven-version>
<maven-dir>${project.build.directory}/apache-maven-${its-maven-version}</maven-dir>
</properties>
@@ -113,46 +108,86 @@
<goals>
<goal>mirror</goal>
</goals>
+ <configuration>
+ <source>
+ <repository>
+ <url>http://download.eclipse.org/releases/kepler/201402280900/</url>
+ <layout>p2</layout>
+ </repository>
+ </source>
+ <ius>
+ <iu>
+ <id>org.eclipse.osgi</id>
+ <version>3.9.1.v20140110-1610</version>
+ </iu>
+ <iu>
+ <id>org.eclipse.equinox.launcher</id>
+ <version>1.3.0.v20130327-1440</version>
+ </iu>
+ <iu>
+ <id>org.eclipse.core.runtime</id>
+ <version>3.9.100.v20131218-1515</version>
+ </iu>
+ <iu>
+ <id>org.junit</id>
+ <version>4.11.0.v201303080030</version>
+ </iu>
+ <iu>
+ <id>org.eclipse.equinox.executable.feature.group</id>
+ <version>3.6.0.v20140117-1004</version>
+ </iu>
+ </ius>
+ <filter>
+ <osgi.ws>win32</osgi.ws>
+ <osgi.os>win32</osgi.os>
+ <osgi.arch>x86_64</osgi.arch>
+ </filter>
+ <includePacked>false</includePacked>
+ <includeOptional>false</includeOptional>
+ <destination>${project.basedir}/repositories/kepler</destination>
+ </configuration>
+ </execution>
+ <execution>
+ <id>mirror-oxygen-test-repo</id>
+ <phase>process-test-classes</phase>
+ <goals>
+ <goal>mirror</goal>
+ </goals>
+ <configuration>
+ <source>
+ <repository>
+ <url>http://download.eclipse.org/releases/oxygen/</url>
+ <layout>p2</layout>
+ </repository>
+ </source>
+ <ius>
+ <iu>
+ <id>org.eclipse.osgi</id>
+ <version>3.12.100.v20180210-1608</version>
+ </iu>
+ <iu>
+ <id>org.eclipse.equinox.launcher</id>
+ <version>1.4.0.v20161219-1356</version>
+ </iu>
+ <iu>
+ <id>org.eclipse.core.runtime</id>
+ <version>3.13.0.v20170207-1030</version>
+ </iu>
+ <iu>
+ <id>org.junit</id>
+ <version>4.12.0.v201504281640</version>
+ </iu>
+ <iu>
+ <id>org.junit.jupiter.api</id>
+ <version>5.0.0.v20170910-2246</version>
+ </iu>
+ </ius>
+ <includePacked>false</includePacked>
+ <includeOptional>false</includeOptional>
+ <destination>${project.basedir}/repositories/oxygen</destination>
+ </configuration>
</execution>
</executions>
- <configuration>
- <source>
- <repository>
- <url>http://download.eclipse.org/releases/kepler/201402280900/</url>
- <layout>p2</layout>
- </repository>
- </source>
- <ius>
- <iu>
- <id>org.eclipse.osgi</id>
- <version>3.9.1.v20140110-1610</version>
- </iu>
- <iu>
- <id>org.eclipse.equinox.launcher</id>
- <version>1.3.0.v20130327-1440</version>
- </iu>
- <iu>
- <id>org.eclipse.core.runtime</id>
- <version>3.9.100.v20131218-1515</version>
- </iu>
- <iu>
- <id>org.junit</id>
- <version>4.11.0.v201303080030</version>
- </iu>
- <iu>
- <id>org.eclipse.equinox.executable.feature.group</id>
- <version>3.6.0.v20140117-1004</version>
- </iu>
- </ius>
- <filter>
- <osgi.ws>win32</osgi.ws>
- <osgi.os>win32</osgi.os>
- <osgi.arch>x86_64</osgi.arch>
- </filter>
- <includePacked>false</includePacked>
- <includeOptional>false</includeOptional>
- <destination>${project.basedir}/repositories/kepler</destination>
- </configuration>
</plugin>
</plugins>
diff --git a/tycho-its/projects/surefire.junit5/bundle.test/META-INF/MANIFEST.MF b/tycho-its/projects/surefire.junit5/bundle.test/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..3701e2475
--- /dev/null
+++ b/tycho-its/projects/surefire.junit5/bundle.test/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: JUnit5 Test Plug-in
+Bundle-SymbolicName: bundle.test.junit5
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.junit;version="4.12",
+ org.junit.jupiter.api;version="5.0"
diff --git a/tycho-its/projects/surefire.junit5/bundle.test/build.properties b/tycho-its/projects/surefire.junit5/bundle.test/build.properties
new file mode 100644
index 000000000..34d2e4d2d
--- /dev/null
+++ b/tycho-its/projects/surefire.junit5/bundle.test/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/tycho-its/projects/surefire.junit5/bundle.test/pom.xml b/tycho-its/projects/surefire.junit5/bundle.test/pom.xml
new file mode 100644
index 000000000..a18ed3f4e
--- /dev/null
+++ b/tycho-its/projects/surefire.junit5/bundle.test/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.eclipse.tycho.tycho-its.surefire-junit5</groupId>
+ <artifactId>bundle.test.junit5</artifactId>
+ <packaging>eclipse-test-plugin</packaging>
+ <version>1.0.0</version>
+
+ <repositories>
+ <repository>
+ <id>oxygen</id>
+ <layout>p2</layout>
+ <url>${oxygen-repo}</url>
+ </repository>
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-maven-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <extensions>true</extensions>
+ </plugin>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <providerProperties>
+ <excludeTags>slow</excludeTags>
+ </providerProperties>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit4Test.java b/tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit4Test.java
new file mode 100644
index 000000000..2ceb50e8d
--- /dev/null
+++ b/tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit4Test.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2018 SAP SE 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:
+ * SAP SE- initial API and implementation
+ *******************************************************************************/
+package bundle.test;
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
+public class JUnit4Test {
+
+ @Test
+ public void testWithJUnit4() {
+ assertEquals(3, 1 + 2);
+ }
+}
diff --git a/tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit5Test.java b/tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit5Test.java
new file mode 100644
index 000000000..f09eb6b91
--- /dev/null
+++ b/tycho-its/projects/surefire.junit5/bundle.test/src/bundle/test/JUnit5Test.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2018 SAP SE 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:
+ * SAP SE- initial API and implementation
+ *******************************************************************************/
+package bundle.test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Tag;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+
+class JUnit5Test {
+
+ @Test
+ @DisplayName("My 1st JUnit 5 test!")
+ void myFirstJUnit5Test(TestInfo testInfo) {
+ assertEquals(2, 1+1, "1 + 1 should equal 2");
+ assertEquals("My 1st JUnit 5 test!", testInfo.getDisplayName(), () -> "TestInfo is injected correctly");
+ }
+
+ @Test
+ @Tag("slow")
+ void slowJUnit5Test() {
+ assertEquals(2, 1+1, "1 + 1 should equal 2");
+ }
+
+}
diff --git a/tycho-its/repositories/.gitignore b/tycho-its/repositories/.gitignore
index 7b18fc7ae..11179bd91 100644
--- a/tycho-its/repositories/.gitignore
+++ b/tycho-its/repositories/.gitignore
@@ -1,2 +1,3 @@
# generated test data
kepler/
+oxygen/
diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/JUnit5Test.java b/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/JUnit5Test.java
new file mode 100644
index 000000000..a929dd466
--- /dev/null
+++ b/tycho-its/src/test/java/org/eclipse/tycho/test/surefire/JUnit5Test.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2018 SAP SE 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:
+ * SAP SE - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.tycho.test.surefire;
+
+import static org.eclipse.tycho.test.util.SurefireUtil.assertNumberOfSuccessfulTests;
+import static org.eclipse.tycho.test.util.SurefireUtil.assertTestMethodWasSuccessfullyExecuted;
+
+import java.util.Properties;
+
+import org.apache.maven.it.Verifier;
+import org.eclipse.tycho.test.AbstractTychoIntegrationTest;
+import org.eclipse.tycho.test.util.ResourceUtil.P2Repositories;
+import org.junit.Test;
+
+public class JUnit5Test extends AbstractTychoIntegrationTest {
+
+ @Test
+ public void testJUnit5Runner() throws Exception {
+ Verifier verifier = getVerifier("/surefire.junit5/bundle.test", false);
+ Properties props = verifier.getSystemProperties();
+ props.setProperty("oxygen-repo", P2Repositories.ECLIPSE_OXYGEN.toString());
+ verifier.executeGoal("verify");
+ verifier.verifyErrorFreeLog();
+ String projectBasedir = verifier.getBasedir();
+ assertTestMethodWasSuccessfullyExecuted(projectBasedir, "bundle.test.JUnit4Test", "testWithJUnit4");
+ assertTestMethodWasSuccessfullyExecuted(projectBasedir, "bundle.test.JUnit5Test",
+ "myFirstJUnit5Test{TestInfo}");
+ // make sure test tagged as 'slow' was skipped
+ assertNumberOfSuccessfulTests(projectBasedir, "bundle.test.JUnit5Test", 1);
+ }
+
+}
diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/util/ResourceUtil.java b/tycho-its/src/test/java/org/eclipse/tycho/test/util/ResourceUtil.java
index 73c50221b..921e6a53b 100644
--- a/tycho-its/src/test/java/org/eclipse/tycho/test/util/ResourceUtil.java
+++ b/tycho-its/src/test/java/org/eclipse/tycho/test/util/ResourceUtil.java
@@ -19,7 +19,8 @@ import java.net.URI;
public class ResourceUtil {
public enum P2Repositories {
- ECLIPSE_342("e342"), ECLIPSE_352("e352"), ECLIPSE_KEPLER("kepler"), SIMPLE_FEATURE("feature");
+ ECLIPSE_342("e342"), ECLIPSE_352("e352"), ECLIPSE_KEPLER("kepler"), ECLIPSE_OXYGEN("oxygen"), SIMPLE_FEATURE(
+ "feature");
private final String path;
@@ -41,8 +42,8 @@ public class ResourceUtil {
File resolvedFile = new File(pathRelativeToProjectRoot).getAbsoluteFile();
if (!resolvedFile.canRead()) {
- throw new IllegalStateException("Test resource \"" + pathRelativeToProjectRoot + "\" is not available; "
- + workingDirMessage());
+ throw new IllegalStateException(
+ "Test resource \"" + pathRelativeToProjectRoot + "\" is not available; " + workingDirMessage());
}
return resolvedFile;
}
diff --git a/tycho-its/src/test/java/org/eclipse/tycho/test/util/SurefireUtil.java b/tycho-its/src/test/java/org/eclipse/tycho/test/util/SurefireUtil.java
index 0fafceb5a..865b8c8ca 100644
--- a/tycho-its/src/test/java/org/eclipse/tycho/test/util/SurefireUtil.java
+++ b/tycho-its/src/test/java/org/eclipse/tycho/test/util/SurefireUtil.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012 SAP AG and others.
+ * Copyright (c) 2012, 2018 SAP 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
@@ -10,8 +10,21 @@
*******************************************************************************/
package org.eclipse.tycho.test.util;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
import java.io.File;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+
public class SurefireUtil {
private static final String TEST_REPORT_PATH = "target/surefire-reports/TEST-";
@@ -23,4 +36,40 @@ public class SurefireUtil {
public static File testResultFile(String baseDir, String testSuffix) {
return new File(baseDir, TEST_REPORT_PATH + testSuffix + ".xml");
}
+
+ public static void assertTestMethodWasSuccessfullyExecuted(String baseDir, String className, String methodName)
+ throws Exception {
+ File sureFireTestReport = new File(baseDir, "target/surefire-reports/TEST-" + className + ".xml");
+ assertTrue(sureFireTestReport.isFile());
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ Document document = db.parse(sureFireTestReport);
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ // surefire-test-report XML schema: https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd
+ NodeList testCaseNodes = (NodeList) xpath.evaluate(
+ String.format("/testsuite/testcase[@classname='%s' and @name='%s']", className, methodName), document,
+ XPathConstants.NODESET);
+ assertNotNull(testCaseNodes);
+ assertEquals(1, testCaseNodes.getLength());
+ NodeList failureNodes = (NodeList) xpath.evaluate(
+ String.format("/testsuite/testcase[@classname='%s' and @name='%s']/failure", className, methodName),
+ document, XPathConstants.NODESET);
+ assertEquals(0, failureNodes.getLength());
+ NodeList errorNodes = (NodeList) xpath.evaluate(
+ String.format("/testsuite/testcase[@classname='%s' and @name='%s']/error", className, methodName),
+ document, XPathConstants.NODESET);
+ assertEquals(0, errorNodes.getLength());
+ }
+
+ public static void assertNumberOfSuccessfulTests(String baseDir, String className,
+ int expectedNumberOfSuccessfulTests) throws Exception {
+ File sureFireTestReport = new File(baseDir, "target/surefire-reports/TEST-" + className + ".xml");
+ assertTrue(sureFireTestReport.isFile());
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ Document document = db.parse(sureFireTestReport);
+ XPath xpath = XPathFactory.newInstance().newXPath();
+ String numberOfTests = (String) xpath.evaluate("/testsuite/@tests", document, XPathConstants.STRING);
+ assertEquals(expectedNumberOfSuccessfulTests, Integer.parseInt(numberOfTests));
+ }
}
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit5/.gitignore b/tycho-surefire/org.eclipse.tycho.surefire.junit5/.gitignore
new file mode 100644
index 000000000..abb9537e4
--- /dev/null
+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit5/.gitignore
@@ -0,0 +1,7 @@
+# override global rule
+!/.settings/
+
+# only include specified files
+/.settings/*
+!/.settings/org.eclipse.jdt.core.prefs
+!/.settings/org.eclipse.jdt.ui.prefs
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.core.prefs b/tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..75fe3951e
--- /dev/null
+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,287 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=false
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert
+org.eclipse.jdt.core.formatter.comment.line_length=100
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
+org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=true
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
+org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.ui.prefs b/tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 000000000..8a73ade26
--- /dev/null
+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit5/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,56 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Tycho
+formatter_settings_version=12
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit5/META-INF/MANIFEST.MF b/tycho-surefire/org.eclipse.tycho.surefire.junit5/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..9f9508cb5
--- /dev/null
+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit5/META-INF/MANIFEST.MF
@@ -0,0 +1,27 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Tycho Surefire OSGi JUnit5 Runner
+Bundle-SymbolicName: org.eclipse.tycho.surefire.junit5;singleton:=true
+Bundle-Version: 1.2.0.qualifier
+Fragment-Host: org.eclipse.tycho.surefire.osgibooter
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ClassPath: jars/junit-platform-surefire-provider-1.0.3.jar,
+ jars/junit-platform-commons-1.0.3.jar,
+ jars/junit-platform-engine-1.0.3.jar,
+ jars/junit-platform-launcher-1.0.3.jar,
+ jars/junit-jupiter-engine-5.0.3.jar,
+ jars/junit-vintage-engine-4.12.3.jar,
+ jars/opentest4j-1.0.0.jar,
+ jars/common-java5-2.19.1.jar
+Import-Package: org.junit.jupiter.api;version="5.0",
+ org.junit.jupiter.api.extension;version="5.0",
+ org.junit.jupiter.api.function;version="5.0",
+ org.junit;version="[4.12.0,5)";resolution:=optional,
+ org.junit.internal.builders;version="[4.12.0,5)";resolution:=optional,
+ org.junit.experimental.categories;version="[4.12.0,5)";resolution:=optional,
+ org.junit.runner;version="[4.12.0,5)";resolution:=optional,
+ org.junit.runner.manipulation;version="[4.12.0,5)";resolution:=optional,
+ org.junit.runner.notification;version="[4.12.0,5)";resolution:=optional,
+ org.junit.runners.model;version="[4.12.0,5)";resolution:=optional
+Bundle-Vendor: %providerName
+Automatic-Module-Name: org.eclipse.tycho.surefire.junit5
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit5/build.properties b/tycho-surefire/org.eclipse.tycho.surefire.junit5/build.properties
new file mode 100644
index 000000000..1074f2985
--- /dev/null
+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit5/build.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2018 SAP SE 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:
+# SAP SE - initial API and implementation
+###############################################################################
+bin.includes = META-INF/,\
+ jars/,\
+ plugin.properties
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit5/plugin.properties b/tycho-surefire/org.eclipse.tycho.surefire.junit5/plugin.properties
new file mode 100644
index 000000000..916017e57
--- /dev/null
+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit5/plugin.properties
@@ -0,0 +1,11 @@
+###############################################################################
+# Copyright (c) 2018 SAP SE 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:
+# SAP SE - initial API and implementation
+###############################################################################
+providerName=Eclipse.org \ No newline at end of file
diff --git a/tycho-surefire/org.eclipse.tycho.surefire.junit5/pom.xml b/tycho-surefire/org.eclipse.tycho.surefire.junit5/pom.xml
new file mode 100644
index 000000000..bc1909403
--- /dev/null
+++ b/tycho-surefire/org.eclipse.tycho.surefire.junit5/pom.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ - Copyright (c) 2018 SAP SE 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:
+ - SAP SE - initial API and implementation
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>org.eclipse.tycho.surefire.junit5</artifactId>
+ <packaging>eclipse-plugin</packaging>
+
+ <name>Tycho Surefire OSGi JUnit 5 Runner</name>
+
+ <properties>
+ <junit-platform-version>1.0.3</junit-platform-version>
+ <junit-jupiter-version>5.0.3</junit-jupiter-version>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-surefire-provider</artifactId>
+ <version>${junit-platform-version}</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-launcher</artifactId>
+ <version>${junit-platform-version}</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-engine</artifactId>
+ <version>${junit-platform-version}</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.junit.platform</groupId>
+ <artifactId>junit-platform-commons</artifactId>
+ <version>${junit-platform-version}</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.junit.jupiter</groupId>
+ <artifactId>junit-jupiter-engine</artifactId>
+ <version>${junit-jupiter-version}</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.apache.maven.surefire</groupId>
+ <artifactId>common-java5</artifactId>
+ <version>${surefire-version}</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.junit.vintage</groupId>
+ <artifactId>junit-vintage-engine</artifactId>
+ <version>4.12.3</version>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.opentest4j</groupId>
+ <artifactId>opentest4j</artifactId>
+ <version>1.0.0</version>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/tycho-surefire/pom.xml b/tycho-surefire/pom.xml
index 095048197..220d88cd7 100644
--- a/tycho-surefire/pom.xml
+++ b/tycho-surefire/pom.xml
@@ -32,6 +32,7 @@
<module>org.eclipse.tycho.surefire.junit</module>
<module>org.eclipse.tycho.surefire.junit4</module>
<module>org.eclipse.tycho.surefire.junit47</module>
+ <module>org.eclipse.tycho.surefire.junit5</module>
<module>org.eclipse.tycho.surefire.testnghelper</module>
<module>org.eclipse.tycho.surefire.testng</module>
</modules>
diff --git a/tycho-surefire/tycho-surefire-plugin/pom.xml b/tycho-surefire/tycho-surefire-plugin/pom.xml
index 7f24d60c4..b038870a8 100644
--- a/tycho-surefire/tycho-surefire-plugin/pom.xml
+++ b/tycho-surefire/tycho-surefire-plugin/pom.xml
@@ -117,6 +117,18 @@
</dependency>
<dependency>
<groupId>org.eclipse.tycho</groupId>
+ <artifactId>org.eclipse.tycho.surefire.junit5</artifactId>
+ <version>${project.version}</version>
+ <scope>runtime</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.tycho</groupId>
<artifactId>org.eclipse.tycho.surefire.testng</artifactId>
<version>${project.version}</version>
<scope>runtime</scope>
diff --git a/tycho-surefire/tycho-surefire-plugin/src/main/java/org/eclipse/tycho/surefire/provider/impl/JUnit5Provider.java b/tycho-surefire/tycho-surefire-plugin/src/main/java/org/eclipse/tycho/surefire/provider/impl/JUnit5Provider.java
new file mode 100644
index 000000000..3ecb19b41
--- /dev/null
+++ b/tycho-surefire/tycho-surefire-plugin/src/main/java/org/eclipse/tycho/surefire/provider/impl/JUnit5Provider.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2018 SAP SE 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:
+ * SAP SE - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.tycho.surefire.provider.impl;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+import static org.eclipse.tycho.surefire.provider.impl.ProviderHelper.newDependency;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.maven.model.Dependency;
+import org.codehaus.plexus.component.annotations.Component;
+import org.eclipse.tycho.surefire.provider.spi.TestFrameworkProvider;
+import org.osgi.framework.Version;
+import org.osgi.framework.VersionRange;
+
+@Component(role = TestFrameworkProvider.class, hint = "junit5")
+public class JUnit5Provider extends AbstractJUnitProvider {
+
+ private static final Version VERSION = Version.parseVersion("5.0.0");
+
+ @Override
+ protected Set<String> getJUnitBundleNames() {
+ return new HashSet<>(asList("org.junit.jupiter.api"));
+ }
+
+ @Override
+ public String getSurefireProviderClassName() {
+ return "org.junit.platform.surefire.provider.JUnitPlatformProvider";
+ }
+
+ @Override
+ public Version getVersion() {
+ return VERSION;
+ }
+
+ @Override
+ public List<Dependency> getRequiredBundles() {
+ return singletonList(newDependency("org.eclipse.tycho", "org.eclipse.tycho.surefire.junit5"));
+ }
+
+ @Override
+ protected VersionRange getJUnitVersionRange() {
+ return new VersionRange("[5,6)");
+ }
+
+}
diff --git a/tycho-surefire/tycho-surefire-plugin/src/test/java/org/eclipse/tycho/surefire/provider/impl/ProviderHelperTest.java b/tycho-surefire/tycho-surefire-plugin/src/test/java/org/eclipse/tycho/surefire/provider/impl/ProviderHelperTest.java
index 7bc91955c..055e91f94 100644
--- a/tycho-surefire/tycho-surefire-plugin/src/test/java/org/eclipse/tycho/surefire/provider/impl/ProviderHelperTest.java
+++ b/tycho-surefire/tycho-surefire-plugin/src/test/java/org/eclipse/tycho/surefire/provider/impl/ProviderHelperTest.java
@@ -65,6 +65,18 @@ public class ProviderHelperTest extends PlexusTestCase {
assertEquals(JUnit47Provider.class, provider.getClass());
}
+ public void testSelectJunit5() throws Exception {
+ TestFrameworkProvider provider = providerHelper.selectProvider(classPath("org.junit.jupiter.api:5.0.0"),
+ new Properties(), null);
+ assertEquals(JUnit5Provider.class, provider.getClass());
+ }
+
+ public void testSelectJunit5WithJUnit4Present() throws Exception {
+ TestFrameworkProvider provider = providerHelper
+ .selectProvider(classPath("org.junit:4.12", "org.junit.jupiter.api:5.0.0"), new Properties(), null);
+ assertEquals(JUnit5Provider.class, provider.getClass());
+ }
+
public void testSelectJunit4WithJunit3Present() throws Exception {
TestFrameworkProvider provider = providerHelper.selectProvider(classPath("org.junit:3.8.1", "org.junit:4.8.1"),
new Properties(), null);

Back to the top