package org.jtwig.integration.resources;
import org.apache.commons.io.FileUtils;
import org.jtwig.JtwigModel;
import org.jtwig.JtwigTemplate;
import org.jtwig.environment.EnvironmentConfigurationBuilder;
import org.jtwig.resource.exceptions.ResourceNotFoundException;
import org.jtwig.resource.loader.FileResourceLoader;
import org.jtwig.resource.loader.TypedResourceLoader;
import org.jtwig.resource.reference.ResourceReference;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.io.File;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
public class MultipleFileLoaderTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void configWithMultipleFileLoadersAnyType() throws Exception {
File tempFile = File.createTempFile("jtwig-", ".twig");
String parent = tempFile.getParent();
String filename = tempFile.getName();
FileUtils.write(tempFile, "Hello");
String result = JtwigTemplate.inlineTemplate("{% include '" + filename + "' %}", EnvironmentConfigurationBuilder.configuration()
.resources().resourceLoaders().add(new TypedResourceLoader(ResourceReference.FILE, new FileResourceLoader(new File(parent)))).and().and()
.build()).render(JtwigModel.newModel());
assertThat(result, is("Hello"));
}
@Test
public void configWithMultipleFileLoadersFileType() throws Exception {
File tempFile = File.createTempFile("jtwig-", ".twig");
String parent = tempFile.getParent();
String filename = tempFile.getName();
FileUtils.write(tempFile, "Hello");
String result = JtwigTemplate.inlineTemplate("{% include 'file:" + filename + "' %}", EnvironmentConfigurationBuilder.configuration()
.resources().resourceLoaders().add(new TypedResourceLoader(ResourceReference.FILE, new FileResourceLoader(new File(parent)))).and().and()
.build()).render(JtwigModel.newModel());
assertThat(result, is("Hello"));
}
@Test
public void configWithoutLoaderAnyType() throws Exception {
File tempFile = File.createTempFile("jtwig-", ".twig");
String filename = tempFile.getName();
FileUtils.write(tempFile, "Hello");
expectedException.expectMessage(String.format("Resource '%s' (resolved to '%s') not found", filename, filename));
expectedException.expect(ResourceNotFoundException.class);
JtwigTemplate.inlineTemplate("{% include '" + filename + "' %}")
.render(JtwigModel.newModel());
}
@Test
public void configWithoutLoaderFileType() throws Exception {
File tempFile = File.createTempFile("jtwig-", ".twig");
expectedException.expectMessage("Resource 'file:blah' (resolved to 'file:blah') not found");
expectedException.expect(ResourceNotFoundException.class);
JtwigTemplate.inlineTemplate("{% include 'file:blah' %}", EnvironmentConfigurationBuilder.configuration()
.resources().resourceLoaders().add(new TypedResourceLoader(ResourceReference.FILE, new FileResourceLoader(tempFile.getParentFile()))).and().and()
.build())
.render(JtwigModel.newModel());
}
@Test
public void configWithLoaderFileTypeNotFound() throws Exception {
File tempFile = File.createTempFile("jtwig-", ".twig");
String filename = tempFile.getName();
FileUtils.write(tempFile, "Hello");
expectedException.expectMessage(String.format("Resource 'file:%s' (resolved to 'file:%s') not found", filename, filename));
expectedException.expect(ResourceNotFoundException.class);
JtwigTemplate.inlineTemplate("{% include 'file:" + filename + "' %}")
.render(JtwigModel.newModel());
}
}