### Question:
LowerExpression implements Expression { @Override public ExpressionResult apply(ExpressionContext context, ExpressionResult input) { ExpressionResult value = expression.apply(context, input); return (value == null || !value.isNonNull()) ? NullExpressionResult.INSTANCE : new StringExpressionResult(value.toString().toLowerCase()); } LowerExpression(String alias, Expression expression); @Override ExpressionResult apply(ExpressionContext context, ExpressionResult input); @Override String alias();  }### Answer:
@Test public void lower() { ExpressionResult actual = testSubject.apply(expressionContext, mapValue("value", stringValue("UpperCase"))); assertEquals("uppercase", actual.getValue()); }
@Test public void lowerNull() { ExpressionResult actual = testSubject.apply(expressionContext, mapValue("value123", stringValue("UpperCase"))); assertNull( actual.getValue()); }