@@ -1,8 +1,10 @@
package org.apache.tools.ant.taskdefs;
package org.apache.tools.ant.taskdefs;
import org.apache.tools.ant.BuildFileRule;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.ProjectHelper;
import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayOutputStream;
@@ -20,18 +22,15 @@ import static org.junit.Assert.assertTrue;
*/
*/
public class ExecStreamRedirectorTest {
public class ExecStreamRedirectorTest {
private Project project;
@Rule
public BuildFileRule buildRule = new BuildFileRule();
@Before
@Before
public void setUp() {
public void setUp() {
project = new Project();
project.init();
final File antFile = new File(System.getProperty("root"), "src/etc/testcases/taskdefs/exec/exec-with-redirector.xml");
project.setUserProperty("ant.file", antFile.getAbsolutePath());
buildRule.configureProject("src/etc/testcases/taskdefs/exec/exec-with-redirector.xml");
final File outputDir = this.createTmpDir();
final File outputDir = this.createTmpDir();
project.setUserProperty("output", outputDir.toString());
ProjectHelper.configureProject(project, antFile);
project.executeTarget("setUp");
buildRule.getProject().setUserProperty("output", outputDir.toString());
buildRule.executeTarget("setUp");
}
}
/**
/**
@@ -43,32 +42,37 @@ public class ExecStreamRedirectorTest {
*/
*/
@Test
@Test
public void testRedirection() throws Exception {
public void testRedirection() throws Exception {
final String dirToList = project .getProperty("dir.to.ls");
final String dirToList = buildRule.getProject() .getProperty("dir.to.ls");
assertNotNull("Directory to list isn't available", dirToList);
assertNotNull("Directory to list isn't available", dirToList);
assertTrue(dirToList + " is not a directory", new File(dirToList).isDirectory());
assertTrue(dirToList + " is not a directory", new File(dirToList).isDirectory());
project .executeTarget("list-dir");
buildRule .executeTarget("list-dir");
// verify the redirected output
// verify the redirected output
final String outputDirPath = project .getProperty("output");
final String outputDirPath = buildRule.getProject() .getProperty("output");
byte[] dirListingOutput = null;
byte[] dirListingOutput = null;
for (int i = 1; i <= 16; i++) {
for (int i = 1; i <= 16; i++) {
final File redirectedOutputFile = new File(outputDirPath, "ls" + i + ".txt");
final File redirectedOutputFile = new File(outputDirPath, "ls" + i + ".txt");
assertTrue(redirectedOutputFile + " is missing or not a regular file", redirectedOutputFile.isFile());
assertTrue(redirectedOutputFile + " is missing or not a regular file",
redirectedOutputFile.isFile());
final byte[] redirectedOutput = readAllBytes(redirectedOutputFile);
final byte[] redirectedOutput = readAllBytes(redirectedOutputFile);
assertNotNull("No content was redirected to " + redirectedOutputFile, redirectedOutput);
assertNotNull("No content was redirected to " + redirectedOutputFile, redirectedOutput);
assertNotEquals("Content in redirected file " + redirectedOutputFile + " was empty", 0, redirectedOutput.length);
assertNotEquals("Content in redirected file " + redirectedOutputFile + " was empty",
0, redirectedOutput.length);
if (dirListingOutput != null) {
if (dirListingOutput != null) {
// compare the directory listing that was redirected to these files. all files should have the same content
// Compare the directory listing that was redirected to these files.
// All files should have the same content.
assertTrue("Redirected output in file " + redirectedOutputFile +
assertTrue("Redirected output in file " + redirectedOutputFile +
" doesn't match content in other redirected output file(s)", Arrays.equals(dirListingOutput, redirectedOutput));
" doesn't match content in other redirected output file(s)",
Arrays.equals(dirListingOutput, redirectedOutput));
}
}
dirListingOutput = redirectedOutput;
dirListingOutput = redirectedOutput;
}
}
}
}
private File createTmpDir() {
private File createTmpDir() {
final File tmpDir = new File(System.getProperty("java.io.tmpdir"), String.valueOf("temp-" + System.nanoTime()));
final File tmpDir = new File(System.getProperty("java.io.tmpdir"),
String.valueOf("temp-" + System.nanoTime()));
tmpDir.mkdir();
tmpDir.mkdir();
tmpDir.deleteOnExit();
tmpDir.deleteOnExit();
return tmpDir;
return tmpDir;