@Test
  public void testInvoke() {
    TesterBeanB beanB = new TesterBeanB();
    beanB.setName("B");

    context
        .getVariableMapper()
        .setVariable("beanB", factory.createValueExpression(beanB, TesterBeanB.class));

    MethodExpression me1 =
        factory.createMethodExpression(
            context, "${beanB.getName}", String.class, new Class<?>[] {});
    MethodExpression me2 =
        factory.createMethodExpression(
            context, "${beanB.sayHello('JUnit')}", String.class, new Class<?>[] {String.class});
    MethodExpression me3 =
        factory.createMethodExpression(
            context, "${beanB.sayHello}", String.class, new Class<?>[] {String.class});

    assertEquals("B", me1.invoke(context, null));
    assertEquals("Hello JUnit from B", me2.invoke(context, null));
    assertEquals("Hello JUnit from B", me2.invoke(context, new Object[] {"JUnit2"}));
    assertEquals("Hello JUnit2 from B", me3.invoke(context, new Object[] {"JUnit2"}));
    assertEquals("Hello JUnit from B", me2.invoke(context, new Object[] {null}));
    assertEquals("Hello  from B", me3.invoke(context, new Object[] {null}));
  }
  @Before
  public void setUp() {
    factory = ExpressionFactory.newInstance();
    context = new ELContextImpl();

    TesterBeanA beanA = new TesterBeanA();
    beanA.setName("A");
    context
        .getVariableMapper()
        .setVariable("beanA", factory.createValueExpression(beanA, TesterBeanA.class));

    TesterBeanAA beanAA = new TesterBeanAA();
    beanAA.setName("AA");
    context
        .getVariableMapper()
        .setVariable("beanAA", factory.createValueExpression(beanAA, TesterBeanAA.class));

    TesterBeanAAA beanAAA = new TesterBeanAAA();
    beanAAA.setName("AAA");
    context
        .getVariableMapper()
        .setVariable("beanAAA", factory.createValueExpression(beanAAA, TesterBeanAAA.class));

    TesterBeanB beanB = new TesterBeanB();
    beanB.setName("B");
    context
        .getVariableMapper()
        .setVariable("beanB", factory.createValueExpression(beanB, TesterBeanB.class));

    TesterBeanBB beanBB = new TesterBeanBB();
    beanBB.setName("BB");
    context
        .getVariableMapper()
        .setVariable("beanBB", factory.createValueExpression(beanBB, TesterBeanBB.class));

    TesterBeanBBB beanBBB = new TesterBeanBBB();
    beanBBB.setName("BBB");
    context
        .getVariableMapper()
        .setVariable("beanBBB", factory.createValueExpression(beanBBB, TesterBeanBBB.class));

    TesterBeanC beanC = new TesterBeanC();
    context
        .getVariableMapper()
        .setVariable("beanC", factory.createValueExpression(beanC, TesterBeanC.class));

    TesterBeanEnum beanEnum = new TesterBeanEnum();
    context
        .getVariableMapper()
        .setVariable("beanEnum", factory.createValueExpression(beanEnum, TesterBeanEnum.class));
  }
  @Test
  public void testIsParametersProvided() {
    TesterBeanB beanB = new TesterBeanB();
    beanB.setName("Tomcat");
    ValueExpression var = factory.createValueExpression(beanB, TesterBeanB.class);
    context.getVariableMapper().setVariable("beanB", var);

    MethodExpression me1 =
        factory.createMethodExpression(
            context, "${beanB.getName}", String.class, new Class<?>[] {});
    MethodExpression me2 =
        factory.createMethodExpression(
            context, "${beanB.sayHello('JUnit')}", String.class, new Class<?>[] {String.class});

    assertFalse(me1.isParmetersProvided());
    assertTrue(me2.isParmetersProvided());
  }
 @Test
 public void testBug53792c() {
   MethodExpression me =
       factory.createMethodExpression(
           context, "#{beanB.sayHello().length()}", null, new Class<?>[] {});
   Integer result = (Integer) me.invoke(context, null);
   assertEquals(beanB.sayHello().length(), result.intValue());
 }