SiteSpec proliferated.

This commit is contained in:
Jesse Brault 2023-02-15 16:13:20 +01:00
parent 0762dc6b8b
commit 111bdea286
22 changed files with 259 additions and 39 deletions

View File

@ -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

View File

@ -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 })"
}
}

View File

@ -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
)

View 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 })"
}
}

View File

@ -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)

View File

@ -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++
}

View File

@ -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
}
}

View File

@ -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,

View File

@ -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))
}
}

View File

@ -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) {

View File

@ -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,

View File

@ -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) {

View File

@ -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
)

View File

@ -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) {

View File

@ -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
)

View File

@ -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 {

View File

@ -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()
}

View File

@ -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],

View File

@ -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)
}

View File

@ -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'
)

View File

@ -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)
}
}

View File

@ -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
)
}