package com.redhat.ceylon.compiler.java.test.fordebug;
import java.io.File;
import org.junit.Test;
import com.redhat.ceylon.compiler.java.test.fordebug.Tracer.HandlerResult;
import com.redhat.ceylon.compiler.java.test.fordebug.Tracer.MethodEntry;
import com.redhat.ceylon.compiler.java.test.fordebug.Tracer.MethodExit;
import com.redhat.ceylon.compiler.java.test.fordebug.Tracer.Step;
public class TraceTests extends DebuggerTests {
@Override
protected String transformDestDir(String name) {
return name + "-trace";
}
private void compileAndTrace(String mainClass, String ceylonSource) throws Exception {
compareWithJavaSource(ceylonSource);
trace(ceylonSource+".ceylon", mainClass);
}
private void trace(String ceylonSource, String mainClass) throws Exception {
String sourceName = new File(ceylonSource).getName();
String traceFile = ceylonSource.replaceAll(".ceylon$", ".trace");
try (Tracer tracer = tracer(mainClass)) {
tracer.start();
// stop when we enter main()
MethodEntry entry = tracer.methodEntry().classFilter(mainClass).methodFilter("main").result(HandlerResult.SUSPEND).enable();
// resume until we hit that, then disable it
tracer.resume();
entry.disable();
// now step into everything, logging only events which come from code in the given source file.
Step step = tracer.step().within(sourceName).log().enable();
// and also listen out for when we exit main()
MethodExit exit = tracer.methodExit().classFilter(mainClass).methodFilter("main").result(HandlerResult.SUSPEND).enable();
// once we've exited main() disable the step breakpoint
tracer.resume();
if (tracer.isVmAlive()) {
step.disable();
tracer.resume();
}
System.err.println(tracer.getTrace());
assertSameTrace(tracer, traceFile);
}
}
@Test
public void testAssertFalse() throws Exception {
compileAndTrace(
"com.redhat.ceylon.compiler.java.test.fordebug.trace.assertFalse_",
"trace/AssertFalse"
);
}
@Test
public void testDefaultParameters() throws Exception {
compileAndTrace(
"com.redhat.ceylon.compiler.java.test.fordebug.trace.defaultedParametersMain_",
"trace/DefaultedParameters"
);
}
@Test
public void testBug2043() throws Exception {
compileAndTrace(
"com.redhat.ceylon.compiler.java.test.fordebug.trace.bug2043_",
"trace/Bug2043"
);
}
@Test
public void testBug2046() throws Exception {
compileAndTrace(
"com.redhat.ceylon.compiler.java.test.fordebug.trace.bug2046_",
"trace/Bug2046"
);
}
@Test
public void testBug2047() throws Exception {
compileAndTrace(
"com.redhat.ceylon.compiler.java.test.fordebug.trace.bug2047_",
"trace/Bug2047"
);
}
@Test
public void testSwitch() throws Exception {
compileAndTrace(
"com.redhat.ceylon.compiler.java.test.fordebug.trace.swtch_",
"trace/Switch"
);
}
}