java/ch/wlkl/wsh/TraceTester.java
package ch.wlkl.wsh;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class TraceTester extends Tester {
String name = null;
String compareHead = null;
int nameIx = 0;
HashMap<String, Integer> names = new HashMap<String, Integer>();
ArrayList<String> java = new ArrayList<String>();
public TraceTester() {
super(new StringReader(""));
compare = new ArrayList<String>();
}
public void name(String name) {
nameIx = names.containsKey(name) ? names.get(name) : 0;
names.put(name, nameIx);
this.name = name;
// vars.clear();
compare.clear();
}
public void test(String category, String opt, String...srces) {
String s = name + (++nameIx < 2 ? "" : nameIx) + ' ' + category + " ";
script.add("test " + s + Strings.quote(opt, "'") + ":");
compareHead = "--- --- test begin " + s + opt + " >>> " + srces.length + " lines";
scriptStream(" ", srces);
script.add(";");
}
public void compare(List<String> lines) {
script.add("compare:");
ArrayList<String> ll = new ArrayList<String>();
if (lines.size() == 0 || ! lines.get(0).startsWith("--- --- test begin "))
ll.add(0, "--- --- test begin ");
ll.addAll(lines);
ll.set(0, compareHead);
scriptStream(" ", ll);
script.add(";");
}
public void function(String name, String val, String fun, String... args) {
script.add(name + " = " + fun + '(');
scriptStream(" ", args);
script.add(" );");
if (val == null) {
script.add("remove " + name + ";");
vars.remove(name);
} else {
vars.put(name, val);
}
}
public void java(String src) {
String k = "java('" + name + java.size() + "', " + Strings.quote(src, "'") + ")";
java.add(k);
vars.put(k, src);
}
public void scriptWrite(String fn) {
try {
File f = new File(fn);
BufferedWriter w = new BufferedWriter(new FileWriter(f));
for (String s : script) {
w.write(s);
w.newLine();
}
w.close();
say("" + script.size() + " lines written to " + f.getAbsolutePath());
} catch (IOException e) {
fail("scriptWrite caught " + e);
}
}
}