From 1485d9af8225c2f5377b456d22a2da0bf0723fb8 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Mon, 11 Feb 2019 15:13:53 +0100 Subject: [PATCH] Stop setting executable flag outside of project generation --- .../gradle/GradleWrapperContributorTests.java | 75 +++++++++++++++++++ .../maven/MavenWrapperContributorTests.java | 68 +++++++++++++++++ .../web/project/MainController.java | 2 - 3 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleWrapperContributorTests.java create mode 100644 initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/maven/MavenWrapperContributorTests.java diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleWrapperContributorTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleWrapperContributorTests.java new file mode 100644 index 00000000..f3b3d554 --- /dev/null +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/GradleWrapperContributorTests.java @@ -0,0 +1,75 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.spring.build.gradle; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.function.Consumer; +import java.util.stream.Stream; + +import org.assertj.core.internal.Failures; +import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link GradleWrapperContributor}. + * + * @author Stephane Nicoll + */ +class GradleWrapperContributorTests { + + @TempDir + Path directory; + + static Stream parameters() { + return Stream.of(Arguments.arguments("3"), Arguments.arguments("4")); + } + + @ParameterizedTest(name = "Gradle {0}") + @MethodSource("parameters") + void gradleWrapperSetExecutableFlagOnScripts(String gradleVersion) + throws IOException { + Path projectDir = contribute(gradleVersion); + assertThat(projectDir.resolve("gradlew")).isRegularFile().isExecutable(); + assertThat(projectDir.resolve("gradlew.bat")).isRegularFile().isExecutable(); + assertThat(projectDir.resolve("gradle/wrapper/gradle-wrapper.jar")) + .isRegularFile().satisfies(isNotExecutable()); + assertThat(projectDir.resolve("gradle/wrapper/gradle-wrapper.properties")) + .isRegularFile().satisfies(isNotExecutable()); + } + + private Consumer isNotExecutable() { + return (path) -> { + if (Files.isExecutable(path)) { + throw Failures.instance().failure(String + .format("%nExpecting:%n <%s>%nto not be executable.", path)); + } + }; + } + + Path contribute(String gradleVersion) throws IOException { + Path projectDir = Files.createTempDirectory(this.directory, "project-"); + new GradleWrapperContributor(gradleVersion).contribute(projectDir); + return projectDir; + } + +} diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/maven/MavenWrapperContributorTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/maven/MavenWrapperContributorTests.java new file mode 100644 index 00000000..4e0a292c --- /dev/null +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/maven/MavenWrapperContributorTests.java @@ -0,0 +1,68 @@ +/* + * Copyright 2012-2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.spring.initializr.generator.spring.build.maven; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.function.Consumer; + +import org.assertj.core.internal.Failures; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link MavenWrapperContributor}. + * + * @author Stephane Nicoll + */ +class MavenWrapperContributorTests { + + @TempDir + Path directory; + + @Test + void mavenWrapperSetExecutableFlagOnScripts() throws IOException { + Path projectDir = contribute(); + assertThat(projectDir.resolve("mvnw")).isRegularFile().isExecutable(); + assertThat(projectDir.resolve("mvnw.cmd")).isRegularFile().isExecutable(); + assertThat(projectDir.resolve(".mvn/wrapper/maven-wrapper.jar")).isRegularFile() + .satisfies(isNotExecutable()); + assertThat(projectDir.resolve(".mvn/wrapper/maven-wrapper.properties")) + .isRegularFile().satisfies(isNotExecutable()); + assertThat(projectDir.resolve(".mvn/wrapper/MavenWrapperDownloader.java")) + .isRegularFile().satisfies(isNotExecutable()); + } + + private Consumer isNotExecutable() { + return (path) -> { + if (Files.isExecutable(path)) { + throw Failures.instance().failure(String + .format("%nExpecting:%n <%s>%nto not be executable.", path)); + } + }; + } + + Path contribute() throws IOException { + Path projectDir = Files.createTempDirectory(this.directory, "project-"); + new MavenWrapperContributor().contribute(projectDir); + return projectDir; + } + +} diff --git a/initializr-web/src/main/java/io/spring/initializr/web/project/MainController.java b/initializr-web/src/main/java/io/spring/initializr/web/project/MainController.java index ec61e2eb..a492ace4 100644 --- a/initializr-web/src/main/java/io/spring/initializr/web/project/MainController.java +++ b/initializr-web/src/main/java/io/spring/initializr/web/project/MainController.java @@ -265,7 +265,6 @@ public class MainController extends AbstractInitializrController { .invokeProjectStructureGeneration(request); File download = this.projectGenerationInvoker.createDistributionFile(dir, ".zip"); String wrapperScript = getWrapperScript(request); - new File(dir, wrapperScript).setExecutable(true); Zip zip = new Zip(); zip.setProject(new Project()); zip.setDefaultexcludes(false); @@ -294,7 +293,6 @@ public class MainController extends AbstractInitializrController { File download = this.projectGenerationInvoker.createDistributionFile(dir, ".tar.gz"); String wrapperScript = getWrapperScript(request); - new File(dir, wrapperScript).setExecutable(true); Tar zip = new Tar(); zip.setProject(new Project()); zip.setDefaultexcludes(false);