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, ctx); CompiledExpression expr = compiler.compile(); // 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()); } }
)); Assert.assertEquals("FOOBAR!", MVEL.executeDebugger(compiled, null, new MapVariableResolverFactory(vars)));
assertEquals(1, MVEL.executeDebugger(compiled, null, new MapVariableResolverFactory(createTestMap()))); assertTrue("Debugger did not break at line 9", linesEncountered.contains(9));
assertEquals("bar", MVEL.executeDebugger(compiled, null, new MapVariableResolverFactory(createTestMap()))); assertTrue("did not break at line 1", breaked.contains(1));
public void testBreakpoints() { ParserContext ctx = new ParserContext(); ctx.setSourceFile( "test.mv" ); ctx.setDebugSymbols( true ); ExpressionCompiler compiler = new ExpressionCompiler("a = 5;\nb = 5;\n\nif (a == b) {\n\nSystem.out.println('Good');\nreturn a + b;\n}\n", ctx); System.out.println("-------\n" + compiler.getExpression() + "\n-------\n"); CompiledExpression compiled = compiler.compile(); MVELRuntime.registerBreakpoint("test.mv", 7); final Set<Integer> breaked = new HashSet<Integer>(); Debugger testDebugger = new Debugger() { public int onBreak(Frame frame) { System.out.println("Breakpoint [source:" + frame.getSourceName() + "; line:" + frame.getLineNumber() + "]"); breaked.add(frame.getLineNumber()); return 0; } }; MVELRuntime.setThreadDebugger(testDebugger); assertEquals(10, MVEL.executeDebugger(compiled, null, new MapVariableResolverFactory(createTestMap()))); assertTrue("did not break at line 7", breaked.contains(7)); }
public void evaluate(final KnowledgeHelper knowledgeHelper, final WorkingMemory workingMemory) throws Exception { VariableResolverFactory factory = unit.getFactory( knowledgeHelper, ((AgendaItem)knowledgeHelper.getActivation()).getRuleTerminalNode().getDeclarations(), knowledgeHelper.getRule(), knowledgeHelper, (LeftTuple) knowledgeHelper.getTuple(), null, (InternalWorkingMemory) workingMemory, workingMemory.getGlobalResolver() ); // do we have any functions for this namespace? Package pkg = workingMemory.getRuleBase().getPackage( "MAIN" ); if ( pkg != null ) { MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData( this.id ); factory.setNextFactory( data.getFunctionFactory() ); } CompiledExpression compexpr = (CompiledExpression) this.expr; if ( MVELDebugHandler.isDebugMode() ) { if ( MVELDebugHandler.verbose ) { logger.info(DebugTools.decompile(compexpr)); } MVEL.executeDebugger( compexpr, knowledgeHelper, factory ); } else { MVEL.executeExpression( compexpr, knowledgeHelper, factory ); } }
assertEquals("bar", MVEL.executeDebugger(compiled, null, new MapVariableResolverFactory(createTestMap()))); assertTrue("did not fire before", result.firedBefore); assertTrue("did not fire after", result.firedAfter);
MVEL.executeDebugger(compexpr, null, factory);
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;"; ParserContext ctx = new ParserContext(); ctx.setSourceFile("mysource"); ctx.setDebugSymbols(true); ExpressionCompiler c = new ExpressionCompiler(src, ctx); CompiledExpression compexpr = c.compile(); 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); }
assertEquals(1, MVEL.executeDebugger(compiled, null, new MapVariableResolverFactory(createTestMap()))); assertEquals("did not break at expected lines", Make.Set.<Integer>$()._(6)._(8)._(9)._(10)._(), breaked);