1 package net.pterodactylus.sone.template
3 import net.pterodactylus.util.template.*
4 import org.hamcrest.MatcherAssert.*
5 import org.hamcrest.Matchers.*
7 import org.junit.rules.*
9 import java.lang.Thread.*
10 import kotlin.test.Test
13 * Unit test for [FilesystemTemplate].
15 class FilesystemTemplateTest() {
19 val expectedException: ExpectedException = ExpectedException.none()
21 private val tempFile = File.createTempFile("template-", ".dat")
22 private val filesystemTemplate: FilesystemTemplate
23 private val templateContext = TemplateContext()
25 private val renderedString: String
27 StringWriter().use { stringWriter ->
28 filesystemTemplate.render(templateContext, stringWriter)
34 filesystemTemplate = FilesystemTemplate(tempFile.absolutePath)
37 private fun writeTemplate(text: String) {
38 tempFile.writer().use {
39 it.write("$text.<%foreach values value><% value><%/foreach>")
44 fun setupTemplateContext() {
45 templateContext.set("values", listOf("a", 1))
49 fun `loading template from non existing file throws exception`() {
50 val filesystemTemplate = FilesystemTemplate("/a/b/c.dat")
51 expectedException.expect(FilesystemTemplate.TemplateFileNotFoundException::class.java)
52 filesystemTemplate.initialContext
56 fun `template can be loaded from the filesystem`() {
57 assertThat(renderedString, equalTo("Text.a1"))
61 fun `template can be reloaded`() {
62 assertThat(renderedString, equalTo("Text.a1"))
65 assertThat(renderedString, equalTo("New.a1"))
69 fun `template is not reloaded if not changed`() {
70 assertThat(renderedString, equalTo("Text.a1"))
71 assertThat(renderedString, equalTo("Text.a1"))
75 fun `initial context is copied to reloaded templates`() {
76 filesystemTemplate.initialContext.set("values", "test")
79 assertThat(filesystemTemplate.initialContext.get("values"), equalTo("test" as Any))
83 fun `parts are copied to currently loaded templates`() {
86 filesystemTemplate.add { _, writer ->
89 assertThat(renderedString, equalTo("New.a1.Test"))
93 fun `parts are copied to reloaded templates`() {
94 filesystemTemplate.add { _, writer ->
99 assertThat(renderedString, equalTo("New.a1.Test"))
103 fun `column of returned template is returned as zero`() {
104 assertThat(filesystemTemplate.column, equalTo(0))
108 fun `line of returned template is returned as zero`() {
109 assertThat(filesystemTemplate.line, equalTo(0))
113 fun `template can be iterated over`() {
114 assertThat<Iterator<Part>>(filesystemTemplate.iterator(), notNullValue())