package org.jtwig;
import org.apache.commons.io.FileUtils;
import org.jtwig.environment.Environment;
import org.jtwig.escape.HtmlEscapeEngine;
import org.jtwig.escape.NoneEscapeEngine;
import org.jtwig.model.tree.Node;
import org.jtwig.render.RenderRequest;
import org.jtwig.renderable.impl.StringRenderable;
import org.jtwig.resource.reference.ResourceReference;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.mockito.ArgumentCaptor;
import java.io.File;
import java.nio.file.Files;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.core.Is.is;
import static org.jtwig.environment.EnvironmentConfigurationBuilder.configuration;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
public class JtwigTemplateTest {
private final Environment environment = mock(Environment.class, RETURNS_DEEP_STUBS);
private final ResourceReference resource = mock(ResourceReference.class);
private final JtwigTemplate underTest = new JtwigTemplate(environment, resource);
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void render() throws Exception {
String exampleOut = "exampleOut";
ArgumentCaptor<RenderRequest> renderRequestArgumentCaptor = ArgumentCaptor.forClass(RenderRequest.class);
JtwigModel model = mock(JtwigModel.class);
Node node = mock(Node.class);
when(environment.getParser().parse(environment, resource)).thenReturn(node);
when(environment.getEscapeEnvironment().getInitialEscapeEngine()).thenReturn(HtmlEscapeEngine.instance());
when(environment.getRenderEnvironment().getRenderNodeService().render(renderRequestArgumentCaptor.capture(), eq(node))).thenReturn(new StringRenderable(exampleOut, NoneEscapeEngine.instance()));
String result = underTest.render(model);
assertThat(result, is(exampleOut));
RenderRequest renderRequest = renderRequestArgumentCaptor.getValue();
assertThat(renderRequest.getEnvironment(), is(environment));
}
@Test
public void classpathLocation() throws Exception {
expectedException.expectMessage(containsString("Resource '/test' not found"));
JtwigTemplate.classpathTemplate("/test", configuration().build()).render(JtwigModel.newModel());
}
@Test
public void classpathLocation2() throws Exception {
expectedException.expectMessage(containsString("Resource 'classpath:/test' not found"));
JtwigTemplate.classpathTemplate("classpath:/test", configuration().build()).render(JtwigModel.newModel());
}
@Test
public void filenameTemplateTest() throws Exception {
assertNotNull(JtwigTemplate.fileTemplate("path"));
}
@Test
public void filenameTemplateTest1() throws Exception {
assertNotNull(JtwigTemplate.fileTemplate("path", configuration().build()));
}
@Test
public void filenameTemplateTest2() throws Exception {
assertNotNull(JtwigTemplate.fileTemplate(new File("")));
}
@Test
public void filenameTemplateTest3() throws Exception {
assertNotNull(JtwigTemplate.fileTemplate(new File(""), configuration().build()));
}
@Test
public void fileTemplateRead() throws Exception {
File tempFile = Files.createTempFile("jtwig", "template").toFile();
FileUtils.write(tempFile, "Hi {{ name }}!");
String result = JtwigTemplate.fileTemplate(tempFile).render(JtwigModel.newModel().with("name", "World"));
assertThat(result, is("Hi World!"));
}
@Test
public void fileNotExists() throws Exception {
expectedException.expectMessage(containsString("Resource 'file:/nonSensePath' (resolved to 'file:/nonSensePath') not found"));
JtwigTemplate.inlineTemplate("{% include 'file:/nonSensePath' %}").render(JtwigModel.newModel().with("name", "World"));
}
}