From 12371b3751751a0b2ce35e2a53dd48cf093ed47a Mon Sep 17 00:00:00 2001 From: Trevor Radcliffe Date: Mon, 24 Feb 2020 09:46:11 -0500 Subject: [PATCH 1/2] Add Tests Add tests for the following cases: * Empty pattern passed to spotlessFiles * A pattern that matches no files passed to spotlessFiles * Invalid regexp passed to spotlessFiles * Spotless is configured with a Kotlin build script Also a little reorganization, and a change required to support Kotlin build script was added to GradleIntegrationTest.java so that other tests can make use of it. --- .../spotless/GradleIntegrationTest.java | 6 +- .../gradle/spotless/SpecificFilesTest.java | 107 +++++++++++++++--- 2 files changed, 95 insertions(+), 18 deletions(-) diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java index 9f9a2618e6..c3bf12bcb8 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java @@ -57,10 +57,14 @@ public void gitAttributes() throws IOException { } protected final GradleRunner gradleRunner() throws IOException { + return gradleRunner(false); + } + + protected final GradleRunner gradleRunner(boolean isKotlin) throws IOException { return GradleRunner.create() // Test against Gradle 2.14.1 in order to maintain backwards compatibility. // https://github.com/diffplug/spotless/issues/161 - .withGradleVersion("2.14.1") + .withGradleVersion(isKotlin ? "4.0" : "2.14.1") .withProjectDir(rootFolder()) .withPluginClasspath(); } diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java index 9357802a6e..12cc2e4546 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java @@ -17,28 +17,59 @@ import java.io.IOException; +import org.gradle.testkit.runner.UnexpectedBuildFailure; +import org.junit.Ignore; import org.junit.Test; public class SpecificFilesTest extends GradleIntegrationTest { - private String testFile(int number, boolean absolute) throws IOException { - String rel = "src/main/java/test" + number + ".java"; + private String testFilePath(int number) { + return testFilePath(number, true); + } + + private String testFilePath(int number, boolean absolute) { + String relPath = "src/main/java/test" + number + ".java"; if (absolute) { - return rootFolder() + "/" + rel; + return rootFolder() + "/" + relPath; } else { - return rel; + return relPath; } } - private String testFile(int number) throws IOException { - return testFile(number, false); + private String fixture() { + return fixture(false); } private String fixture(boolean formatted) { return "java/googlejavaformat/JavaCode" + (formatted ? "F" : "Unf") + "ormatted.test"; } - private void integration(String patterns, boolean firstFormatted, boolean secondFormatted, boolean thirdFormatted) - throws IOException { + private void createBuildScript() throws IOException { + createBuildScript(false); + } + + private void createBuildScript(boolean isKotlin) throws IOException { + if (isKotlin) { + setFile("build.gradle.kts").toLines( + "import com.diffplug.gradle.spotless.SpotlessExtension", + "buildscript {", + " repositories {", + " mavenCentral()", + " }", + " dependencies {", + " classpath(\"com.diffplug.spotless:spotless-plugin-gradle:3.27.1\")", + " }", + "}", + "plugins {", + " java", + " id(\"com.diffplug.gradle.spotless\")", + "}", + "configure {", + " java {", + " googleJavaFormat(\"1.2\")", + " }", + "}"); + return; + } setFile("build.gradle").toLines( "buildscript { repositories { mavenCentral() } }", @@ -51,32 +82,74 @@ private void integration(String patterns, boolean firstFormatted, boolean second " googleJavaFormat('1.2')", " }", "}"); + } + + private void integration(String patterns, + boolean firstFormatted, boolean secondFormatted, boolean thirdFormatted) throws IOException { + integration(patterns, firstFormatted, secondFormatted, thirdFormatted, false); + } - setFile(testFile(1)).toResource(fixture(false)); - setFile(testFile(2)).toResource(fixture(false)); - setFile(testFile(3)).toResource(fixture(false)); + private void integration(String patterns, + boolean firstFormatted, boolean secondFormatted, boolean thirdFormatted, + boolean isKotlin) throws IOException { + String testFileOne = testFilePath(1, false); + String testFileTwo = testFilePath(2, false); + String testFileThree = testFilePath(3, false); - gradleRunner() + setFile(testFileOne).toResource(fixture()); + setFile(testFileTwo).toResource(fixture()); + setFile(testFileThree).toResource(fixture()); + + gradleRunner(isKotlin) .withArguments("spotlessApply", "-PspotlessFiles=" + patterns) .build(); - assertFile(testFile(1)).sameAsResource(fixture(firstFormatted)); - assertFile(testFile(2)).sameAsResource(fixture(secondFormatted)); - assertFile(testFile(3)).sameAsResource(fixture(thirdFormatted)); + assertFile(testFileOne).sameAsResource(fixture(firstFormatted)); + assertFile(testFileTwo).sameAsResource(fixture(secondFormatted)); + assertFile(testFileThree).sameAsResource(fixture(thirdFormatted)); } @Test public void singleFile() throws IOException { - integration(testFile(2, true), false, true, false); + createBuildScript(false); + integration(testFilePath(2), false, true, false); } @Test public void multiFile() throws IOException { - integration(testFile(1, true) + "," + testFile(3, true), true, false, true); + createBuildScript(); + integration(testFilePath(1) + "," + testFilePath(3), + true, false, true); + } + + @Test + @Ignore("When spotlessFiles is specified without a value, Spotless runs on all files. It should run on none.") + public void emptyPattern_formatsNoFiles() throws IOException { + createBuildScript(); + integration("", false, false, false); + } + + @Test + public void matchesNoFiles_formatsNoFilesButDoesNotExitInError() throws IOException { + createBuildScript(); + integration(testFilePath(4), false, false, false); } @Test public void regexp() throws IOException { + createBuildScript(); integration(".*/src/main/java/test(1|3).java", true, false, true); } + + @Test(expected = UnexpectedBuildFailure.class) + public void invalidRegexp_exitsInError() throws IOException { + createBuildScript(false); + integration("./[?)!\\", false, false, false); + } + + @Test + public void kotlinBuildScript() throws IOException { + createBuildScript(true); + integration(testFilePath(2), false, true, false, true); + } } From de0d4501e42baddd2895d1c3f5870a520d6b4df3 Mon Sep 17 00:00:00 2001 From: Trevor Radcliffe Date: Wed, 26 Feb 2020 14:00:41 -0500 Subject: [PATCH 2/2] Make requested changes: * Remove Kotlin support from GradleIntegrationTest and move it into SpecificFilesTest * Add information about the change to the [Unreleased] tag in CHANGES.md --- plugin-gradle/CHANGES.md | 1 + .../gradle/spotless/GradleIntegrationTest.java | 6 +----- .../diffplug/gradle/spotless/SpecificFilesTest.java | 11 +++++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/plugin-gradle/CHANGES.md b/plugin-gradle/CHANGES.md index 7cb348e952..92736fd39e 100644 --- a/plugin-gradle/CHANGES.md +++ b/plugin-gradle/CHANGES.md @@ -3,6 +3,7 @@ We adhere to the [keepachangelog](https://keepachangelog.com/en/1.0.0/) format (starting after version `3.27.0`). ## [Unreleased] +* Add tests to `SpecificFilesTest` to fix [#529](https://github.com/diffplug/spotless/issues/529) ## [3.27.1] - 2020-01-14 ### Fixed diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java index c3bf12bcb8..9f9a2618e6 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/GradleIntegrationTest.java @@ -57,14 +57,10 @@ public void gitAttributes() throws IOException { } protected final GradleRunner gradleRunner() throws IOException { - return gradleRunner(false); - } - - protected final GradleRunner gradleRunner(boolean isKotlin) throws IOException { return GradleRunner.create() // Test against Gradle 2.14.1 in order to maintain backwards compatibility. // https://github.com/diffplug/spotless/issues/161 - .withGradleVersion(isKotlin ? "4.0" : "2.14.1") + .withGradleVersion("2.14.1") .withProjectDir(rootFolder()) .withPluginClasspath(); } diff --git a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java index 12cc2e4546..209030365d 100644 --- a/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java +++ b/plugin-gradle/src/test/java/com/diffplug/gradle/spotless/SpecificFilesTest.java @@ -17,7 +17,7 @@ import java.io.IOException; -import org.gradle.testkit.runner.UnexpectedBuildFailure; +import org.gradle.testkit.runner.*; import org.junit.Ignore; import org.junit.Test; @@ -100,9 +100,12 @@ private void integration(String patterns, setFile(testFileTwo).toResource(fixture()); setFile(testFileThree).toResource(fixture()); - gradleRunner(isKotlin) - .withArguments("spotlessApply", "-PspotlessFiles=" + patterns) - .build(); + GradleRunner runner = gradleRunner() + .withArguments("spotlessApply", "-PspotlessFiles=" + patterns); + if (isKotlin) { + runner.withGradleVersion("4.0"); + } + runner.build(); assertFile(testFileOne).sameAsResource(fixture(firstFormatted)); assertFile(testFileTwo).sameAsResource(fixture(secondFormatted));