SiteSpec proliferated.
This commit is contained in:
parent
0762dc6b8b
commit
111bdea286
@ -44,6 +44,10 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
|
||||
partsProviders: [defaultPartsProvider],
|
||||
specialPagesProviders: [defaultSpecialPagesProvider]
|
||||
)
|
||||
def defaultSiteSpec = new SiteSpec(
|
||||
name: '',
|
||||
baseUrl: ''
|
||||
)
|
||||
def defaultGlobals = [:]
|
||||
|
||||
// Run build script, if applicable
|
||||
@ -56,7 +60,13 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
|
||||
|
||||
if (this.builds.empty) {
|
||||
// Add default build
|
||||
builds << new Build('default', defaultConfig, defaultGlobals, new File('build'))
|
||||
builds << new Build(
|
||||
'default',
|
||||
defaultConfig,
|
||||
defaultSiteSpec,
|
||||
defaultGlobals,
|
||||
new File('build')
|
||||
)
|
||||
}
|
||||
|
||||
// Get ssg object
|
||||
|
@ -11,12 +11,14 @@ class Build {
|
||||
|
||||
String name
|
||||
Config config
|
||||
SiteSpec siteSpec
|
||||
Map globals
|
||||
File outDir
|
||||
|
||||
@Override
|
||||
String toString() {
|
||||
"Build(name: ${ this.name }, config: ${ this.config }, globals: ${ this.globals }, outDir: ${ this.outDir })"
|
||||
"Build(name: ${ this.name }, config: ${ this.config }, siteSpec: ${ this.siteSpec }, " +
|
||||
"globals: ${ this.globals }, outDir: ${ this.outDir })"
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
logger.info('processing build with name: {}', build.name)
|
||||
|
||||
def config = build.config
|
||||
def siteSpec = build.siteSpec
|
||||
|
||||
// Get all texts, templates, parts, and specialPages
|
||||
def texts = config.textProviders.collectMany { it.provide() }
|
||||
@ -80,6 +81,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
frontMatter,
|
||||
it,
|
||||
parts,
|
||||
siteSpec,
|
||||
globals,
|
||||
targetPath
|
||||
)
|
||||
@ -105,6 +107,7 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
|
||||
it,
|
||||
texts,
|
||||
parts,
|
||||
siteSpec,
|
||||
globals,
|
||||
targetPath
|
||||
)
|
||||
|
27
lib/src/main/groovy/com/jessebrault/ssg/SiteSpec.groovy
Normal file
27
lib/src/main/groovy/com/jessebrault/ssg/SiteSpec.groovy
Normal file
@ -0,0 +1,27 @@
|
||||
package com.jessebrault.ssg
|
||||
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.MapConstructor
|
||||
import groovy.transform.NullCheck
|
||||
import groovy.transform.TupleConstructor
|
||||
|
||||
@TupleConstructor(force = true, defaults = false)
|
||||
@MapConstructor
|
||||
@NullCheck
|
||||
@EqualsAndHashCode
|
||||
final class SiteSpec {
|
||||
|
||||
String name
|
||||
String baseUrl
|
||||
|
||||
SiteSpec(SiteSpec source) {
|
||||
this.name = source.name
|
||||
this.baseUrl = source.baseUrl
|
||||
}
|
||||
|
||||
@Override
|
||||
String toString() {
|
||||
"SiteSpec(${ this.name }, ${ this.baseUrl })"
|
||||
}
|
||||
|
||||
}
|
@ -1,26 +1,37 @@
|
||||
package com.jessebrault.ssg.buildscript
|
||||
|
||||
import com.jessebrault.ssg.Config
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
|
||||
class BuildClosureDelegate {
|
||||
|
||||
String name
|
||||
Config config
|
||||
SiteSpec siteSpec
|
||||
Map globals
|
||||
File outDir
|
||||
|
||||
void config(
|
||||
@DelegatesTo(value = ConfigClosureDelegate, strategy = Closure.DELEGATE_FIRST)
|
||||
Closure configClosure
|
||||
Closure configClosure
|
||||
) {
|
||||
configClosure.setDelegate(new ConfigClosureDelegate(this.config))
|
||||
configClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
|
||||
configClosure.run()
|
||||
}
|
||||
|
||||
void siteSpec(
|
||||
@DelegatesTo(value = SiteSpecClosureDelegate, strategy = Closure.DELEGATE_FIRST)
|
||||
Closure siteSpecClosure
|
||||
) {
|
||||
siteSpecClosure.setDelegate(new SiteSpecClosureDelegate(this.siteSpec))
|
||||
siteSpecClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
|
||||
siteSpecClosure.run()
|
||||
}
|
||||
|
||||
void globals(
|
||||
@DelegatesTo(value = GlobalsClosureDelegate, strategy = Closure.DELEGATE_FIRST)
|
||||
Closure globalsClosure
|
||||
Closure globalsClosure
|
||||
) {
|
||||
def globalsConfigurator = new GlobalsClosureDelegate(this.globals)
|
||||
globalsClosure.setDelegate(globalsConfigurator)
|
||||
|
@ -2,10 +2,12 @@ package com.jessebrault.ssg.buildscript
|
||||
|
||||
import com.jessebrault.ssg.Build
|
||||
import com.jessebrault.ssg.Config
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
|
||||
abstract class BuildScriptBase extends Script {
|
||||
|
||||
Config defaultConfig
|
||||
SiteSpec defaultSiteSpec
|
||||
Map defaultGlobals
|
||||
|
||||
Collection<Build> builds = []
|
||||
@ -20,13 +22,20 @@ abstract class BuildScriptBase extends Script {
|
||||
// Default values for Build properties
|
||||
name = 'build' + this.currentBuildNumber
|
||||
config = new Config(defaultConfig)
|
||||
siteSpec = new SiteSpec(defaultSiteSpec)
|
||||
globals = new LinkedHashMap(defaultGlobals)
|
||||
outDir = new File(name)
|
||||
}
|
||||
buildClosure.setDelegate(buildClosureDelegate)
|
||||
buildClosure.setResolveStrategy(Closure.DELEGATE_FIRST)
|
||||
buildClosure.run()
|
||||
this.builds << new Build(buildClosureDelegate.name, buildClosureDelegate.config, buildClosureDelegate.globals, buildClosureDelegate.outDir)
|
||||
this.builds << new Build(
|
||||
buildClosureDelegate.name,
|
||||
buildClosureDelegate.config,
|
||||
buildClosureDelegate.siteSpec,
|
||||
buildClosureDelegate.globals,
|
||||
buildClosureDelegate.outDir
|
||||
)
|
||||
this.currentBuildNumber++
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,14 @@
|
||||
package com.jessebrault.ssg.buildscript
|
||||
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
|
||||
class SiteSpecClosureDelegate {
|
||||
|
||||
@Delegate
|
||||
private final SiteSpec siteSpec
|
||||
|
||||
SiteSpecClosureDelegate(SiteSpec siteSpec) {
|
||||
this.siteSpec = siteSpec
|
||||
}
|
||||
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.text.EmbeddableText
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
@ -12,6 +13,7 @@ import org.jetbrains.annotations.Nullable
|
||||
class EmbeddablePart {
|
||||
|
||||
private final Part part
|
||||
private final SiteSpec siteSpec
|
||||
private final Map globals
|
||||
private final Closure onDiagnostics
|
||||
|
||||
@ -26,6 +28,7 @@ class EmbeddablePart {
|
||||
def result = part.type.renderer.render(
|
||||
this.part,
|
||||
binding,
|
||||
this.siteSpec,
|
||||
this.globals,
|
||||
this.text,
|
||||
this.allParts,
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.text.EmbeddableText
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import org.jetbrains.annotations.Nullable
|
||||
@ -12,6 +13,7 @@ class EmbeddablePartsMap {
|
||||
|
||||
EmbeddablePartsMap(
|
||||
Collection<Part> parts,
|
||||
SiteSpec siteSpec,
|
||||
Map globals,
|
||||
Closure onDiagnostics,
|
||||
@Nullable EmbeddableText text = null,
|
||||
@ -19,10 +21,13 @@ class EmbeddablePartsMap {
|
||||
String targetPath
|
||||
) {
|
||||
Objects.requireNonNull(parts)
|
||||
Objects.requireNonNull(siteSpec)
|
||||
Objects.requireNonNull(globals)
|
||||
Objects.requireNonNull(onDiagnostics)
|
||||
Objects.requireNonNull(path)
|
||||
Objects.requireNonNull(targetPath)
|
||||
parts.each {
|
||||
this.put(it.path, new EmbeddablePart(it, globals, onDiagnostics, text, parts, path, targetPath))
|
||||
this.put(it.path, new EmbeddablePart(it, siteSpec, globals, onDiagnostics, text, parts, path, targetPath))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,13 +1,13 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
import com.jessebrault.ssg.Diagnostic
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.tagbuilder.DynamicTagBuilder
|
||||
import com.jessebrault.ssg.text.EmbeddableText
|
||||
import com.jessebrault.ssg.url.PathBasedUrlBuilder
|
||||
import groovy.text.GStringTemplateEngine
|
||||
import groovy.text.TemplateEngine
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
import org.jetbrains.annotations.Nullable
|
||||
|
||||
@EqualsAndHashCode
|
||||
@ -19,6 +19,7 @@ class GspPartRenderer implements PartRenderer {
|
||||
Tuple2<Collection<Diagnostic>, String> render(
|
||||
Part part,
|
||||
Map binding,
|
||||
SiteSpec siteSpec,
|
||||
Map globals,
|
||||
@Nullable EmbeddableText text = null,
|
||||
Collection<Part> allParts,
|
||||
@ -27,6 +28,7 @@ class GspPartRenderer implements PartRenderer {
|
||||
) {
|
||||
Objects.requireNonNull(part)
|
||||
Objects.requireNonNull(binding)
|
||||
Objects.requireNonNull(siteSpec)
|
||||
Objects.requireNonNull(globals)
|
||||
Objects.requireNonNull(allParts)
|
||||
Objects.requireNonNull(path)
|
||||
@ -38,6 +40,7 @@ class GspPartRenderer implements PartRenderer {
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(
|
||||
allParts,
|
||||
siteSpec,
|
||||
globals,
|
||||
embeddedPartDiagnostics.&addAll,
|
||||
text,
|
||||
@ -48,7 +51,7 @@ class GspPartRenderer implements PartRenderer {
|
||||
tagBuilder: new DynamicTagBuilder(),
|
||||
targetPath: targetPath,
|
||||
text: text,
|
||||
urlBuilder: new PathBasedUrlBuilder(targetPath)
|
||||
urlBuilder: new PathBasedUrlBuilder(targetPath, siteSpec.baseUrl)
|
||||
])
|
||||
new Tuple2<>([], result.toString())
|
||||
} catch (Exception e) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
import com.jessebrault.ssg.Diagnostic
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.text.EmbeddableText
|
||||
import org.jetbrains.annotations.Nullable
|
||||
|
||||
@ -9,6 +10,7 @@ interface PartRenderer {
|
||||
Tuple2<Collection<Diagnostic>, String> render(
|
||||
Part part,
|
||||
Map binding,
|
||||
SiteSpec siteSpec,
|
||||
Map globals,
|
||||
@Nullable EmbeddableText text,
|
||||
Collection<Part> allParts,
|
||||
|
@ -1,8 +1,9 @@
|
||||
package com.jessebrault.ssg.specialpage
|
||||
|
||||
import com.jessebrault.ssg.Diagnostic
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.part.EmbeddablePartsMap
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.tagbuilder.DynamicTagBuilder
|
||||
import com.jessebrault.ssg.text.EmbeddableTextsCollection
|
||||
import com.jessebrault.ssg.text.Text
|
||||
@ -23,6 +24,7 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
||||
SpecialPage specialPage,
|
||||
Collection<Text> texts,
|
||||
Collection<Part> parts,
|
||||
SiteSpec siteSpec,
|
||||
Map globals,
|
||||
String targetPath
|
||||
) {
|
||||
@ -30,12 +32,19 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
|
||||
Collection<Diagnostic> diagnostics = []
|
||||
def result = engine.createTemplate(specialPage.text).make([
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(parts, globals, diagnostics.&addAll, specialPage.path, targetPath),
|
||||
parts: new EmbeddablePartsMap(
|
||||
parts,
|
||||
siteSpec,
|
||||
globals,
|
||||
diagnostics.&addAll,
|
||||
specialPage.path,
|
||||
targetPath
|
||||
),
|
||||
path: specialPage.path,
|
||||
tagBuilder: new DynamicTagBuilder(),
|
||||
targetPath: targetPath,
|
||||
texts: new EmbeddableTextsCollection(texts, globals, diagnostics.&addAll),
|
||||
urlBuilder: new PathBasedUrlBuilder(targetPath)
|
||||
urlBuilder: new PathBasedUrlBuilder(targetPath, siteSpec.baseUrl)
|
||||
])
|
||||
new Tuple2<>(diagnostics, result.toString())
|
||||
} catch (Exception e) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jessebrault.ssg.specialpage
|
||||
|
||||
import com.jessebrault.ssg.Diagnostic
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.text.Text
|
||||
|
||||
@ -10,6 +11,7 @@ interface SpecialPageRenderer {
|
||||
SpecialPage specialPage,
|
||||
Collection<Text> texts,
|
||||
Collection <Part> parts,
|
||||
SiteSpec siteSpec,
|
||||
Map globals,
|
||||
String targetPath
|
||||
)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jessebrault.ssg.template
|
||||
|
||||
import com.jessebrault.ssg.Diagnostic
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.part.EmbeddablePartsMap
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.tagbuilder.DynamicTagBuilder
|
||||
@ -26,6 +27,7 @@ class GspTemplateRenderer implements TemplateRenderer {
|
||||
FrontMatter frontMatter,
|
||||
Text text,
|
||||
Collection<Part> parts,
|
||||
SiteSpec siteSpec,
|
||||
Map globals,
|
||||
String targetPath
|
||||
) {
|
||||
@ -38,12 +40,12 @@ class GspTemplateRenderer implements TemplateRenderer {
|
||||
def result = engine.createTemplate(template.text).make([
|
||||
frontMatter: frontMatter,
|
||||
globals: globals,
|
||||
parts: new EmbeddablePartsMap(parts, globals, onDiagnostics, embeddableText, text.path, targetPath),
|
||||
parts: new EmbeddablePartsMap(parts, siteSpec, globals, onDiagnostics, embeddableText, text.path, targetPath),
|
||||
path: text.path,
|
||||
tagBuilder: new DynamicTagBuilder(),
|
||||
targetPath: targetPath,
|
||||
text: embeddableText,
|
||||
urlBuilder: new PathBasedUrlBuilder(targetPath)
|
||||
urlBuilder: new PathBasedUrlBuilder(targetPath, siteSpec.baseUrl)
|
||||
])
|
||||
new Tuple2<>(diagnostics, result.toString())
|
||||
} catch (Exception e) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.jessebrault.ssg.template
|
||||
|
||||
import com.jessebrault.ssg.Diagnostic
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.text.FrontMatter
|
||||
import com.jessebrault.ssg.text.Text
|
||||
@ -16,6 +17,7 @@ interface TemplateRenderer {
|
||||
FrontMatter frontMatter,
|
||||
Text text,
|
||||
Collection<Part> parts,
|
||||
SiteSpec siteSpec,
|
||||
Map globals,
|
||||
String targetPath
|
||||
)
|
||||
|
@ -7,9 +7,9 @@ class PathBasedUrlBuilder implements UrlBuilder {
|
||||
private final String absolute
|
||||
private final Path fromDirectory
|
||||
|
||||
PathBasedUrlBuilder(String absolute) {
|
||||
this.absolute = absolute
|
||||
def fromFilePath = Path.of(absolute)
|
||||
PathBasedUrlBuilder(String targetPath, String baseUrl) {
|
||||
this.absolute = baseUrl + '/' + targetPath
|
||||
def fromFilePath = Path.of(targetPath)
|
||||
if (fromFilePath.parent) {
|
||||
this.fromDirectory = fromFilePath.parent
|
||||
} else {
|
||||
|
@ -53,9 +53,10 @@ class SimpleStaticSiteGeneratorIntegrationTests {
|
||||
partsProviders: [partsProvider],
|
||||
specialPagesProviders: [specialPagesProvider]
|
||||
)
|
||||
def siteSpec = new SiteSpec('Test Site', 'https://test.com')
|
||||
def globals = [:]
|
||||
|
||||
this.build = new Build('testBuild', config, globals, new File('build'))
|
||||
this.build = new Build('testBuild', config, siteSpec, globals, new File('build'))
|
||||
this.ssg = new SimpleStaticSiteGenerator()
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg.part
|
||||
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.text.EmbeddableText
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
@ -19,6 +20,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
@ -35,6 +37,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[greeting: 'Hello, World!'],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
@ -51,6 +54,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[greeting: 'Hello, World!'],
|
||||
null,
|
||||
[part],
|
||||
@ -68,6 +72,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
new EmbeddableText(renderableText('Hello, World!'), [:], textDiagnostics.&addAll),
|
||||
[part],
|
||||
@ -85,6 +90,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
@ -103,6 +109,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part0,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
null,
|
||||
[part0, part1],
|
||||
@ -119,6 +126,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
@ -135,6 +143,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
@ -151,6 +160,7 @@ class GspPartRendererTests {
|
||||
def r = this.renderer.render(
|
||||
part,
|
||||
[:],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
null,
|
||||
[part],
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg.specialpage
|
||||
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.part.PartRenderer
|
||||
import com.jessebrault.ssg.part.PartType
|
||||
@ -24,20 +25,34 @@ class GspSpecialPageRendererTests {
|
||||
void rendersGlobal() {
|
||||
def specialPage = new SpecialPage("<%= globals['greeting'] %>", 'test.gsp', null)
|
||||
def globals = [greeting: 'Hello, World!']
|
||||
def r = this.renderer.render(specialPage, [], [], globals, '')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[],
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
globals,
|
||||
''
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('Hello, World!', r.v2)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersPartWithNoBinding(@Mock PartRenderer partRenderer) {
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any(), any()))
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any(), any(), any()))
|
||||
.thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('test', partType , '')
|
||||
|
||||
def specialPage = new SpecialPage("<%= parts['test'].render() %>", 'test.gsp', null)
|
||||
def r = this.renderer.render(specialPage, [], [part], [:], '')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[],
|
||||
[part],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('Hello, World!', r.v2)
|
||||
}
|
||||
@ -45,7 +60,14 @@ class GspSpecialPageRendererTests {
|
||||
@Test
|
||||
void rendersPartWithBinding(@Mock PartRenderer partRenderer) {
|
||||
when(partRenderer.render(
|
||||
any(), argThat { Map m -> m.get('greeting') == 'Hello, World!'}, any(), any(), any(), any(), any()
|
||||
any(),
|
||||
argThat { Map m -> m.get('greeting') == 'Hello, World!'},
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any()
|
||||
)).thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('test', partType, '')
|
||||
@ -55,7 +77,14 @@ class GspSpecialPageRendererTests {
|
||||
'test.gsp',
|
||||
null
|
||||
)
|
||||
def r = this.renderer.render(specialPage, [], [part], [:], '')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[],
|
||||
[part],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('Hello, World!', r.v2)
|
||||
}
|
||||
@ -72,7 +101,14 @@ class GspSpecialPageRendererTests {
|
||||
'test.gsp',
|
||||
null
|
||||
)
|
||||
def r = this.renderer.render(specialPage, [text], [], [:], '')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[text],
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('<p><strong>Hello, World!</strong></p>\n', r.v2)
|
||||
}
|
||||
@ -80,7 +116,14 @@ class GspSpecialPageRendererTests {
|
||||
@Test
|
||||
void tagBuilderAvailable() {
|
||||
def specialPage = new SpecialPage('<%= tagBuilder.test() %>', 'test.gsp', null)
|
||||
def r = this.renderer.render(specialPage, [], [], [:], '')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[],
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('<test />', r.v2)
|
||||
}
|
||||
@ -88,7 +131,14 @@ class GspSpecialPageRendererTests {
|
||||
@Test
|
||||
void pathAvailable() {
|
||||
def specialPage = new SpecialPage('<%= path %>', 'test.gsp', null)
|
||||
def r = this.renderer.render(specialPage, [], [], [:], '')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[],
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('test.gsp', r.v2)
|
||||
}
|
||||
@ -100,7 +150,14 @@ class GspSpecialPageRendererTests {
|
||||
'test.gsp',
|
||||
null
|
||||
)
|
||||
def r = this.renderer.render(specialPage, [], [], [:], 'test.html')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[],
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
'test.html'
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('images/test.jpg', r.v2)
|
||||
}
|
||||
@ -113,7 +170,12 @@ class GspSpecialPageRendererTests {
|
||||
null
|
||||
)
|
||||
def r = this.renderer.render(
|
||||
specialPage, [], [], [:], 'test/test.html'
|
||||
specialPage,
|
||||
[],
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
'test/test.html'
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('../images/test.jpg', r.v2)
|
||||
@ -126,7 +188,14 @@ class GspSpecialPageRendererTests {
|
||||
'',
|
||||
null
|
||||
)
|
||||
def r = this.renderer.render(specialPage, [], [], [:], 'test.html')
|
||||
def r = this.renderer.render(
|
||||
specialPage,
|
||||
[],
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
'test.html'
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('test.html', r.v2)
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.jessebrault.ssg.template
|
||||
|
||||
import com.jessebrault.ssg.SiteSpec
|
||||
import com.jessebrault.ssg.part.Part
|
||||
import com.jessebrault.ssg.part.PartRenderer
|
||||
import com.jessebrault.ssg.part.PartType
|
||||
@ -31,7 +32,7 @@ class GspTemplateRendererTests {
|
||||
null
|
||||
)
|
||||
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any(), any()))
|
||||
when(partRenderer.render(any(), any(), any(), any(), any(), any(), any(), any()))
|
||||
.thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('test', partType, null)
|
||||
@ -41,6 +42,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[part],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
@ -56,8 +58,17 @@ class GspTemplateRendererTests {
|
||||
null
|
||||
)
|
||||
|
||||
when(partRenderer.render(any(), argThat { Map m -> m.get('person') == 'World' }, any(), any(), any(), any(), any()))
|
||||
.thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
when(partRenderer.render(
|
||||
any(),
|
||||
argThat { Map m -> m.get('person') == 'World' },
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any(),
|
||||
any()
|
||||
)).thenReturn(new Tuple2<>([], 'Hello, World!'))
|
||||
|
||||
def partType = new PartType([], partRenderer)
|
||||
def part = new Part('greeting', partType, null)
|
||||
|
||||
@ -66,6 +77,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[part],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
@ -81,6 +93,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [title: ['Hello!']]),
|
||||
blankText(),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
@ -96,6 +109,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[test: 'Hello, World!'],
|
||||
''
|
||||
)
|
||||
@ -111,6 +125,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
renderableText('Hello, World!'),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
@ -126,6 +141,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
@ -141,6 +157,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
textWithPath('test.md'),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
''
|
||||
)
|
||||
@ -156,6 +173,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
'test.html'
|
||||
)
|
||||
@ -171,6 +189,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
'test/test.html'
|
||||
)
|
||||
@ -178,6 +197,22 @@ class GspTemplateRendererTests {
|
||||
assertEquals('../images/test.jpg', r.v2)
|
||||
}
|
||||
|
||||
@Test
|
||||
void urlBuilderAbsolutePathCorrect() {
|
||||
def template = new Template('<%= urlBuilder.absolute %>', null, null)
|
||||
def r = this.renderer.render(
|
||||
template,
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[],
|
||||
new SiteSpec('', 'https://test.com'),
|
||||
[:],
|
||||
'test/test.html'
|
||||
)
|
||||
assertEmptyDiagnostics(r)
|
||||
assertEquals('https://test.com/test/test.html', r.v2)
|
||||
}
|
||||
|
||||
@Test
|
||||
void targetPathAvailable() {
|
||||
def template = new Template('<%= targetPath %>', null, null)
|
||||
@ -186,6 +221,7 @@ class GspTemplateRendererTests {
|
||||
new FrontMatter(null, [:]),
|
||||
blankText(),
|
||||
[],
|
||||
new SiteSpec('', ''),
|
||||
[:],
|
||||
'test.html'
|
||||
)
|
||||
|
@ -3,8 +3,8 @@ package com.jessebrault.ssg.url
|
||||
class PathBasedUrlBuilderTests extends AbstractUrlBuilderTests {
|
||||
|
||||
@Override
|
||||
protected UrlBuilder getUrlBuilder(String targetPath) {
|
||||
new PathBasedUrlBuilder(targetPath)
|
||||
protected UrlBuilder getUrlBuilder(String targetPath, String baseUrl) {
|
||||
new PathBasedUrlBuilder(targetPath, baseUrl)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,11 +6,11 @@ import static org.junit.jupiter.api.Assertions.assertEquals
|
||||
|
||||
abstract class AbstractUrlBuilderTests {
|
||||
|
||||
protected abstract UrlBuilder getUrlBuilder(String targetPath);
|
||||
protected abstract UrlBuilder getUrlBuilder(String targetPath, String baseUrl);
|
||||
|
||||
@Test
|
||||
void upDownDown() {
|
||||
def builder = this.getUrlBuilder('posts/post.html')
|
||||
def builder = this.getUrlBuilder('posts/post.html', '')
|
||||
assertEquals('../images/test.jpg', builder.relative('images/test.jpg'))
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ abstract class AbstractUrlBuilderTests {
|
||||
void downDown() {
|
||||
assertEquals(
|
||||
'images/test.jpg',
|
||||
this.getUrlBuilder('test.html').relative('images/test.jpg')
|
||||
this.getUrlBuilder('test.html', '').relative('images/test.jpg')
|
||||
)
|
||||
}
|
||||
|
||||
@ -26,15 +26,15 @@ abstract class AbstractUrlBuilderTests {
|
||||
void upUpDownDown() {
|
||||
assertEquals(
|
||||
'../../images/test.jpg',
|
||||
this.getUrlBuilder('posts/old/test.html').relative('images/test.jpg')
|
||||
this.getUrlBuilder('posts/old/test.html', '').relative('images/test.jpg')
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
void absoluteMatchesTargetPath() {
|
||||
assertEquals(
|
||||
'test/test.html',
|
||||
this.getUrlBuilder('test/test.html').absolute
|
||||
'https://test.com/test/test.html',
|
||||
this.getUrlBuilder('test/test.html', 'https://test.com').absolute
|
||||
)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user