X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FFilesystemTemplateTest.java;fp=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FFilesystemTemplateTest.java;h=cd989eb04593f3b669e48f6638c20ead22cb82be;hb=cc18e5878bc71081da5137eb777d91821c3f4cce;hp=0000000000000000000000000000000000000000;hpb=4976669a17eb72bb7451edcf367c0956a40a8c2f;p=Sone.git
diff --git a/src/test/java/net/pterodactylus/sone/template/FilesystemTemplateTest.java b/src/test/java/net/pterodactylus/sone/template/FilesystemTemplateTest.java
new file mode 100644
index 0000000..cd989eb
--- /dev/null
+++ b/src/test/java/net/pterodactylus/sone/template/FilesystemTemplateTest.java
@@ -0,0 +1,111 @@
+package net.pterodactylus.sone.template;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Arrays;
+import java.util.concurrent.atomic.AtomicReference;
+
+import net.pterodactylus.util.template.Part;
+import net.pterodactylus.util.template.TemplateContext;
+import net.pterodactylus.util.template.TemplateException;
+
+import com.google.common.base.Charsets;
+import com.google.common.io.Files;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit test for {@link FilesystemTemplate}.
+ *
+ * @author David âBombeâ Roden
+ */
+public class FilesystemTemplateTest {
+
+ private final File tempFile;
+ private final FilesystemTemplate filesystemTemplate;
+ private final AtomicReference stringWriter = new AtomicReference(new StringWriter());
+ private final TemplateContext templateContext = new TemplateContext();
+
+ public FilesystemTemplateTest() throws IOException {
+ tempFile = File.createTempFile("template-", ".dat");
+ writeTemplate("Text");
+ filesystemTemplate = new FilesystemTemplate(tempFile.getAbsolutePath());
+ }
+
+ private void writeTemplate(String text) throws IOException {
+ Files.write(text + ".<%foreach values value><% value><%/foreach>", tempFile, Charsets.UTF_8);
+ }
+
+ @Before
+ public void setupTemplateContext() {
+ templateContext.set("values", Arrays.asList("a", 1));
+ }
+
+ @Test(expected = FilesystemTemplate.TemplateFileNotFoundException.class)
+ public void loadingTemplateFromNonExistingFileThrowsException() throws IOException {
+ FilesystemTemplate filesystemTemplate = new FilesystemTemplate("/a/b/c.dat");
+ filesystemTemplate.getInitialContext();
+ }
+
+ @Test
+ public void templateCanBeLoadedFromTheFilesystem() {
+ filesystemTemplate.render(templateContext, stringWriter.get());
+ assertThat(getRenderedString(), is("Text.a1"));
+ }
+
+ @Test
+ public void templateCanBeReloaded() throws IOException, InterruptedException {
+ filesystemTemplate.render(templateContext, stringWriter.get());
+ assertThat(getRenderedString(), is("Text.a1"));
+ Thread.sleep(1000);
+ writeTemplate("New");
+ filesystemTemplate.render(templateContext, stringWriter.get());
+ assertThat(getRenderedString(), is("New.a1"));
+ }
+
+ @Test
+ public void templateIsNotReloadedIfNotChanged() {
+ filesystemTemplate.render(templateContext, stringWriter.get());
+ assertThat(getRenderedString(), is("Text.a1"));
+ filesystemTemplate.render(templateContext, stringWriter.get());
+ assertThat(getRenderedString(), is("Text.a1"));
+ }
+
+ private String getRenderedString() {
+ String renderedString = stringWriter.get().toString();
+ stringWriter.set(new StringWriter());
+ return renderedString;
+ }
+
+ @Test
+ public void initialContextIsCopiedToReloadedTemplates() throws IOException, InterruptedException {
+ filesystemTemplate.getInitialContext().set("values", "test");
+ Thread.sleep(1000);
+ writeTemplate("New");
+ assertThat(filesystemTemplate.getInitialContext().get("values"), is((Object) "test"));
+ }
+
+ @Test
+ public void partsAreCopiedToReloadedTemplates() throws InterruptedException, IOException {
+ filesystemTemplate.add(new Part() {
+ @Override
+ public void render(TemplateContext templateContext, Writer writer) throws TemplateException {
+ try {
+ writer.write(".Test");
+ } catch (IOException e) {
+ throw new TemplateException(e);
+ }
+ }
+ });
+ Thread.sleep(1000);
+ writeTemplate("New");
+ filesystemTemplate.render(templateContext, stringWriter.get());
+ assertThat(getRenderedString(), is("New.a1.Test"));
+ }
+
+}