package org.trimou.engine.locator;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Set;
import org.junit.Test;
import org.trimou.ExceptionAssert;
import org.trimou.MustacheExceptionAssert;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.config.EngineConfigurationKey;
import org.trimou.exception.MustacheProblem;
/**
*
* @author Martin Kouba
*/
public class FileSystemTemplateLocatorTest extends PathTemplateLocatorTest {
@Test
public void testLocator() throws IOException {
TemplateLocator locator = new FileSystemTemplateLocator(1,
"src/test/resources/locator/file", "foo");
// Just to init the locator
MustacheEngineBuilder.newBuilder().addTemplateLocator(locator).build();
Set<String> ids = locator.getAllIdentifiers();
assertEquals(5, ids.size());
assertTrue(ids.contains("index"));
assertTrue(ids.contains("home"));
assertTrue(ids.contains("foo"));
assertTrue(ids.contains("sub/bar"));
assertTrue(ids.contains("sub/subsub/qux"));
assertEquals("{{foo}}", read(locator.locate("index")));
assertEquals("bar", read(locator.locate("home")));
assertEquals("foo", read(locator.locate("foo")));
assertEquals("{{foo}}", read(locator.locate("sub/bar")));
assertEquals("{{bar}}", read(locator.locate("sub/subsub/qux")));
}
@Test
public void testLocatorNoSuffix() throws IOException {
TemplateLocator locator = FileSystemTemplateLocator.builder()
.setRootPath("src/test/resources/locator/file").build();
// Just to init the locator
MustacheEngineBuilder.newBuilder().addTemplateLocator(locator).build();
Set<String> ids = locator.getAllIdentifiers();
assertEquals(7, ids.size());
assertTrue(ids.contains("index.foo"));
assertTrue(ids.contains("home.foo"));
assertTrue(ids.contains("foo.foo"));
assertTrue(ids.contains("detail.html"));
assertTrue(ids.contains("encoding.html"));
assertTrue(ids.contains("sub/bar.foo"));
assertTrue(ids.contains("sub/subsub/qux.foo"));
assertEquals("{{foo}}", read(locator.locate("index.foo")));
assertEquals("bar", read(locator.locate("home.foo")));
assertEquals("foo", read(locator.locate("foo.foo")));
assertEquals("<html/>", read(locator.locate("detail.html")));
assertEquals("{{foo}}", read(locator.locate("sub/bar.foo")));
assertEquals("{{bar}}", read(locator.locate("sub/subsub/qux.foo")));
}
@Test
public void testInvalidRootDir() {
MustacheExceptionAssert
.expect(MustacheProblem.TEMPLATE_LOCATOR_INVALID_CONFIGURATION)
.check(() -> new FileSystemTemplateLocator(1, "_?dsss"));
ExceptionAssert.expect(IllegalArgumentException.class)
.check(() -> new FileSystemTemplateLocator(1, null));
}
@Test
public void testCustomVirtualPathSeparator() throws IOException {
TemplateLocator locator = FileSystemTemplateLocator.builder()
.setPriority(1).setRootPath("src/test/resources/locator/file")
.setSuffix("foo").build();
// Just to init the locator
MustacheEngineBuilder.newBuilder().addTemplateLocator(locator)
.setProperty(PathTemplateLocator.VIRTUAL_PATH_SEPARATOR_KEY,
"*")
.build();
Set<String> names = locator.getAllIdentifiers();
assertEquals(5, names.size());
assertTrue(names.contains("index"));
assertTrue(names.contains("home"));
assertTrue(names.contains("foo"));
assertTrue(names.contains("sub*bar"));
assertTrue(names.contains("sub*subsub*qux"));
assertEquals("{{foo}}", read(locator.locate("index")));
assertEquals("bar", read(locator.locate("home")));
assertEquals("{{foo}}", read(locator.locate("sub*bar")));
assertEquals("{{bar}}", read(locator.locate("sub*subsub*qux")));
}
@Test
public void testEncoding() throws IOException {
TemplateLocator locator = new FileSystemTemplateLocator(1,
"src/test/resources/locator/file", "html");
// Just to init the locator
MustacheEngineBuilder.newBuilder()
.setProperty(EngineConfigurationKey.DEFAULT_FILE_ENCODING,
"windows-1250")
.addTemplateLocator(locator).build();
assertEquals("Hurá ěščřřžžýá!", read(locator.locate("encoding")));
}
}