package org.jtwig.render.expression.calculator.operation.binary.calculators.selection; import org.jtwig.model.expression.ConstantExpression; import org.jtwig.model.expression.Expression; import org.jtwig.model.expression.FunctionExpression; import org.jtwig.model.expression.VariableExpression; import org.junit.Test; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; public class SelectionErrorMessageGeneratorTest { private SelectionErrorMessageGenerator underTest = new SelectionErrorMessageGenerator(); @Test public void explainLeftAndRightPresent() throws Exception { String left = "left"; String right = "right"; VariableExpression leftOperand = mock(VariableExpression.class); FunctionExpression rightOperand = mock(FunctionExpression.class); given(leftOperand.getIdentifier()).willReturn(left); given(rightOperand.getFunctionIdentifier()).willReturn(right); String result = underTest.explain(leftOperand, rightOperand); assertThat(result, is(String.format("Cannot extract property '%s' out of '%s'", right, left))); } @Test public void explainOnlyRightPresent() throws Exception { String right = "right"; Expression leftOperand = mock(Expression.class); FunctionExpression rightOperand = mock(FunctionExpression.class); given(rightOperand.getFunctionIdentifier()).willReturn(right); String result = underTest.explain(leftOperand, rightOperand); assertThat(result, is(String.format("Cannot extract property '%s'", right))); } @Test public void explainOnlyLeftPresent() throws Exception { String left = "left"; ConstantExpression leftOperand = mock(ConstantExpression.class); Expression rightOperand = mock(Expression.class); given(leftOperand.getConstantValue()).willReturn(left); String result = underTest.explain(leftOperand, rightOperand); assertThat(result, is(String.format("Cannot extract property out of '%s'", left))); } @Test public void explainNonePresent() throws Exception { Expression leftOperand = mock(Expression.class); Expression rightOperand = mock(Expression.class); String result = underTest.explain(leftOperand, rightOperand); assertThat(result, is("Cannot extract property")); } }