Merge pull request #937 from htztomic

* pr/937:
  Refactor support for testing executable files

Closes gh-937
This commit is contained in:
Madhura Bhave 2019-07-02 14:25:56 -07:00
commit 974d36b077
2 changed files with 72 additions and 14 deletions

View File

@ -16,6 +16,7 @@
package io.spring.initializr.generator.spring.test;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Properties;
@ -192,8 +193,14 @@ public class ProjectAssert {
}
public ProjectAssert hasExecutableFile(String... localPaths) {
if (runningOnWindows()) {
for (String localPath : localPaths) {
assertFile(localPath, true);
}
return this;
}
for (String localPath : localPaths) {
assertFile(localPath, true);
assertExecutable(localPath, true);
}
return this;
}
@ -210,6 +217,19 @@ public class ProjectAssert {
return this;
}
public ProjectAssert assertExecutable(String localPath, boolean exist) {
Path candidate = this.projectStructure.resolve(localPath);
assertThat(Files.exists(candidate)).describedAs("Invalid presence (%s) exist for %s", exist, localPath)
.isEqualTo(exist);
assertThat(Files.isExecutable(candidate)).describedAs("File (%s) is not an executable", localPath)
.isEqualTo(exist);
return this;
}
private boolean runningOnWindows() {
return File.separatorChar == '\\';
}
private Properties properties(String localPath) {
Path file = this.projectStructure.resolve(localPath);
try {

View File

@ -16,6 +16,7 @@
package io.spring.initializr.web;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
@ -32,6 +33,7 @@ import io.spring.initializr.web.AbstractInitializrIntegrationTests.Config;
import io.spring.initializr.web.mapper.InitializrMetadataVersion;
import io.spring.initializr.web.support.InitializrMetadataUpdateStrategy;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.ExecTask;
import org.apache.tools.ant.taskdefs.Expand;
import org.apache.tools.ant.taskdefs.Untar;
import org.json.JSONException;
@ -211,22 +213,58 @@ public abstract class AbstractInitializrIntegrationTests {
}
private void untar(Path archiveFile, Path project) {
Untar expand = new Untar();
expand.setProject(new Project());
expand.setDest(project.toFile());
expand.setSrc(archiveFile.toFile());
Untar.UntarCompressionMethod method = new Untar.UntarCompressionMethod();
method.setValue("gzip");
expand.setCompression(method);
expand.execute();
if (!runningOnWindows()) {
createProjectDir(project);
ExecTask execTask = new ExecTask();
execTask.setProject(new Project());
execTask.setExecutable("tar");
execTask.createArg().setValue("-C");
execTask.createArg().setValue(project.toFile().getAbsolutePath());
execTask.createArg().setValue("-xf");
execTask.createArg().setValue(archiveFile.toFile().getAbsolutePath());
execTask.execute();
}
else {
Untar expand = new Untar();
expand.setProject(new Project());
expand.setDest(project.toFile());
expand.setSrc(archiveFile.toFile());
Untar.UntarCompressionMethod method = new Untar.UntarCompressionMethod();
method.setValue("gzip");
expand.setCompression(method);
expand.execute();
}
}
private void createProjectDir(Path project) {
ExecTask execTask = new ExecTask();
execTask.setProject(new Project());
execTask.setExecutable("mkdir");
execTask.createArg().setValue(project.toFile().getAbsolutePath());
execTask.execute();
}
private void unzip(Path archiveFile, Path project) {
Expand expand = new Expand();
expand.setProject(new Project());
expand.setDest(project.toFile());
expand.setSrc(archiveFile.toFile());
expand.execute();
if (!runningOnWindows()) {
ExecTask execTask = new ExecTask();
execTask.setProject(new Project());
execTask.setExecutable("unzip");
execTask.createArg().setValue(archiveFile.toFile().getAbsolutePath());
execTask.createArg().setValue("-d");
execTask.createArg().setValue(project.toFile().getAbsolutePath());
execTask.execute();
}
else {
Expand expand = new Expand();
expand.setProject(new Project());
expand.setDest(project.toFile());
expand.setSrc(archiveFile.toFile());
expand.execute();
}
}
private boolean runningOnWindows() {
return File.separatorChar == '\\';
}
protected Path writeArchive(byte[] body) throws IOException {