### Question:
Jsf12ValidatingElResolver implements ValidatingElResolver { public JsfElValidator declareVariable(String name, Object value) { validatingResolver.getVariableResolver().declareVariable(name, value); return this; } Jsf12ValidatingElResolver(); @Override /** {@inheritDoc} */ ValidationResult validateElExpression(String elExpression, AttributeInfo attributeInfo); JsfElValidator declareVariable(String name, Object value); JsfElValidator definePropertyTypeOverride(String mapJsfExpression,
            Class<?> newType); void setUnknownVariableResolver(
            ElVariableResolver unknownVariableResolver); void setIncludeKnownVariablesInException(
            boolean includeKnownVariablesInException); void addElExpressionFilter(ElExpressionFilter elExpressionFilter); static final Pattern RE_LAST_EL_PROPERTY; }### Answer:
@Test public void should_recognize_both_jsf_and_uel_expression_markers() throws Exception { elResolver.declareVariable("myStringBean", "Hello!"); assertResultValue("#{myStringBean}", "Hello!"); assertResultValue("${myStringBean}", "Hello!"); assertResultValue("this is a literal string, not an EL expression" , "this is a literal string, not an EL expression"); }
@Test public void should_fake_method_of_any_arguments_and_arity() throws Exception { assertExpressionValid("#{fake:fakeFunction0()}"); assertExpressionValid("#{fake:fakeFunction1(123) == true}"); assertExpressionValid("#{fake:fakeFunction2('string', 456) == 987}"); elResolver.declareVariable("myArray", new String[0]); assertExpressionValid("#{fake:fakeFunction3(myArray, 'myString')}"); assertExpressionValid("#{f:parentFunc(fake:oneParamFunc(), another:anotherParamFunc(456))}"); }