public static Class analyze(String expression, ParserContext ctx) { return analyze(expression.toCharArray(), ctx); }
public static Class analyze(String expression, ParserContext ctx) { return analyze(expression.toCharArray(), ctx); }
public static Class analyze(String expression, ParserContext ctx) { return analyze(expression.toCharArray(), ctx); }
public void testReturnTypeExtendingGeneric() { final ParserContext parserContext = new ParserContext(); parserContext.setStrongTyping(true); parserContext.addInput("this", StringConcrete.class); assertEquals(String.class, MVEL.analyze("foo.concat(\"bar\")", parserContext)); assertEquals(String.class, MVEL.analyze("getFoo().concat(\"bar\")", parserContext)); }
public void testVarArgs() throws Exception { ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); MVEL.analyze("String.format(\"\");", parserContext); }
public void testPippo() { final ParserContext parserContext = new ParserContext(); parserContext.setStrongTyping(true); assertEquals(String.class, MVEL.analyze("new String(\"b)ar\")", parserContext)); }
public void testTypeCalculation() { ParserContext ctx = ParserContext.create().stronglyTyped(); ctx.addInput("foo", Foo.class); Class cls = MVEL.analyze("foo.bar.testList.get(0)", ctx); assertTrue(Integer.class.isAssignableFrom(cls)); }
public void testNoArgMethodInheritance() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("a", Parent.class); parserContext.addInput("b", Child.class); assertEquals(Object.class, MVEL.analyze("a.getSomething()", parserContext)); assertEquals(String.class, MVEL.analyze("b.getSomething()", parserContext)); }
public void testRegExWithCast() { final ParserContext parserContext = new ParserContext(); parserContext.setStrongTyping(true); parserContext.addInput("this", Foo.class); assertEquals(Boolean.class, MVEL.analyze("(String)bar.name ~= '[a-z].+'", parserContext)); }
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 testUntypedClone() { String expression = "obj.clone();"; ParserContext context = new ParserContext(); context.setStrongTyping(false); context.setStrictTypeEnforcement(false); MVEL.analyze(expression, context); try { context.addInput("obj", Object.class); context.setStrongTyping(true); context.setStrictTypeEnforcement(true); MVEL.analyze(expression, context); fail("Must fail with strong typing"); } catch (CompileException e) { } }
public void testParseGenericMap() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("conv", Convention.class); assertEquals(List.class, MVEL.analyze("conv.getComms().get(\"test\")", parserContext)); }
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 testMethodReturningPrimitiveTypeAnalysis() { String str = "value"; ParserConfiguration pconf = new ParserConfiguration(); ParserContext pctx = new ParserContext(pconf); pctx.addInput("this", MyObj.class); pctx.setStrongTyping(true); Class<?> returnType = MVEL.analyze(str, pctx); assertEquals(long.class, returnType); }
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 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 testAnalyzeWrongTernary() { 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); try { Class<?> clazz = MVEL.analyze( "z = (value = \"ALU\" ? x : y);", parserContext ); fail("parse of this expression should raise an error"); } catch (Exception e) { } }
public void testCovariance() { final ParserContext parserContext = new ParserContext(); parserContext.setStrictTypeEnforcement(true); parserContext.setStrongTyping(true); parserContext.addInput("this", ImplementationA.class); assertEquals(int.class, MVEL.analyze("b.value", parserContext)); assertEquals(42, MVEL.executeExpression(MVEL.compileExpression("b.value", parserContext), new ImplementationA())); }
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)); }