Skip to content

Commit

Permalink
Add new tests for OptionalELResolver.invoke()
Browse files Browse the repository at this point in the history
  • Loading branch information
markt-asf committed Feb 21, 2024
1 parent bfe28b0 commit 56a121b
Showing 1 changed file with 94 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import jakarta.el.CompositeELResolver;
import jakarta.el.ELContext;
import jakarta.el.ELResolver;
import jakarta.el.MethodNotFoundException;
import jakarta.el.OptionalELResolver;
import jakarta.el.PropertyNotWritableException;

Expand Down Expand Up @@ -143,7 +144,7 @@ public static boolean testOptionalELResolverProperty(StringBuffer buf, Object ba

BareBonesELContext barebonesContext = new BareBonesELContext();

// OptionalELResolver depends on BeanELResolver to resolve properties of an Optional
// OptionalELResolver depends on BeanELResolver to resolve properties of an object wrapped in an Optional
ELResolver resolver = barebonesContext.getELResolver();
BeanELResolver beanResolver = new BeanELResolver();
OptionalELResolver optionalResolver = new OptionalELResolver();
Expand Down Expand Up @@ -188,13 +189,104 @@ public static boolean testOptionalELResolverProperty(StringBuffer buf, Object ba
return pass;
}

public class TestBean {
@Test
public void optionalELResolverEmptyInvoke() throws Exception {
boolean pass = true;
StringBuffer buf = new StringBuffer();
Object testObject = Optional.empty();

pass = testOptionalELResolverInvoke(buf, testObject, "doSomething", null);

if (!pass) {
throw new Exception(ELTestUtil.FAIL + buf.toString());
}
logger.log(Logger.Level.TRACE, buf.toString());
}

@Test
public void optionalELResolverEmptyInvokeInvalid() throws Exception {
boolean pass = true;
StringBuffer buf = new StringBuffer();
Object testObject = Optional.empty();

pass = testOptionalELResolverInvoke(buf, testObject, "unknownMethod", null);

if (!pass) {
throw new Exception(ELTestUtil.FAIL + buf.toString());
}
logger.log(Logger.Level.TRACE, buf.toString());
}

@Test
public void optionalELResolverObjectInvoke() throws Exception {
boolean pass = true;
StringBuffer buf = new StringBuffer();
TestBean testBean = new TestBean("data");
Object testObject = Optional.of(testBean);

pass = testOptionalELResolverInvoke(buf, testObject, "doSomething", TestBean.DATA);

if (!pass) {
throw new Exception(ELTestUtil.FAIL + buf.toString());
}
logger.log(Logger.Level.TRACE, buf.toString());
}

@Test
public void optionalELResolverObjectInvokeInvalid() throws Exception {
boolean pass = true;
StringBuffer buf = new StringBuffer();
TestBean testBean = new TestBean("data");
Object testObject = Optional.of(testBean);

try {
testOptionalELResolverInvoke(buf, testObject, "unknownMethod", null);
pass = false;
buf.append("invoke(): Expected MethodNotFoundException but no exception was thrown");
} catch (MethodNotFoundException mnfe) {
// Expected (so pass is not set to false)
}

if (!pass) {
throw new Exception(ELTestUtil.FAIL + buf.toString());
}
logger.log(Logger.Level.TRACE, buf.toString());
}

public static boolean testOptionalELResolverInvoke(StringBuffer buf, Object base, Object method, Object expectedValue) {
boolean pass = true;

BareBonesELContext barebonesContext = new BareBonesELContext();

// OptionalELResolver depends on BeanELResolver to invoke methods of an object wrapped in an Optional
ELResolver resolver = barebonesContext.getELResolver();
BeanELResolver beanResolver = new BeanELResolver();
OptionalELResolver optionalResolver = new OptionalELResolver();
((CompositeELResolver) resolver).add(optionalResolver);
((CompositeELResolver) resolver).add(beanResolver);
ELContext context = barebonesContext.getELContext();

// invoke()
Object result = resolver.invoke(context, base, method, null, null);
if (expectedValue == null && result != null || expectedValue != null && !expectedValue.equals(result)) {
buf.append("invoke(): Expected [" + expectedValue + "] but got [" + result + "]");
pass = false;
}

return pass;
}

public static class TestBean {
private static final String DATA = "interesting data";
private final String propertyA;
public TestBean(String propertyA) {
this.propertyA = propertyA;
}
public String getPropertyA() {
return propertyA;
}
public String doSomething() {
return DATA;
}
}
}

0 comments on commit 56a121b

Please # to comment.