package org.jtwig.render.expression.calculator; import org.jtwig.model.expression.Expression; import org.jtwig.model.expression.TernaryOperationExpression; import org.jtwig.render.RenderRequest; import org.jtwig.value.convert.Converter; import org.junit.Test; import static org.junit.Assert.assertSame; import static org.mockito.Mockito.*; public class TernaryExpressionCalculatorTest { private TernaryExpressionCalculator underTest = new TernaryExpressionCalculator(); @Test public void calculateIfUndefined() throws Exception { TernaryOperationExpression ternaryOperationExpression = mock(TernaryOperationExpression.class); RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Expression firstExpression = mock(Expression.class); Expression secondExpression = mock(Expression.class); Object condition = new Object(); Object whenTrueValue = new Object(); when(ternaryOperationExpression.getFirstExpression()).thenReturn(firstExpression); when(ternaryOperationExpression.getSecondExpression()).thenReturn(secondExpression); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, firstExpression)).thenReturn(condition); when(request.getEnvironment().getValueEnvironment().getBooleanConverter().convert(condition)).thenReturn(Converter.Result.<Boolean>undefined()); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, secondExpression)).thenReturn(whenTrueValue); Object result = underTest.calculate(request, ternaryOperationExpression); assertSame(whenTrueValue, result); } @Test public void calculateIfTrue() throws Exception { TernaryOperationExpression ternaryOperationExpression = mock(TernaryOperationExpression.class); RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Expression firstExpression = mock(Expression.class); Expression secondExpression = mock(Expression.class); Object condition = new Object(); Object whenTrueValue = new Object(); when(ternaryOperationExpression.getFirstExpression()).thenReturn(firstExpression); when(ternaryOperationExpression.getSecondExpression()).thenReturn(secondExpression); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, firstExpression)).thenReturn(condition); when(request.getEnvironment().getValueEnvironment().getBooleanConverter().convert(condition)).thenReturn(Converter.Result.defined(true)); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, secondExpression)).thenReturn(whenTrueValue); Object result = underTest.calculate(request, ternaryOperationExpression); assertSame(whenTrueValue, result); } @Test public void calculateIfFalse() throws Exception { TernaryOperationExpression ternaryOperationExpression = mock(TernaryOperationExpression.class); RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Expression firstExpression = mock(Expression.class); Expression secondExpression = mock(Expression.class); Expression thirdExpression = mock(Expression.class); Object condition = new Object(); Object whenTrueValue = new Object(); Object whenFalseValue = new Object(); when(ternaryOperationExpression.getFirstExpression()).thenReturn(firstExpression); when(ternaryOperationExpression.getSecondExpression()).thenReturn(secondExpression); when(ternaryOperationExpression.getThirdExpression()).thenReturn(thirdExpression); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, firstExpression)).thenReturn(condition); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, secondExpression)).thenReturn(whenTrueValue); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, thirdExpression)).thenReturn(whenFalseValue); when(request.getEnvironment().getValueEnvironment().getBooleanConverter().convert(condition)).thenReturn(Converter.Result.defined(false)); Object result = underTest.calculate(request, ternaryOperationExpression); assertSame(whenFalseValue, result); } }