Skip to content

Commit c687694

Browse files
committed
Simplify Eclipse formatter step tests
1 parent d112517 commit c687694

12 files changed

+257
-474
lines changed

lib-extra/src/test/java/com/diffplug/spotless/extra/cpp/EclipseCdtFormatterStepTest.java

+17-29
Original file line numberDiff line numberDiff line change
@@ -15,43 +15,31 @@
1515
*/
1616
package com.diffplug.spotless.extra.cpp;
1717

18-
import java.util.ArrayList;
19-
import java.util.Arrays;
20-
import java.util.List;
18+
import java.util.stream.Stream;
19+
20+
import org.junit.jupiter.params.ParameterizedTest;
21+
import org.junit.jupiter.params.provider.MethodSource;
2122

22-
import com.diffplug.spotless.FormatterStep;
2323
import com.diffplug.spotless.Jvm;
2424
import com.diffplug.spotless.TestProvisioner;
25-
import com.diffplug.spotless.extra.EclipseBasedStepBuilder;
26-
import com.diffplug.spotless.extra.eclipse.EclipseCommonTests;
27-
28-
class EclipseCdtFormatterStepTest extends EclipseCommonTests {
25+
import com.diffplug.spotless.extra.eclipse.EclipseResourceHarness;
2926

30-
@Override
31-
protected String[] getSupportedVersions() {
32-
List<String> version = new ArrayList<String>();
33-
if (Jvm.version() >= 11) {
34-
version.addAll(Arrays.asList("4.17.0", "4.18.0", "4.19.0", "4.20.0", "4.21.0"));
35-
}
36-
version.addAll(Arrays.asList("4.7.3a", "4.11.0", "4.12.0", "4.13.0", "4.14.0", "4.16.0"));
37-
return version.toArray(new String[version.size()]);
38-
}
27+
class EclipseCdtFormatterStepTest extends EclipseResourceHarness {
28+
private final static Jvm.Support<String> JVM_SUPPORT = Jvm.<String> support("Oldest Version").add(8, "4.11.0");
29+
private final static String INPUT = "#include <a.h>;\nint main(int argc, \nchar *argv[]) {}";
30+
private final static String EXPECTED = "#include <a.h>;\nint main(int argc, char *argv[]) {\n}\n";
3931

40-
@Override
41-
protected String getTestInput(String version) {
42-
return "#include <a.h>;\nint main(int argc, \nchar *argv[]) {}";
32+
public EclipseCdtFormatterStepTest() {
33+
super(EclipseCdtFormatterStep.createBuilder(TestProvisioner.mavenCentral()), INPUT, EXPECTED);
4334
}
4435

45-
@Override
46-
protected String getTestExpectation(String version) {
47-
return "#include <a.h>;\nint main(int argc, char *argv[]) {\n}\n";
36+
@ParameterizedTest
37+
@MethodSource
38+
void formatWithVersion(String version) throws Exception {
39+
assertFormatted(version);
4840
}
4941

50-
@Override
51-
protected FormatterStep createStep(String version) {
52-
EclipseBasedStepBuilder builder = EclipseCdtFormatterStep.createBuilder(TestProvisioner.mavenCentral());
53-
builder.setVersion(version);
54-
return builder.build();
42+
private static Stream<String> formatWithVersion() {
43+
return Stream.of(JVM_SUPPORT.getRecommendedFormatterVersion(), EclipseCdtFormatterStep.defaultVersion());
5544
}
56-
5745
}

lib-extra/src/test/java/com/diffplug/spotless/extra/eclipse/EclipseCommonTests.java

-90
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
* Copyright 2016-2021 DiffPlug
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.diffplug.spotless.extra.eclipse;
17+
18+
import static org.assertj.core.api.Assertions.*;
19+
20+
import java.io.File;
21+
import java.util.Arrays;
22+
23+
import com.diffplug.spotless.FormatterStep;
24+
import com.diffplug.spotless.LineEnding;
25+
import com.diffplug.spotless.ResourceHarness;
26+
import com.diffplug.spotless.extra.EclipseBasedStepBuilder;
27+
28+
/**
29+
* Provides a common formatter test for all Spotless Eclipse Formatter steps
30+
* provided by lib-extra.
31+
* <p>
32+
* The external Spotless Eclipse Formatter Step implementations are responsible
33+
* to test the functionality of the Spotless adaptations for the Eclipse formatter.
34+
* This explicitly includes a check of various forms of valid and invalid input
35+
* to cover all relevant execution paths during the code formatting and internal
36+
* exception handling.
37+
* </p>
38+
* <p>
39+
* The lib-extra users, like plugin-gradle and plugin-maven are responsible
40+
* to test the correct provision of user settings to the generic
41+
* Spotless Eclipse Formatter steps provided by lib-extra.
42+
* </p>
43+
*/
44+
public class EclipseResourceHarness extends ResourceHarness {
45+
private final EclipseBasedStepBuilder stepBuilder;
46+
private final String input;
47+
private final String expected;
48+
49+
/**
50+
* Create harness to be used for several versions of the formatter step
51+
* @param builder Eclipse Formatter step builder
52+
* @param unformatted Simple unformatted input
53+
* @param formatted
54+
*/
55+
public EclipseResourceHarness(EclipseBasedStepBuilder builder, String unformatted, String formatted) {
56+
stepBuilder = builder;
57+
input = unformatted;
58+
expected = formatted;
59+
}
60+
61+
/**
62+
* Assert that formatting input results in expected output
63+
* @param formatterVersion Formatter version
64+
* @param settingsFiles Formatter settings
65+
* @return Formatted string
66+
*/
67+
protected String assertFormatted(String formatterVersion, File... settingsFiles) throws Exception {
68+
String output = format(formatterVersion, settingsFiles);
69+
assertThat(output).isEqualTo(expected);
70+
return output;
71+
}
72+
73+
/**
74+
* Formatting input results and returns output
75+
* @param formatterVersion Formatter version
76+
* @param settingsFiles Formatter settings
77+
* @return Formatted string
78+
*/
79+
protected String format(String formatterVersion, File... settingsFiles) throws Exception {
80+
File inputFile = setFile("someInputFile").toContent(input);
81+
stepBuilder.setVersion(formatterVersion);
82+
stepBuilder.setPreferences(Arrays.asList(settingsFiles));
83+
FormatterStep step = stepBuilder.build();
84+
return LineEnding.toUnix(step.format(input, inputFile));
85+
}
86+
}

lib-extra/src/test/java/com/diffplug/spotless/extra/groovy/GrEclipseFormatterStepTest.java

+17-31
Original file line numberDiff line numberDiff line change
@@ -15,45 +15,31 @@
1515
*/
1616
package com.diffplug.spotless.extra.groovy;
1717

18-
import java.util.ArrayList;
19-
import java.util.Arrays;
20-
import java.util.List;
18+
import java.util.stream.Stream;
19+
20+
import org.junit.jupiter.params.ParameterizedTest;
21+
import org.junit.jupiter.params.provider.MethodSource;
2122

22-
import com.diffplug.spotless.FormatterStep;
2323
import com.diffplug.spotless.Jvm;
2424
import com.diffplug.spotless.TestProvisioner;
25-
import com.diffplug.spotless.extra.EclipseBasedStepBuilder;
26-
import com.diffplug.spotless.extra.eclipse.EclipseCommonTests;
27-
28-
class GrEclipseFormatterStepTest extends EclipseCommonTests {
25+
import com.diffplug.spotless.extra.eclipse.EclipseResourceHarness;
2926

30-
@Override
31-
protected String[] getSupportedVersions() {
32-
List<String> version = new ArrayList<String>();
33-
if (Jvm.version() >= 11) {
34-
version.add("4.20.0");
35-
} else {
36-
version.addAll(Arrays.asList("2.3.0", "4.6.3", "4.8.0", "4.8.1", "4.10.0", "4.12.0", "4.13.0", "4.14.0", "4.15.0", "4.16.0"));
37-
}
38-
version.addAll(Arrays.asList("4.17.0", "4.18.0", "4.19.0"));
39-
return version.toArray(new String[version.size()]);
40-
}
27+
class GrEclipseFormatterStepTest extends EclipseResourceHarness {
28+
private final static Jvm.Support<String> JVM_SUPPORT = Jvm.<String> support("Oldest Version").add(8, "2.3.0").add(11, "4.17.0");
29+
private final static String INPUT = "class F{ def m(){} }";
30+
private final static String EXPECTED = "class F{\n\tdef m(){}\n}";
4131

42-
@Override
43-
protected String getTestInput(String version) {
44-
return "class F{ def m(){} }";
32+
public GrEclipseFormatterStepTest() {
33+
super(GrEclipseFormatterStep.createBuilder(TestProvisioner.mavenCentral()), INPUT, EXPECTED);
4534
}
4635

47-
@Override
48-
protected String getTestExpectation(String version) {
49-
return "class F{\n\tdef m(){}\n}";
36+
@ParameterizedTest
37+
@MethodSource
38+
void formatWithVersion(String version) throws Exception {
39+
assertFormatted(version);
5040
}
5141

52-
@Override
53-
protected FormatterStep createStep(String version) {
54-
EclipseBasedStepBuilder builder = GrEclipseFormatterStep.createBuilder(TestProvisioner.mavenCentral());
55-
builder.setVersion(version);
56-
return builder.build();
42+
private static Stream<String> formatWithVersion() {
43+
return Stream.of(JVM_SUPPORT.getRecommendedFormatterVersion(), GrEclipseFormatterStep.defaultVersion());
5744
}
58-
5945
}

lib-extra/src/test/java/com/diffplug/spotless/extra/java/EclipseJdtFormatterStepTest.java

+18-30
Original file line numberDiff line numberDiff line change
@@ -15,44 +15,32 @@
1515
*/
1616
package com.diffplug.spotless.extra.java;
1717

18-
import java.util.ArrayList;
19-
import java.util.Arrays;
20-
import java.util.List;
18+
import java.util.stream.Stream;
19+
20+
import org.junit.jupiter.params.ParameterizedTest;
21+
import org.junit.jupiter.params.provider.MethodSource;
2122

22-
import com.diffplug.spotless.FormatterStep;
2323
import com.diffplug.spotless.Jvm;
2424
import com.diffplug.spotless.TestProvisioner;
25-
import com.diffplug.spotless.extra.EclipseBasedStepBuilder;
26-
import com.diffplug.spotless.extra.eclipse.EclipseCommonTests;
27-
28-
class EclipseJdtFormatterStepTest extends EclipseCommonTests {
25+
import com.diffplug.spotless.extra.eclipse.EclipseResourceHarness;
2926

30-
@Override
31-
protected String[] getSupportedVersions() {
32-
List<String> version = new ArrayList<String>();
33-
if (Jvm.version() >= 11) {
34-
version.addAll(Arrays.asList("4.20.0", "4.21.0"));
35-
}
36-
version.addAll(Arrays.asList("4.6.1", "4.6.2", "4.6.3", "4.7.0", "4.7.1", "4.7.2", "4.7.3a", "4.8.0", "4.9.0", "4.10.0",
37-
"4.11.0", "4.12.0", "4.13.0", "4.14.0", "4.15.0", "4.16.0", "4.17.0", "4.18.0", "4.19.0"));
38-
return version.toArray(new String[version.size()]);
39-
}
27+
class EclipseJdtFormatterStepTest extends EclipseResourceHarness {
28+
private final static String NON_SEMANTIC_ECLIPSE_VERSION = "4.7.3a";
29+
private final static Jvm.Support<String> JVM_SUPPORT = Jvm.<String> support("Oldest Version").add(8, "4.6.1");
30+
private final static String INPUT = "package p; class C{}";
31+
private final static String EXPECTED = "package p;\nclass C {\n}";
4032

41-
@Override
42-
protected String getTestInput(String version) {
43-
return "package p; class C{}";
33+
public EclipseJdtFormatterStepTest() {
34+
super(EclipseJdtFormatterStep.createBuilder(TestProvisioner.mavenCentral()), INPUT, EXPECTED);
4435
}
4536

46-
@Override
47-
protected String getTestExpectation(String version) {
48-
return "package p;\nclass C {\n}";
37+
@ParameterizedTest
38+
@MethodSource
39+
void formatWithVersion(String version) throws Exception {
40+
assertFormatted(version);
4941
}
5042

51-
@Override
52-
protected FormatterStep createStep(String version) {
53-
EclipseBasedStepBuilder builder = EclipseJdtFormatterStep.createBuilder(TestProvisioner.mavenCentral());
54-
builder.setVersion(version);
55-
return builder.build();
43+
private static Stream<String> formatWithVersion() {
44+
return Stream.of(NON_SEMANTIC_ECLIPSE_VERSION, JVM_SUPPORT.getRecommendedFormatterVersion(), EclipseJdtFormatterStep.defaultVersion());
5645
}
57-
5846
}

0 commit comments

Comments
 (0)