package org.jtwig.render.node.renderer; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import org.hamcrest.Matcher; import org.jtwig.model.expression.Expression; import org.jtwig.model.expression.VariableExpression; import org.jtwig.model.tree.ForLoopNode; import org.jtwig.model.tree.Node; import org.jtwig.render.RenderRequest; import org.jtwig.renderable.Renderable; import org.jtwig.renderable.impl.CompositeRenderable; import org.jtwig.value.WrappedCollection; import org.jtwig.value.context.ValueContext; import org.jtwig.value.convert.Converter; import org.junit.Test; import static java.util.Arrays.asList; import static org.hamcrest.core.Is.is; import static org.jtwig.support.MatcherUtils.theSame; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.*; public class ForLoopNodeRenderTest { private ForLoopNodeRender underTest = new ForLoopNodeRender(); @Test public void render() throws Exception { RenderRequest request = mock(RenderRequest.class, RETURNS_DEEP_STUBS); ForLoopNode loopNode = mock(ForLoopNode.class, RETURNS_DEEP_STUBS); Expression expression = mock(Expression.class); Object collectionValue = new Object(); WrappedCollection wrappedCollection = mock(WrappedCollection.class); Object object1 = new Object(); Renderable renderable = mock(Renderable.class); Node content = mock(Node.class); VariableExpression variableExpression = mock(VariableExpression.class); when(loopNode.getExpression()).thenReturn(expression); when(loopNode.getContent()).thenReturn(content); when(loopNode.getVariableExpression().getIdentifier()).thenReturn("item"); when(loopNode.getKeyVariableExpression()).thenReturn(Optional.of(variableExpression)); when(variableExpression.getIdentifier()).thenReturn("key"); when(request.getEnvironment().getRenderEnvironment().getCalculateExpressionService().calculate(request, expression)).thenReturn(collectionValue); when(request.getEnvironment().getValueEnvironment().getCollectionConverter().convert(collectionValue)).thenReturn(Converter.Result.defined(wrappedCollection)); when(wrappedCollection.iterator()).thenReturn(ImmutableMap.<String, Object>builder() .put("key1", object1) .build().entrySet().iterator()); when(request.getEnvironment().getRenderEnvironment().getRenderNodeService().render(request, content)).thenReturn(renderable); when(request.getRenderContext().getCurrent(ValueContext.class)).thenReturn(mock(ValueContext.class)); Renderable result = underTest.render(request, loopNode); assertThat(result, is((Matcher) theSame(new CompositeRenderable(asList(renderable))))); } }