1 package net.pterodactylus.sone.template;
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.is;
5 import static org.hamcrest.Matchers.notNullValue;
8 import java.io.IOException;
9 import java.io.StringWriter;
10 import java.io.Writer;
11 import java.util.Arrays;
12 import java.util.concurrent.atomic.AtomicReference;
14 import net.pterodactylus.util.template.Part;
15 import net.pterodactylus.util.template.TemplateContext;
16 import net.pterodactylus.util.template.TemplateException;
18 import com.google.common.base.Charsets;
19 import com.google.common.io.Files;
20 import org.junit.Before;
21 import org.junit.Test;
24 * Unit test for {@link FilesystemTemplate}.
26 public class FilesystemTemplateTest {
28 private final File tempFile;
29 private final FilesystemTemplate filesystemTemplate;
30 private final AtomicReference<StringWriter> stringWriter = new AtomicReference<>(new StringWriter());
31 private final TemplateContext templateContext = new TemplateContext();
33 public FilesystemTemplateTest() throws IOException {
34 tempFile = File.createTempFile("template-", ".dat");
35 writeTemplate("Text");
36 filesystemTemplate = new FilesystemTemplate(tempFile.getAbsolutePath());
39 private void writeTemplate(String text) throws IOException {
40 Files.write(text + ".<%foreach values value><% value><%/foreach>", tempFile, Charsets.UTF_8);
44 public void setupTemplateContext() {
45 templateContext.set("values", Arrays.asList("a", 1));
48 @Test(expected = FilesystemTemplate.TemplateFileNotFoundException.class)
49 public void loadingTemplateFromNonExistingFileThrowsException() throws IOException {
50 FilesystemTemplate filesystemTemplate = new FilesystemTemplate("/a/b/c.dat");
51 filesystemTemplate.getInitialContext();
55 public void templateCanBeLoadedFromTheFilesystem() {
56 filesystemTemplate.render(templateContext, stringWriter.get());
57 assertThat(getRenderedString(), is("Text.a1"));
61 public void templateCanBeReloaded() throws IOException, InterruptedException {
62 filesystemTemplate.render(templateContext, stringWriter.get());
63 assertThat(getRenderedString(), is("Text.a1"));
66 filesystemTemplate.render(templateContext, stringWriter.get());
67 assertThat(getRenderedString(), is("New.a1"));
71 public void templateIsNotReloadedIfNotChanged() {
72 filesystemTemplate.render(templateContext, stringWriter.get());
73 assertThat(getRenderedString(), is("Text.a1"));
74 filesystemTemplate.render(templateContext, stringWriter.get());
75 assertThat(getRenderedString(), is("Text.a1"));
78 private String getRenderedString() {
79 String renderedString = stringWriter.get().toString();
80 stringWriter.set(new StringWriter());
81 return renderedString;
85 public void initialContextIsCopiedToReloadedTemplates() throws IOException, InterruptedException {
86 filesystemTemplate.getInitialContext().set("values", "test");
89 assertThat(filesystemTemplate.getInitialContext().get("values"), is((Object) "test"));
93 public void partsAreCopiedToReloadedTemplates() throws InterruptedException, IOException {
94 filesystemTemplate.add(new Part() {
96 public void render(TemplateContext templateContext, Writer writer) throws TemplateException {
98 writer.write(".Test");
99 } catch (IOException e) {
100 throw new TemplateException(e);
105 writeTemplate("New");
106 filesystemTemplate.render(templateContext, stringWriter.get());
107 assertThat(getRenderedString(), is("New.a1.Test"));
111 public void columnOfReturnedTemplateIsReturnedAsZero() {
112 assertThat(filesystemTemplate.getColumn(), is(0));
116 public void lineOfReturnedTemplateIsReturnedAsZero() {
117 assertThat(filesystemTemplate.getLine(), is(0));
121 public void templateCanBeIteratedOver() {
122 assertThat(filesystemTemplate.iterator(), notNullValue());