package org.trimou.tests.servlet.locator;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.trimou.tests.IntegrationTestUtils.createTestArchiveBase;
import static org.trimou.tests.IntegrationTestUtils.resolve;
import java.io.File;
import java.util.Set;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.asset.FileAsset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.trimou.Mustache;
import org.trimou.engine.MustacheEngine;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.config.EngineConfigurationKey;
import org.trimou.engine.locator.TemplateLocator;
import org.trimou.servlet.locator.ServletContextTemplateLocator;
/**
*
* @author Martin Kouba
*/
@RunWith(Arquillian.class)
public class ServletContextTemplateLocatorTest {
@Deployment
public static WebArchive createTestArchive() {
return createTestArchiveBase()
// WEB-INF/templates
.addAsWebInfResource(new StringAsset("<html/>"),
"templates/foo.html")
.addAsWebInfResource(new StringAsset("<html/>"),
"templates/qux.html")
.addAsWebInfResource(new StringAsset("<xml/>"),
"templates/alpha.xml")
.addAsWebInfResource(new StringAsset("<html/>"),
"templates/cool/charlie.html")
// templates
.addAsWebResource(new StringAsset("<html/>"),
"templates/bart.html")
.addAsWebResource(new StringAsset("<html/>"),
"templates/html.html")
.addAsWebResource(
new FileAsset(new File(
"src/test/resources/locator/file/encoding.html")),
"templates/encoding.html")
.addAsLibraries(resolve("org.trimou:trimou-extension-servlet"));
}
@Test
public void testAllIdentifiers() {
TemplateLocator locator1 = ServletContextTemplateLocator.builder()
.setPriority(10).setRootPath("/WEB-INF/templates")
.setSuffix("html").build();
TemplateLocator locator2 = ServletContextTemplateLocator.builder()
.setPriority(9).setRootPath("/templates").setSuffix("html")
.build();
TemplateLocator locator3 = ServletContextTemplateLocator.builder()
.setPriority(8).setRootPath("/WEB-INF/templates").build();
// Just to init the locators
MustacheEngineBuilder.newBuilder().addTemplateLocator(locator1)
.addTemplateLocator(locator2).addTemplateLocator(locator3)
.build();
Set<String> locator1Ids = locator1.getAllIdentifiers();
assertEquals(3, locator1Ids.size());
assertTrue(locator1Ids.contains("foo"));
assertTrue(locator1Ids.contains("qux"));
assertTrue(locator1Ids.contains("cool/charlie"));
Set<String> locator2Ids = locator2.getAllIdentifiers();
assertEquals(3, locator2Ids.size());
assertTrue(locator2Ids.contains("bart"));
assertTrue(locator2Ids.contains("encoding"));
assertTrue(locator2Ids.contains("html"));
Set<String> locator3Ids = locator3.getAllIdentifiers();
assertEquals(4, locator3Ids.size());
assertTrue(locator3Ids.contains("foo.html"));
assertTrue(locator3Ids.contains("qux.html"));
assertTrue(locator3Ids.contains("alpha.xml"));
assertTrue(locator3Ids.contains("cool/charlie.html"));
}
@Test
public void testLocate() {
TemplateLocator locator1 = ServletContextTemplateLocator.builder()
.setPriority(10).setRootPath("/WEB-INF/templates")
.setSuffix("html").build();
TemplateLocator locator2 = ServletContextTemplateLocator.builder()
.setPriority(9).setRootPath("/templates").setSuffix("html")
.build();
TemplateLocator locator3 = ServletContextTemplateLocator.builder()
.setPriority(8).setRootPath("/WEB-INF/templates").build();
TemplateLocator locator4 = ServletContextTemplateLocator.builder()
.setPriority(7).setRootPath("/").build();
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.addTemplateLocator(locator1).addTemplateLocator(locator2)
.addTemplateLocator(locator3).addTemplateLocator(locator4).build();
Mustache foo = engine.getMustache("foo");
assertNotNull(foo);
assertEquals("<html/>", foo.render(null));
Mustache bar = engine.getMustache("bart");
assertNotNull(bar);
assertEquals("<html/>", bar.render(null));
Mustache alpha = engine.getMustache("alpha.xml");
assertNotNull(alpha);
assertEquals("<xml/>", alpha.render(null));
Mustache charlie = engine.getMustache("cool/charlie");
assertNotNull(charlie);
assertEquals("<html/>", charlie.render(null));
charlie = engine.getMustache("templates/bart.html");
assertNotNull(charlie);
assertEquals("<html/>", charlie.render(null));
}
@Test
public void testEncoding() {
TemplateLocator locator = new ServletContextTemplateLocator(10,
"/templates", "html");
MustacheEngine engine = MustacheEngineBuilder.newBuilder()
.addTemplateLocator(locator)
.setProperty(EngineConfigurationKey.DEFAULT_FILE_ENCODING,
"windows-1250")
.build();
Mustache encoding = engine.getMustache("encoding");
assertNotNull(encoding);
assertEquals("Hurá ěščřřžžýá!", encoding.render(null));
}
}