package org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.observers; import java.io.PrintWriter; import java.util.HashSet; import java.util.Iterator; import org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.Frame; import org.rascalmpl.library.experiments.Compiler.RVM.Interpreter.RascalExecutionContext; import org.rascalmpl.value.IList; import org.rascalmpl.value.IListWriter; import org.rascalmpl.value.ISourceLocation; import org.rascalmpl.value.IValue; import org.rascalmpl.values.ValueFactoryFactory; public class CoverageFrameObserver implements IFrameObserver { private final PrintWriter stdout; private final HashSet<ISourceLocation> data; private boolean collecting; public CoverageFrameObserver(RascalExecutionContext rex){ this.stdout = rex.getStdOut(); this.data = new HashSet<ISourceLocation>(); collecting = true; } @Override public boolean observe(Frame frame) { if(collecting){ //System.err.println("observe: " + frame.src); data.add(frame.src); //System.err.println("data:" + data); } return true; } @Override public IList getData(){ IListWriter w = ValueFactoryFactory.getValueFactory().listWriter(); System.err.println("getData: " + data); for (ISourceLocation src : data) { //System.err.println("getData: " + src); w.insert(src); } return w.done(); } @Override public void report(IList data) { Iterator<IValue> iter = data.iterator(); stdout.println(data.length() > 0 ? "COVERAGE:" : "NO COVERAGE DATA"); while(iter.hasNext()){ stdout.printf("%s\n", iter.next()); } stdout.flush(); } @Override public void report() { stdout.println(data.size() > 0 ? "COVERAGE:" : "NO COVERAGE DATA"); for(ISourceLocation src : data){ stdout.printf("%s\n", src); } stdout.flush(); } }