@Test public void testDebugSymbolCount() { String expr = "System.out.println( \"a1\" );\n" + "System.out.println( \"a2\" );\n" + "System.out.println( \"a3\" );\n" + "System.out.println( \"a4\" );\n"; ParserContext context = new ParserContext(); context.setDebugSymbols( true ); context.addImport( "System", System.class ); context.setStrictTypeEnforcement( true ); //context.setDebugSymbols( true ); context.setSourceFile( "mysource" ); ExpressionCompiler compiler = new ExpressionCompiler( expr, context ); Serializable compiledExpression = compiler.compile(); String s = DebugTools.decompile( compiledExpression ); System.out.println( "s " + s ); int fromIndex = 0; int count = 0; while ( (fromIndex = s.indexOf( "DEBUG_SYMBOL", fromIndex + 1 )) > -1 ) { count++; } assertEquals( 4, count ); }
public void testParsingStability2() { Map<String, Object> imports = new HashMap<String, Object>(); imports.put("java.awt.Dimension", Dimension.class); final ParserContext parserContext = new ParserContext(imports, null, "sourceFile"); parserContext.setStrictTypeEnforcement(false); ExpressionCompiler compiler = new ExpressionCompiler("( dim.height == 1 || dim.height == ( 1+1) || dim.height == x )", parserContext); compiler.compile(); }
public void testPrimitiveSubtyping() { ParserConfiguration conf = new ParserConfiguration(); ParserContext pctx = new ParserContext( conf ); pctx.setStrictTypeEnforcement(true); pctx.setStrongTyping(true); BigDecimal result = (BigDecimal)MVEL.executeExpression(MVEL.compileExpression("java.math.BigDecimal.valueOf(100)", pctx), new HashMap()); assertEquals("100", result.toString()); }
public void testBigDecimalOutput() { String str = "import java.math.BigDecimal; BigDecimal test = new BigDecimal(\"50000\"); System.out.println(test / new BigDecimal(\"1.13\"));"; ParserConfiguration pconf = new ParserConfiguration(); ParserContext pctx = new ParserContext(pconf); pctx.setStrongTyping(true); pctx.setStrictTypeEnforcement(true); ExecutableStatement stmt = (ExecutableStatement) MVEL.compileExpression(str, pctx); MVEL.executeExpression(stmt, new HashMap()); }
public void testDynamicImportsWithIdentifierSameAsClassWithDiffCase() { ParserContext ctx = new ParserContext(); ctx.addPackageImport("org.mvel2.tests.core.res"); ctx.setStrictTypeEnforcement(false); ExpressionCompiler compiler = new ExpressionCompiler("bar.add(\"hello\")", ctx); compiler.compile(); }
public void testJIRA96() { ParserContext ctx = new ParserContext(); ctx.setStrictTypeEnforcement(true); ctx.addInput("fooString", String[].class); ExpressionCompiler compiler = new ExpressionCompiler("fooString[0].toUpperCase()", ctx); compiler.compile(); }
public void testUppercaseField() { String ex = "Field1 == \"foo\" || FIELD2 == \"bar\""; final ParserContext parserContext2 = new ParserContext(); parserContext2.setStrictTypeEnforcement(true); parserContext2.setStrongTyping(true); parserContext2.addInput("this", Bean1.class); MVEL.analyze(ex, parserContext2); }
public void testProvidedExternalTypes() { ParserContext ctx = new ParserContext(); ctx.setStrictTypeEnforcement(true); ctx.addInput("foo", Foo.class); ExpressionCompiler compiler = new ExpressionCompiler("foo.bar", ctx); compiler.compile(); }
private Class<?> expressionReturnType(String expr) { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("this", Bean1.class); MVEL.compileExpression(expr, parserContext); return MVEL.analyze(expr, parserContext); }
public void testStaticNestedWithImport() { String expr = "Message.GOODBYE;\n"; ParserContext context = new ParserContext(); context.setStrictTypeEnforcement(false); context.addImport("Message", Message.class); ExpressionCompiler compiler = new ExpressionCompiler(expr, context); assertEquals(1, executeExpression(compiler.compile())); }
public void testPrimitiveNumberCoercion() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("a", int.class); parserContext.addInput("b", double.class); Class<?> clazz = MVEL.analyze("a > b", parserContext); assertEquals(Boolean.class, clazz); }
public void testGenericsWithOr() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("o", OrderLine.class); parserContext.addInput("p", Product.class); Class<?> clazz = MVEL.analyze("p.id == o.product.id || p.category == o.product.category", parserContext); assertEquals(Boolean.class, clazz); }
public void testFieldNameWithUnderscore() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("this", Underscore.class); Underscore underscore = new Underscore(); assertEquals(true, MVEL.executeExpression(MVEL.compileExpression("_id == \"test\"", parserContext), underscore)); }
public void testUnaryNegative() { ParserConfiguration conf = new ParserConfiguration(); ParserContext pctx = new ParserContext( conf ); pctx.setStrictTypeEnforcement(true); pctx.setStrongTyping(true); pctx.addInput("value", int.class); Map vars = new HashMap() {{ put("value", 42); }}; assertEquals(-42, MVEL.executeExpression(MVEL.compileExpression("-value", pctx), vars)); }
public void testAnalyzeTernary() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("value", String.class); parserContext.addInput("x", Integer.class); parserContext.addInput("y", Integer.class); parserContext.addInput("z", Integer.class); Class<?> clazz = MVEL.analyze("z = (value == \"ALU\" ? x : y);", parserContext); assertEquals(Integer.class, clazz); }
public void testInstanceofOnInnerClass() { ParserConfiguration conf = new ParserConfiguration(); conf.addImport(ARef.class); ParserContext pctx = new ParserContext( conf ); pctx.setStrictTypeEnforcement(true); pctx.setStrongTyping(true); pctx.addInput("value", Object.class); Map vars = new HashMap() {{ put("value", new ARef()); }}; assertEquals(true, MVEL.executeExpression(MVEL.compileExpression("value instanceof ARef", pctx), vars)); assertEquals(true, MVEL.executeExpression(MVEL.compileExpression("value instanceof " + ARef.class.getCanonicalName(), pctx), vars)); }
public void testFloat() { ParserConfiguration conf = new ParserConfiguration(); conf.addImport( FactWithFloat.class ); ParserContext pctx = new ParserContext( conf ); pctx.setStrictTypeEnforcement(true); pctx.setStrongTyping(true); pctx.addInput("this", FactWithFloat.class); boolean result = ( Boolean ) MVEL.executeExpression(MVEL.compileExpression("floatObjectValue == 15.1", pctx), new FactWithFloat(15.1f)); assertTrue( result ); } }
public void testInvokeVarargConstructor() { ParserConfiguration conf = new ParserConfiguration(); conf.addImport( Thingy.class ); ParserContext pctx = new ParserContext( conf ); pctx.setStrictTypeEnforcement(true); pctx.setStrongTyping(true); pctx.addInput("name", String.class); Map vars = new HashMap() {{ put("name", "test"); }}; Thingy result = (Thingy) MVEL.executeExpression(MVEL.compileExpression("new Thingy(name)", pctx), vars); assertEquals( "test", result.getName() ); }
public void testInvokeMethodInAbstractClass() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("a", O1.class); assertEquals(String.class, MVEL.analyze("a.getObj().getValue()", parserContext)); Map vars = new HashMap() {{ put("a", new O1()); }}; assertEquals("value", MVEL.executeExpression(MVEL.compileExpression("a.getObj().getValue()", parserContext), vars)); }
public void testMultiplyIntByDouble() { ParserConfiguration conf = new ParserConfiguration(); ParserContext pctx = new ParserContext( conf ); pctx.setStrictTypeEnforcement(true); pctx.setStrongTyping(true); pctx.addInput("i", Integer.class); pctx.addInput("d", Double.class); Map vars = new HashMap() {{ put("i", 10); put("d", 0.3); }}; assertEquals(3.0, MVEL.executeExpression(MVEL.compileExpression("i*d", pctx), vars)); assertEquals(3.0, MVEL.executeExpression(MVEL.compileExpression("i*0.3", pctx), vars)); }