public void testVariableInjection2() {
String[] varNames = {"x", "y", "z"};
Object[] values = {10, 20, 30};
String expr = "foo = -1; res = x + y + z;\n" +
"if (x > 9) {\n" +
" res = z - y - x;\n" +
" int k = 5;\n" +
" foo = k;" +
"}; \n"
+ "for (i = 0; i < 100000; i++) { foo++; }; foo;";
ParserContext ctx = ParserContext.create();
ctx.addIndexedInput(varNames);
ctx.setIndexAllocation(true);
SimpleVariableSpaceModel model = VariableSpaceCompiler.compile(expr, ctx);
Serializable indexCompile = MVEL.compileExpression(expr, ctx);
Serializable dynamicCompile = MVEL.compileExpression(expr, ParserContext.create());
Map<String, Object> map = new HashMap<String, Object>();
map.put("x", 10);
map.put("y", 20);
map.put("z", 30);
assertEquals(MVEL.executeExpression(dynamicCompile, map),
MVEL.executeExpression(indexCompile, model.createFactory(values)));
}