Allow expected test results to be read from zipfile.

This commit is contained in:
James Roseborough
2012-09-06 15:00:33 +00:00
parent d5ac153dca
commit 244a964af5

View File

@@ -28,6 +28,8 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.MalformedURLException;
import java.net.URL;
import junit.framework.TestCase;
@@ -138,6 +140,17 @@ public class ScriptDrivenTest extends TestCase {
private String getExpectedOutput(final String name) throws IOException,
InterruptedException {
String expectedOutput = loadFromFile(name);
if (expectedOutput == null)
expectedOutput = loadFromZipfile(name);
if (expectedOutput == null)
expectedOutput = executeLuaProcess(name);
if (expectedOutput == null)
throw new IOException("Failed to get comparison output for "+name);
return expectedOutput;
}
private String loadFromFile(String name) throws IOException {
String expectedOutputName = basedir+"/"+name+"-expected.out";
File file = new File( expectedOutputName );
if ( file.exists() ) {
@@ -147,21 +160,54 @@ public class ScriptDrivenTest extends TestCase {
} finally {
is.close();
}
} else {
file = new File(basedir+"/"+name+".lua");
if ( !file.exists() )
fail("Could not load script for test case: " + name);
InputStream script = new FileInputStream(file);
// }
try {
String luaCommand = System.getProperty("LUA_COMMAND");
if ( luaCommand == null )
luaCommand = "lua";
String[] args = new String[] { luaCommand, "-", platform.toString() };
return collectProcessOutput(args, script);
} finally {
script.close();
}
return null;
}
private String loadFromZipfile(String name) throws IOException {
String zipfile = "luaj3.0-tests.zip";
try {
URL zip = null;
zip = getClass().getResource(zipfile);
if ( zip == null ) {
File file = new File(basedir+"/"+zipfile);
try {
if ( file.exists() )
zip = file.toURI().toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
if ( zip == null )
return null;
String jar = "jar:" + zip.toExternalForm()+ "!/";
String path = jar + name + ".out";
URL url = new URL(path);
InputStream is = url.openStream();
try {
return readString(is);
} finally {
is.close();
}
} catch (Exception e) {
return null;
}
}
private String executeLuaProcess(String name) throws IOException, InterruptedException {
File sourcefile = new File(basedir+"/"+name+".lua");
if ( !sourcefile.exists() )
throw new IOException("Failed to find source file "+sourcefile);
InputStream script = new FileInputStream(sourcefile);
try {
String luaCommand = System.getProperty("LUA_COMMAND");
if ( luaCommand == null )
luaCommand = "lua";
String[] args = new String[] { luaCommand, "-", platform.toString() };
return collectProcessOutput(args, script);
} finally {
script.close();
}
}