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