Default render() method on embeddables, and better testing.
This commit is contained in:
parent
fd09b720bb
commit
9d3f3f180b
@ -1,14 +1,16 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
import groovy.transform.NullCheck
|
||||
import groovy.transform.TupleConstructor
|
||||
|
||||
@TupleConstructor(includeFields = true, defaults = false)
|
||||
@NullCheck
|
||||
class EmbeddablePart {
|
||||
|
||||
private final Part part
|
||||
private final Map globals
|
||||
|
||||
String render(Map binding) {
|
||||
String render(Map binding = [:]) {
|
||||
part.type.renderer.render(this.part.text, binding, this.globals)
|
||||
}
|
||||
|
||||
|
@ -9,9 +9,10 @@ class GspPartRenderer implements PartRenderer {
|
||||
|
||||
@Override
|
||||
String render(String partText, Map binding, Map globals) {
|
||||
def bindingCopy = new LinkedHashMap(binding)
|
||||
bindingCopy['globals'] = globals
|
||||
engine.createTemplate(partText).make(bindingCopy)
|
||||
engine.createTemplate(partText).make([
|
||||
binding: binding,
|
||||
globals: globals
|
||||
])
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -13,6 +13,11 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
||||
|
||||
@Override
|
||||
String render(String text, Collection<Text> texts, Collection<Part> parts, Map globals) {
|
||||
Objects.requireNonNull(text)
|
||||
Objects.requireNonNull(texts)
|
||||
Objects.requireNonNull(parts)
|
||||
Objects.requireNonNull(globals)
|
||||
|
||||
engine.createTemplate(text).make([
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(parts, globals),
|
||||
|
@ -1,9 +1,11 @@
|
||||
package com.jessebrault.ssg.text
|
||||
|
||||
import groovy.transform.Memoized
|
||||
import groovy.transform.NullCheck
|
||||
import groovy.transform.TupleConstructor
|
||||
|
||||
@TupleConstructor(includeFields = true, defaults = false)
|
||||
@NullCheck
|
||||
class EmbeddableText {
|
||||
|
||||
private final Text text
|
||||
|
@ -7,12 +7,12 @@ import com.jessebrault.ssg.specialpage.GspSpecialPageRenderer
|
||||
import com.jessebrault.ssg.specialpage.SpecialPageFileSpecialPagesProvider
|
||||
import com.jessebrault.ssg.specialpage.SpecialPageType
|
||||
import com.jessebrault.ssg.template.GspTemplateRenderer
|
||||
import com.jessebrault.ssg.template.TemplateType
|
||||
import com.jessebrault.ssg.template.TemplateFileTemplatesProvider
|
||||
import com.jessebrault.ssg.template.TemplateType
|
||||
import com.jessebrault.ssg.text.MarkdownFrontMatterGetter
|
||||
import com.jessebrault.ssg.text.MarkdownTextRenderer
|
||||
import com.jessebrault.ssg.text.TextType
|
||||
import com.jessebrault.ssg.text.TextFileTextsProvider
|
||||
import com.jessebrault.ssg.text.TextType
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
|
@ -0,0 +1,29 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals
|
||||
|
||||
class GspPartRendererTests {
|
||||
|
||||
private final PartRenderer renderer = new GspPartRenderer()
|
||||
|
||||
@Test
|
||||
void rendersWithNoBindingOrGlobals() {
|
||||
def r = this.renderer.render('Hello, World!', [:], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersWithBinding() {
|
||||
def r = this.renderer.render("<%= binding['greeting'] %>", [greeting: 'Hello, World!'], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersWithGlobals() {
|
||||
def r = this.renderer.render("<%= globals['greeting'] %>", [:], [greeting: 'Hello, World!'])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package com.jessebrault.ssg.specialpage
|
||||
|
||||
import com.jessebrault.ssg.part.GspPartRenderer
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.part.PartType
|
||||
import com.jessebrault.ssg.text.MarkdownFrontMatterGetter
|
||||
import com.jessebrault.ssg.text.MarkdownTextRenderer
|
||||
import com.jessebrault.ssg.text.Text
|
||||
import com.jessebrault.ssg.text.TextType
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals
|
||||
|
||||
class GspSpecialPageRendererTests {
|
||||
|
||||
private final SpecialPageRenderer renderer = new GspSpecialPageRenderer()
|
||||
|
||||
@Test
|
||||
void rendersGlobal() {
|
||||
def globals = [greeting: 'Hello, World!']
|
||||
def r = this.renderer.render("<%= globals['greeting'] %>", [], [], globals)
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersPartWithNoBinding() {
|
||||
def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, World!')
|
||||
def r = this.renderer.render("<%= parts['test'].render() %>", [], [part], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersPartWithBinding() {
|
||||
def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), "<%= binding['greeting'] %>")
|
||||
def r = this.renderer.render("<%= parts['test'].render([greeting: 'Hello, World!'])", [], [part], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersText() {
|
||||
def text = new Text('**Hello, World!**', 'test', new TextType(['.gsp'], new MarkdownTextRenderer(), new MarkdownFrontMatterGetter()))
|
||||
def r = this.renderer.render("<%= texts.find { it.path == 'test' }.render() %>", [text], [], [:])
|
||||
assertEquals('<p><strong>Hello, World!</strong></p>\n', r)
|
||||
}
|
||||
|
||||
}
|
@ -13,30 +13,48 @@ class GspTemplateRendererTests {
|
||||
private final TemplateRenderer renderer = new GspTemplateRenderer()
|
||||
|
||||
@Test
|
||||
void rendersPart() {
|
||||
void rendersPartWithNoBinding() {
|
||||
def template = new Template(
|
||||
"<%= parts['greeting'].render([person: 'World']) %>",
|
||||
"<%= parts['test'].render() %>",
|
||||
null,
|
||||
null
|
||||
)
|
||||
def part = new Part(
|
||||
'greeting',
|
||||
new PartType(['.gsp'], new GspPartRenderer()),
|
||||
'Hello, $person!'
|
||||
)
|
||||
def part = new Part('test', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, World!')
|
||||
def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void frontMatter() {
|
||||
void rendersPartWithBinding() {
|
||||
def template = new Template(
|
||||
"<%= frontMatter['title'] %>",
|
||||
"<%= parts['greeting'].render([person: 'World']) %>",
|
||||
null,
|
||||
null
|
||||
)
|
||||
def part = new Part('greeting', new PartType(['.gsp'], new GspPartRenderer()), 'Hello, $binding.person!')
|
||||
def r = this.renderer.render(template, new FrontMatter([:]), '', [part], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersFrontMatter() {
|
||||
def template = new Template("<%= frontMatter['title'] %>", null, null)
|
||||
def r = this.renderer.render(template, new FrontMatter([title: ['Hello!']]), '', [], [:])
|
||||
assertEquals('Hello!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersGlobal() {
|
||||
def template = new Template("<%= globals['test'] %>", null, null)
|
||||
def r = this.renderer.render(template, new FrontMatter([:]), '', [], [test: 'Hello, World!'])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersText() {
|
||||
def template = new Template('<%= text %>', null, null)
|
||||
def r = this.renderer.render(template, new FrontMatter([:]), 'Hello, World!', [], [:])
|
||||
assertEquals('Hello, World!', r)
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user