Stop setting executable flag outside of project generation

This commit is contained in:
Stephane Nicoll 2019-02-11 15:13:53 +01:00
parent 08c785b952
commit 1485d9af82
3 changed files with 143 additions and 2 deletions

View File

@ -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<Arguments> 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<Path> 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;
}
}

View File

@ -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<Path> 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;
}
}

View File

@ -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);