use of org.mvel2.integration.VariableResolverFactory in project mvel by mikebrock.
the class DebuggerTests method testDebuggerInvoke2.
public void testDebuggerInvoke2() {
count = 0;
MVELRuntime.resetDebugger();
MVELRuntime.setThreadDebugger(new Debugger() {
public int onBreak(Frame frame) {
count++;
return 0;
}
});
String src = "a1=7;\na2=8;\nSystem.out.println(\"h\");\nac=23;\nde=23;\nge=23;\ngef=34;";
ExpressionCompiler c = new ExpressionCompiler(src);
ParserContext ctx = new ParserContext();
ctx.setSourceFile("mysource");
ctx.setDebugSymbols(true);
CompiledExpression compexpr = c.compile(ctx);
System.out.println(decompile(compexpr));
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 1);
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 2);
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 3);
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 4);
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 5);
VariableResolverFactory factory = new DefaultLocalVariableResolverFactory();
MVEL.executeDebugger(compexpr, null, factory);
System.out.println(count);
assertEquals(5, count);
}
use of org.mvel2.integration.VariableResolverFactory in project mvel by mikebrock.
the class DebuggerTests method testDebugSymbolsSingleStatement.
public void testDebugSymbolsSingleStatement() {
String ex = "System.out.println( Cheese.STILTON );";
ParserContext ctx = new ParserContext();
ctx.setStrongTyping(true);
ctx.addImport(Cheese.class);
try {
ExpressionCompiler compiler = new ExpressionCompiler(ex);
CompiledExpression expr = compiler.compile(ctx);
// executing the following line with a MVEL.executeExpression() works fine
// but executeDebugger() fails
MVEL.executeDebugger(expr, null, (VariableResolverFactory) null);
} catch (Throwable e) {
e.printStackTrace();
fail("Should not raise exception: " + e.getMessage());
}
}
use of org.mvel2.integration.VariableResolverFactory in project mvel by mikebrock.
the class DebuggerTests method testDebuggerInvoke.
public void testDebuggerInvoke() {
count = 0;
MVELRuntime.resetDebugger();
MVELRuntime.setThreadDebugger(new Debugger() {
public int onBreak(Frame frame) {
if (frame.getFactory().isResolveable("a1")) {
a1++;
}
if (frame.getFactory().isResolveable("a4")) {
a4++;
System.out.println("HEI " + frame.getLineNumber());
}
count++;
return 0;
}
});
String src = "a1=7;\na2=8;\na3=9;\na4=10;\na5=11;\na6=12;\na7=13;\na8=14;";
ExpressionCompiler c = new ExpressionCompiler(src);
ParserContext ctx = new ParserContext();
ctx.setSourceFile("mysource");
ctx.setDebugSymbols(true);
CompiledExpression compexpr = c.compile(ctx);
System.out.println(decompile(compexpr));
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 1);
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 3);
MVELRuntime.registerBreakpoint(ctx.getSourceFile(), 7);
VariableResolverFactory factory = new DefaultLocalVariableResolverFactory();
MVEL.executeDebugger(compexpr, null, factory);
System.out.println(a1);
System.out.println(a4);
System.out.println(count);
assertEquals(2, a1);
// test passes but the breakpoint should be received by line 7, not by line 3
assertEquals(1, a4);
// three breakpoints FAILS
assertEquals(3, count);
}
use of org.mvel2.integration.VariableResolverFactory in project mvel by mikebrock.
the class MacroProcessorTest method testMacroSupportWithDebugging.
public void testMacroSupportWithDebugging() {
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("foo", new Foo());
Map<String, Interceptor> interceptors = new HashMap<String, Interceptor>();
Map<String, Macro> macros = new HashMap<String, Macro>();
interceptors.put("Modify", new Interceptor() {
public int doBefore(ASTNode node, VariableResolverFactory factory) {
((WithNode) node).getNestedStatement().getValue(null, factory);
factory.createVariable("mod", "FOOBAR!");
return 0;
}
public int doAfter(Object val, ASTNode node, VariableResolverFactory factory) {
return 0;
}
});
macros.put("modify", new Macro() {
public String doMacro() {
return "@Modify with";
}
});
ExpressionCompiler compiler = new ExpressionCompiler(parseMacros("System.out.println('hello');\n" + "System.out.println('bye');\n" + "modify (foo) { aValue = 'poo', \n" + " aValue = 'poo' };\n mod", macros));
// compiler.setDebugSymbols(true);
ParserContext ctx = new ParserContext(null, interceptors, null);
ctx.setSourceFile("test.mv");
ctx.setDebugSymbols(true);
CompiledExpression compiled = compiler.compile(ctx);
MVELRuntime.setThreadDebugger(new Debugger() {
public int onBreak(Frame frame) {
System.out.println(frame.getSourceName() + ":" + frame.getLineNumber());
return Debugger.STEP;
}
});
MVELRuntime.registerBreakpoint("test.mv", 3);
System.out.println(DebugTools.decompile(compiled));
Assert.assertEquals("FOOBAR!", MVEL.executeDebugger(compiled, null, new MapVariableResolverFactory(vars)));
}
use of org.mvel2.integration.VariableResolverFactory in project mvel by mikebrock.
the class CoreConfidenceTests method testInterceptors.
public void testInterceptors() {
Interceptor testInterceptor = new Interceptor() {
public int doBefore(ASTNode node, VariableResolverFactory factory) {
System.out.println("BEFORE Node: " + node.getName());
return 0;
}
public int doAfter(Object val, ASTNode node, VariableResolverFactory factory) {
System.out.println("AFTER Node: " + node.getName());
return 0;
}
};
Map<String, Interceptor> interceptors = new HashMap<String, Interceptor>();
interceptors.put("test", testInterceptor);
executeExpression(compileExpression("@test System.out.println('MIDDLE');", null, interceptors));
}
Aggregations