package org.jtwig.render.expression;
import org.jtwig.model.expression.Expression;
import org.jtwig.render.expression.calculator.ExpressionCalculator;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.HashMap;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.mock;
public class ExpressionCalculatorSelectorTest {
private final HashMap<Class<? extends Expression>, ExpressionCalculator> map = new HashMap<>();
private ExpressionCalculatorSelector underTest = new ExpressionCalculatorSelector(map);
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Before
public void setUp() throws Exception {
map.clear();
}
@Test
public void calculatorForWhenNotPresent() throws Exception {
Expression expression = mock(Expression.class);
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage(containsString(String.format("No calculator for expression of type %s", expression.getClass())));
underTest.calculatorFor(expression);
}
@Test
public void calculatorForWhenPresent() throws Exception {
Expression expression = mock(Expression.class);
ExpressionCalculator expressionCalculator = mock(ExpressionCalculator.class);
map.put(expression.getClass(), expressionCalculator);
ExpressionCalculator result = underTest.calculatorFor(expression);
assertSame(expressionCalculator, result);
}
}