@Test
public void testComplexPOJOExpression()
{

  Expression expression = createExpression(fqcn, "{$}.innerObj.boolVal && ({$}.innerObj.intVal == 11)", boolean.class);
  assertTrue((Boolean)expression.execute(testObj));
  expression = createExpression(fqcn, "valueOf({$.innerObj.privateIntVal}) + substring({$.innerObj.stringVal}, 2) + {$.innerObj.privateStringVal}.length()",
      String.class, new String[]{"org.apache.commons.lang3.StringUtils.*",
          "java.lang.String.valueOf"});
  assertEquals("11llo5", expression.execute(testObj));
  expression = createExpression(fqcn, "round(pow({$.innerObj.privateFloatVal}, {$.innerObj.privateDoubleVal}))", long.class, new String[] {"java.lang.Math.*"});
  assertEquals(46162L, expression.execute(testObj));
  expression = createExpression(fqcn, "{$.innerObj.privateFloatVal} > 0 && {$.innerObj.privateStringVal}.length() > 0", boolean.class);
  assertEquals(true, expression.execute(testObj));
}