Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[el-dev] Wrong TCK test for ambiguous methods?

Hi,

I was looking at the following test:

/*

   * @testName: methodExpressionMatchingAmbiguousTest

   * 

   * @assertion_ids: EL:SPEC:80

   * 

   * @test_Strategy: Validate that MethodExpression does not match a method when

   * the match is ambiguous and that a MethodNotFoundException is thrown

   */

  public void methodExpressionMatchingAmbiguousTest() throws Fault {


    StringBuffer buf = new StringBuffer();

    String exprStr = "#{bean.targetE('aaa',1234)}"; 


    boolean pass = true;


    try {


      ExpressionFactory expFactory = ExpressionFactory.newInstance();

      ELContext context = (new VarMapperELContext(testProps)).getELContext();

      

      MethodsBean bean = new MethodsBean();

      ValueExpression ve = expFactory.createValueExpression(bean, MethodsBean.class);

      context.getVariableMapper().setVariable("bean", ve);


      MethodExpression me = expFactory.createMethodExpression(context, exprStr, String.class, null);

      me.getMethodInfo(context);

      pass = false;

    } catch (MethodNotFoundException mnfe) {

      pass = true;

    } catch (Exception ex) {

      pass = false;

      TestUtil.logErr("Call to getMethodInfo() with ambiguous method _expression_ "

          + "threw the wrong Exception!" + NL + "Expected: MethodNotFoundException"

          + NL + "Received: " + ex.toString() + NL);


      ex.printStackTrace();

    }


    if (!pass)

      throw new Fault(ELTestUtil.FAIL + buf.toString());

    else

      TestUtil.logTrace(buf.toString());

  }


The methodsBean has the follows two targetE methods:

  public String targetE(Long arg0, Long arg1) {

    return "Long-Long";

  }


  public String targetE(String arg0, String arg1) {

    return "String-String";

  }


I don't see a (String, [number]) overload, so I think the method is not testing an ambiguous match, but just a method not found.


Those happen to throw the same exception, so it goes undetected here.


Thoughts?


Kind regards,

Arjan



Back to the top