blob: 155554989e17e7d3ca47591fa976237e5474b189 [file] [log] [blame]
package edu.uci.ics.asterix.test.aql;
import static org.junit.Assert.fail;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import org.json.JSONArray;
import org.json.JSONException;
import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
public class TestsUtils {
private static final String EXTENSION_AQL_RESULT = "adm";
/**
* Probably does not work well with symlinks.
*/
public static boolean deleteRec(File path) {
if (path.isDirectory()) {
for (File f : path.listFiles()) {
if (!deleteRec(f)) {
return false;
}
}
}
return path.delete();
}
public static String getNextResult(JSONArray jArray) throws JSONException {
String result = null;
for (int i = 0; i < jArray.length(); i++) {
JSONArray resultArray = jArray.getJSONArray(i);
for (int j = 0; j < resultArray.length(); j++) {
return resultArray.getString(j);
}
}
return result;
}
public static void runScriptAndCompareWithResult(IHyracksClientConnection hcc, File scriptFile, PrintWriter print,
File expectedFile, JSONArray jArray) throws Exception {
BufferedReader readerExpected = new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile),
"UTF-8"));
String lineExpected, lineActual;
int num = 0;
int chunkCounter = 0;
int recordCounter = 0;
try {
while ((lineExpected = readerExpected.readLine()) != null) {
// Skip the blank line in the expected file.
if (lineExpected.isEmpty()) {
continue;
}
if (jArray.length() <= chunkCounter) {
throw new Exception("No more results available.");
}
JSONArray resultArray = jArray.getJSONArray(chunkCounter);
if ((lineActual = resultArray.getString(recordCounter)) == null) {
throw new Exception("Result for " + scriptFile + " changed at line " + num + ":\n<" + lineExpected
+ "\n>");
}
if (!equalStrings(lineExpected.split("Timestamp")[0], lineActual.split("Timestamp")[0])) {
fail("Result for " + scriptFile + " changed at line " + num + ":\n< " + lineExpected + "\n> "
+ lineActual);
}
recordCounter++;
if (recordCounter >= resultArray.length()) {
chunkCounter++;
recordCounter = 0;
}
}
} finally {
readerExpected.close();
}
}
private static boolean equalStrings(String s1, String s2) {
String[] rowsOne = s1.split("\n");
String[] rowsTwo = s2.split("\n");
for (int i = 0; i < rowsOne.length; i++) {
String row1 = rowsOne[i];
String row2 = rowsTwo[i];
if (row1.equals(row2))
continue;
String[] fields1 = row1.split(" ");
String[] fields2 = row2.split(" ");
for (int j = 0; j < fields1.length; j++) {
if (fields1[j].equals(fields2[j])) {
continue;
} else if (fields1[j].indexOf('.') < 0) {
return false;
} else {
fields1[j] = fields1[j].split(",")[0];
fields2[j] = fields2[j].split(",")[0];
Double double1 = Double.parseDouble(fields1[j]);
Double double2 = Double.parseDouble(fields2[j]);
float float1 = (float) double1.doubleValue();
float float2 = (float) double2.doubleValue();
if (Math.abs(float1 - float2) == 0)
continue;
else {
return false;
}
}
}
}
return true;
}
public static String aqlExtToResExt(String fname) {
int dot = fname.lastIndexOf('.');
return fname.substring(0, dot + 1) + EXTENSION_AQL_RESULT;
}
}