package org.jtwig.value.compare; import org.jtwig.render.RenderRequest; import org.jtwig.value.convert.Converter; import org.junit.Test; import java.math.BigDecimal; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; public class DefaultValueComparatorTest { private final DefaultValueComparator underTest = new DefaultValueComparator(); @Test public void compareIfNumbersEqual() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.defined(BigDecimal.ONE)); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.defined(BigDecimal.ONE)); int result = underTest.compare(request, left, right); assertEquals(0, result); } @Test public void compareIfNumbersLess() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.defined(BigDecimal.ZERO)); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.defined(BigDecimal.ONE)); int result = underTest.compare(request, left, right); assertEquals(-1, result); } @Test public void compareIfNumbersGreater() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.defined(BigDecimal.TEN)); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.defined(BigDecimal.ONE)); int result = underTest.compare(request, left, right); assertEquals(1, result); } @Test public void otherThanNumbersLess() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(left)).thenReturn("testA"); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(right)).thenReturn("testB"); int result = underTest.compare(request, left, right); assertEquals(-1, result); } @Test public void otherThanNumbersGreater() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(left)).thenReturn("testC"); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(right)).thenReturn("testB"); int result = underTest.compare(request, left, right); assertEquals(1, result); } @Test public void otherThanNumbersEqual() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(left)).thenReturn("test"); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(right)).thenReturn("test"); int result = underTest.compare(request, left, right); assertEquals(0, result); } @Test public void compareLeftNumberRightNot() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.defined(BigDecimal.TEN)); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(left)).thenReturn("a"); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(right)).thenReturn("b"); int result = underTest.compare(request, left, right); assertEquals(-1, result); } @Test public void compareLeftNotRightNumber() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); Object left = new Object(); Object right = new Object(); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(left)).thenReturn(Converter.Result.<BigDecimal>undefined()); when(request.getEnvironment().getValueEnvironment().getNumberConverter().convert(right)).thenReturn(Converter.Result.defined(BigDecimal.TEN)); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(left)).thenReturn("a"); when(request.getEnvironment().getValueEnvironment().getStringConverter().convert(right)).thenReturn("b"); int result = underTest.compare(request, left, right); assertEquals(-1, result); } }