package org.jtwig.functions;
import com.google.common.base.Function;
import org.jtwig.model.expression.Expression;
import org.junit.Test;
import java.util.Collections;
import java.util.List;
import static java.util.Arrays.asList;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class FunctionArgumentsTest {
private final Function<Expression, Object> expressionResolver = mock(Function.class);
@Test
public void getExpression() throws Exception {
Expression expression = mock(Expression.class);
FunctionArguments underTest = new FunctionArguments(expressionResolver, Collections.singletonList(expression));
List<Expression> result = underTest.getExpressions();
assertThat(result, contains(expression));
}
@Test
public void getExpressions() throws Exception {
Expression expression = mock(Expression.class);
FunctionArguments underTest = new FunctionArguments(expressionResolver, Collections.singletonList(expression));
Expression result = underTest.getExpression(0);
assertSame(expression, result);
}
@Test
public void getRemainingArguments() throws Exception {
Expression expression1 = mock(Expression.class);
Expression expression2 = mock(Expression.class);
Expression expression3 = mock(Expression.class);
Object value1 = new Object();
Object value2 = new Object();
Object value3 = new Object();
FunctionArguments underTest = new FunctionArguments(expressionResolver, asList(expression1, expression2, expression3));
when(expressionResolver.apply(expression1)).thenReturn(value1);
when(expressionResolver.apply(expression2)).thenReturn(value2);
when(expressionResolver.apply(expression3)).thenReturn(value3);
Object[] result = underTest.getRemainingArguments(1);
assertArrayEquals(new Object[]{
value2, value3
}, result);
}
@Test
public void getRemainingArgumentsEmpty() throws Exception {
FunctionArguments underTest = new FunctionArguments(expressionResolver, Collections.<Expression>emptyList());
Object[] result = underTest.getRemainingArguments(1);
assertArrayEquals(new Object[]{}, result);
}
}