From 956642339c82826fe52320aabb259c5cab30823b Mon Sep 17 00:00:00 2001 From: JesseBrault0709 <62299747+JesseBrault0709@users.noreply.github.com> Date: Mon, 12 Jun 2023 08:35:56 +0200 Subject: [PATCH] Imports in gsp/gst files now working. --- ...faultBuildScriptConfiguratorFactory.groovy | 8 ++- .../ssg/page/GspPageRenderer.groovy | 6 +- .../com/jessebrault/ssg/page/PageTypes.groovy | 7 ++- .../ssg/part/GspPartRenderer.groovy | 6 +- .../com/jessebrault/ssg/part/PartTypes.groovy | 7 ++- .../ssg/render/StandardGspRenderer.groovy | 4 +- .../ssg/template/GspTemplateRenderer.groovy | 6 +- .../ssg/template/TemplateTypes.groovy | 11 +++- .../ssg/page/GspPageRendererTests.groovy | 11 ++-- .../ssg/part/GspPartRendererTests.groovy | 40 ++++++++----- .../template/GspTemplateRendererTests.groovy | 27 ++++++--- .../ssg/dsl/StandardDslConsumerTests.groovy | 56 +++++++++++++++++-- .../dsl/StandardDslConsumerTestsUtil.groovy | 33 +++++++++++ .../com/jessebrault/ssg/dsl/Greeter.groovy | 11 ++++ .../com/jessebrault/ssg/dsl/TmpGreeter.groovy | 12 ++++ .../ssg/AbstractBuildCommand.groovy | 4 +- .../ssg/CliBasedStaticSiteGenerator.groovy | 10 +++- .../CliBasedStaticSiteGeneratorTests.groovy | 4 +- 18 files changed, 218 insertions(+), 45 deletions(-) create mode 100644 api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTestsUtil.groovy create mode 100644 api/src/testFixtures/resources/com/jessebrault/ssg/dsl/Greeter.groovy create mode 100644 api/src/testFixtures/resources/com/jessebrault/ssg/dsl/TmpGreeter.groovy diff --git a/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy b/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy index 9411039..7affba1 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/buildscript/DefaultBuildScriptConfiguratorFactory.groovy @@ -23,6 +23,8 @@ import java.util.function.Consumer final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfiguratorFactory { private final File baseDir + private final ClassLoader classLoader + private final Collection scriptBaseUrls @Override Consumer get() { @@ -34,9 +36,9 @@ final class DefaultBuildScriptConfiguratorFactory implements BuildScriptConfigur types { textTypes << TextTypes.MARKDOWN - pageTypes << PageTypes.GSP - templateTypes << TemplateTypes.GSP - partTypes << PartTypes.GSP + pageTypes << PageTypes.getGsp(['.gsp', '.ssg.gst'], this.classLoader, this.scriptBaseUrls) + templateTypes << TemplateTypes.getGsp(['.gsp', '.ssg.gst'], this.classLoader, this.scriptBaseUrls) + partTypes << PartTypes.getGsp(['.gsp', '.ssg.gst'], this.classLoader, this.scriptBaseUrls) } sources { base, types -> diff --git a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy index d83fed3..e601834 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/page/GspPageRenderer.groovy @@ -11,7 +11,11 @@ import groovy.transform.NullCheck @EqualsAndHashCode final class GspPageRenderer implements PageRenderer { - private final StandardGspRenderer gspRenderer = new StandardGspRenderer(this.class.classLoader) + private final StandardGspRenderer gspRenderer + + GspPageRenderer(ClassLoader classLoader, Collection urls) { + this.gspRenderer = new StandardGspRenderer(classLoader, urls) + } @Override Result render( diff --git a/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy b/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy index f32638a..9b9581f 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/page/PageTypes.groovy @@ -2,7 +2,12 @@ package com.jessebrault.ssg.page final class PageTypes { - static final PageType GSP = new PageType(['.gsp'], new GspPageRenderer()) + @Deprecated + static final PageType GSP = new PageType(['.gsp'], new GspPageRenderer(PageTypes.classLoader, [])) + + static PageType getGsp(Collection extensions, ClassLoader classLoader, Collection urls) { + new PageType(extensions, new GspPageRenderer(classLoader, urls)) + } private PageTypes() {} diff --git a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy index 6eb409f..6942df5 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/part/GspPartRenderer.groovy @@ -13,7 +13,11 @@ import static java.util.Objects.requireNonNull @EqualsAndHashCode final class GspPartRenderer implements PartRenderer { - private final StandardGspRenderer gspRenderer = new StandardGspRenderer(this.class.classLoader) + private final StandardGspRenderer gspRenderer + + GspPartRenderer(ClassLoader classLoader, Collection urls) { + this.gspRenderer = new StandardGspRenderer(classLoader, urls) + } @Override Result render( diff --git a/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy b/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy index 110016d..7d0cb11 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/part/PartTypes.groovy @@ -2,7 +2,12 @@ package com.jessebrault.ssg.part final class PartTypes { - static final PartType GSP = new PartType(['.gsp'], new GspPartRenderer()) + @Deprecated + static final PartType GSP = new PartType(['.gsp'], new GspPartRenderer(PartTypes.classLoader, [])) + + static PartType getGsp(Collection extensions, ClassLoader classLoader, Collection scriptBaseUrls) { + new PartType(extensions, new GspPartRenderer(classLoader, scriptBaseUrls)) + } private PartTypes() {} diff --git a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy index 6ad395d..667b74f 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/render/StandardGspRenderer.groovy @@ -13,8 +13,8 @@ final class StandardGspRenderer { private final TemplateCreator templateCreator - StandardGspRenderer(ClassLoader parentClassLoader) { - this.templateCreator = new GroovyTemplateCreator(ExtendedGstParser::new, [], parentClassLoader, true) + StandardGspRenderer(ClassLoader parentClassLoader, Collection urls) { + this.templateCreator = new GroovyTemplateCreator(ExtendedGstParser::new, urls, parentClassLoader, true) } Result render( diff --git a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy index 0de105c..10dacf8 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/template/GspTemplateRenderer.groovy @@ -12,7 +12,11 @@ import groovy.transform.NullCheck @EqualsAndHashCode final class GspTemplateRenderer implements TemplateRenderer { - private final StandardGspRenderer gspRenderer = new StandardGspRenderer(this.class.classLoader) + private final StandardGspRenderer gspRenderer + + GspTemplateRenderer(ClassLoader parentClassLoader, Collection urls) { + this.gspRenderer = new StandardGspRenderer(parentClassLoader, urls) + } @Override Result render( diff --git a/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy b/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy index 82d865e..2d76765 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/template/TemplateTypes.groovy @@ -2,7 +2,16 @@ package com.jessebrault.ssg.template final class TemplateTypes { - static final TemplateType GSP = new TemplateType(['.gsp'], new GspTemplateRenderer()) + @Deprecated + static final TemplateType GSP = new TemplateType(['.gsp'], new GspTemplateRenderer(TemplateTypes.classLoader, [])) + + static TemplateType getGsp( + Collection extensions, + ClassLoader classLoader, + Collection scriptBaseUrls + ) { + new TemplateType(extensions, new GspTemplateRenderer(classLoader, scriptBaseUrls)) + } private TemplateTypes() {} diff --git a/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy index 6f46002..a24d77d 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/page/GspPageRendererTests.groovy @@ -6,12 +6,15 @@ import com.jessebrault.ssg.util.Result final class GspPageRendererTests implements StandardDslConsumerTests { - private final PageRenderer renderer = new GspPageRenderer() + private static GspPageRenderer getRenderer(ClassLoader classLoader, Collection urls) { + new GspPageRenderer(classLoader, urls) + } @Override - Result render(String scriptlet, RenderContext context) { - this.renderer.render( - new Page('', new PageType([], this.renderer), scriptlet), + Result render(String scriptlet, RenderContext context, ClassLoader classLoader, Collection urls) { + def renderer = getRenderer(classLoader, urls) + renderer.render( + new Page('', new PageType([], renderer), scriptlet), context ) } diff --git a/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy index 4bedc86..1b5e097 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/part/GspPartRendererTests.groovy @@ -4,6 +4,7 @@ import com.jessebrault.ssg.dsl.StandardDslConsumerTests import com.jessebrault.ssg.render.RenderContext import com.jessebrault.ssg.text.Text import com.jessebrault.ssg.util.Result +import org.jetbrains.annotations.Nullable import org.junit.jupiter.api.Test import static com.jessebrault.ssg.text.TextMocks.renderableText @@ -13,16 +14,24 @@ import static org.junit.jupiter.api.Assertions.assertTrue final class GspPartRendererTests implements StandardDslConsumerTests { - private final PartRenderer renderer = new GspPartRenderer() + private static GspPartRenderer getRenderer( + ClassLoader classLoader = GspPartRendererTests.classLoader, + Collection urls = [] + ) { + new GspPartRenderer(classLoader, urls) + } - private Result doRender( + private static Result doRender( String scriptlet, RenderContext context, Map binding = [:], - Text text = null + @Nullable Text text = null, + ClassLoader classLoader = GspPartRendererTests.classLoader, + Collection urls = [] ) { - this.renderer.render( - new Part('', new PartType([], this.renderer), scriptlet), + def renderer = getRenderer(classLoader, urls) + renderer.render( + new Part('', new PartType([], renderer), scriptlet), binding, context, text @@ -30,22 +39,23 @@ final class GspPartRendererTests implements StandardDslConsumerTests { } @Override - Result render(String scriptlet, RenderContext context) { - this.doRender(scriptlet, context) + Result render(String scriptlet, RenderContext context, ClassLoader classLoader, Collection urls) { + doRender(scriptlet, context, [:], null, classLoader, urls) } @Test void rendersWithBinding() { this.checkResult( 'Hello, World!', - this.doRender('<%= binding.greeting %>', new RenderContext(), [greeting: 'Hello, World!']) + doRender('<%= binding.greeting %>', new RenderContext(), [greeting: 'Hello, World!']) ) } @Test void textAvailable() { - this.checkResult('Hello, World!', this.renderer.render( - new Part('', new PartType([], this.renderer), '<%= text.render() %>'), + def renderer = getRenderer() + this.checkResult('Hello, World!', renderer.render( + new Part('', new PartType([], renderer), '<%= text.render() %>'), [:], new RenderContext(), renderableText('Hello, World!') @@ -54,7 +64,8 @@ final class GspPartRendererTests implements StandardDslConsumerTests { @Test void nestedPartDiagnosticBubblesUp() { - def partType = new PartType([], this.renderer) + def renderer = getRenderer() + def partType = new PartType([], renderer) def nestedProblemPart = new Part( 'nestedProblem.gsp', partType, @@ -65,7 +76,7 @@ final class GspPartRendererTests implements StandardDslConsumerTests { partType, '<% parts["nestedProblem.gsp"].render() %>' ) - def r = this.renderer.render( + def r = renderer.render( callerPart, [:], new RenderContext(parts: [nestedProblemPart]), @@ -79,7 +90,8 @@ final class GspPartRendererTests implements StandardDslConsumerTests { @Test void nestedPartIsBlankWhenThrowingExceptionButCallerRendered() { - def partType = new PartType([], this.renderer) + def renderer = getRenderer() + def partType = new PartType([], renderer) def nestedProblemPart = new Part( 'nestedProblem.gsp', partType, @@ -90,7 +102,7 @@ final class GspPartRendererTests implements StandardDslConsumerTests { partType, 'Hello, World!<% parts["nestedProblem.gsp"].render() %>' ) - def r = this.renderer.render( + def r = renderer.render( callerPart, [:], new RenderContext(parts: [nestedProblemPart]), diff --git a/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy b/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy index 7d50c8c..b7bfa03 100644 --- a/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy +++ b/api/src/test/groovy/com/jessebrault/ssg/template/GspTemplateRendererTests.groovy @@ -13,21 +13,34 @@ import static org.junit.jupiter.api.Assertions.assertEquals final class GspTemplateRendererTests implements StandardDslConsumerTests { - private final TemplateRenderer renderer = new GspTemplateRenderer() + private static TemplateRenderer getRenderer( + ClassLoader classLoader = GspTemplateRendererTests.classLoader, + Collection urls = [] + ) { + new GspTemplateRenderer(classLoader, urls) + } - private Result doRender(String scriptlet, Text text, RenderContext context) { - this.renderer.render(new Template('', new TemplateType([], this.renderer), scriptlet), text, context) + private static Result doRender( + String scriptlet, + Text text, + RenderContext context, + ClassLoader classLoader, + Collection urls + ) { + def renderer = getRenderer(classLoader, urls) + renderer.render(new Template('', new TemplateType([], renderer), scriptlet), text, context) } @Override - Result render(String scriptlet, RenderContext context) { - this.doRender(scriptlet, blankText(), context) + Result render(String scriptlet, RenderContext context, ClassLoader classLoader, Collection urls) { + doRender(scriptlet, blankText(), context, classLoader, urls) } @Test void textAvailableToRender() { - def template = new Template('', new TemplateType([], this.renderer), '<%= text.render() %>') - def r = this.renderer.render( + def renderer = getRenderer() + def template = new Template('', new TemplateType([], renderer), '<%= text.render() %>') + def r = renderer.render( template, renderableText('Hello, World!'), new RenderContext() diff --git a/api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTests.groovy b/api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTests.groovy index a96dabc..25cfccd 100644 --- a/api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTests.groovy +++ b/api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTests.groovy @@ -33,21 +33,32 @@ import static org.mockito.Mockito.* @ExtendWith(MockitoExtension) interface StandardDslConsumerTests { - Result render(String scriptlet, RenderContext context) + Result render(String scriptlet, RenderContext context, ClassLoader classLoader, Collection urls) default void checkResult(String expected, Result result) { assertEmptyDiagnostics(result) assertEquals(expected, result.get()) } - default void doDslRenderTest(String expected, String scriptlet, RenderContext context = null) { - this.checkResult(expected, this.render(scriptlet, context ?: new RenderContext())) + default void doDslRenderTest( + String expected, + String scriptlet, + RenderContext context = new RenderContext(), + ClassLoader classLoader = this.class.classLoader, + Collection urls = [] + ) { + this.checkResult(expected, this.render(scriptlet, context, classLoader, urls)) } - default void doDslAssertionTest(String scriptlet, RenderContext context = null) { + default void doDslAssertionTest( + String scriptlet, + RenderContext context = new RenderContext(), + ClassLoader classLoader = this.class.classLoader, + Collection urls = [] + ) { Result result = null try { - result = this.render(scriptlet, context ?: new RenderContext()) + result = this.render(scriptlet, context, classLoader, urls) } catch (Throwable e) { fail(e) } @@ -242,4 +253,39 @@ interface StandardDslConsumerTests { ) } + @Test + default void importFromClasspath() { + this.doDslAssertionTest('<%@ import com.jessebrault.ssg.dsl.Greeter %><% assert Greeter %>') + } + + @Test + default void importFromClasspathIsClass() { + this.doDslAssertionTest( + '<%@ import com.jessebrault.ssg.dsl.Greeter %><% assert Greeter instanceof Class %>' + ) + } + + @Test + default void withConfiguredUrls() { + def parentClassLoader = this.class.classLoader + def greeterText = StandardDslConsumerTestsUtil.readResource( + 'com/jessebrault/ssg/dsl/TmpGreeter.groovy', parentClassLoader + ) + if (greeterText == null) { + fail('Could not load greeterText') + } + def greeterBaseUrl = StandardDslConsumerTestsUtil.writeGroovyClass( + 'TmpGreeter', + ['com', 'jessebrault', 'ssg', 'tmp'], + greeterText + ) + this.doDslRenderTest( + "Hello, World!", + "<%@ import com.jessebrault.ssg.tmp.TmpGreeter %><%= new TmpGreeter().greet() %>", + new RenderContext(), + parentClassLoader, + [greeterBaseUrl] + ) + } + } diff --git a/api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTestsUtil.groovy b/api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTestsUtil.groovy new file mode 100644 index 0000000..c493032 --- /dev/null +++ b/api/src/testFixtures/groovy/com/jessebrault/ssg/dsl/StandardDslConsumerTestsUtil.groovy @@ -0,0 +1,33 @@ +package com.jessebrault.ssg.dsl + +import org.jetbrains.annotations.Nullable + +final class StandardDslConsumerTestsUtil { + + static @Nullable String readResource(String name, ClassLoader classLoader) { + def resource = classLoader.getResourceAsStream(name) + if (resource != null) { + def writer = new StringWriter() + resource.withReader { + it.transferTo(writer) + } + writer.toString() + } else { + null + } + } + + static URL writeGroovyClass(String name, List packageParts, String text) { + def tmpDir = File.createTempDir("standardDslConsumerTestsUtil") + def packageFile = new File(tmpDir, (packageParts.inject('') { acc, part -> + acc + File.separator + part + }) as String) + def classFile = new File(packageFile, "${ name }.groovy") + classFile.createParentDirectories() + classFile.write(text) + tmpDir.toURI().toURL() + } + + private StandardDslConsumerTestsUtil() {} + +} diff --git a/api/src/testFixtures/resources/com/jessebrault/ssg/dsl/Greeter.groovy b/api/src/testFixtures/resources/com/jessebrault/ssg/dsl/Greeter.groovy new file mode 100644 index 0000000..2214be9 --- /dev/null +++ b/api/src/testFixtures/resources/com/jessebrault/ssg/dsl/Greeter.groovy @@ -0,0 +1,11 @@ +package com.jessebrault.ssg.dsl + +@SuppressWarnings('unused') +class Greeter { + + @SuppressWarnings('GrMethodMayBeStatic') + String greet() { + 'Hello, World!' + } + +} diff --git a/api/src/testFixtures/resources/com/jessebrault/ssg/dsl/TmpGreeter.groovy b/api/src/testFixtures/resources/com/jessebrault/ssg/dsl/TmpGreeter.groovy new file mode 100644 index 0000000..ef07f56 --- /dev/null +++ b/api/src/testFixtures/resources/com/jessebrault/ssg/dsl/TmpGreeter.groovy @@ -0,0 +1,12 @@ +//file:noinspection GrPackage +package com.jessebrault.ssg.tmp + +@SuppressWarnings('unused') +class TmpGreeter { + + @SuppressWarnings('GrMethodMayBeStatic') + String greet() { + 'Hello, World!' + } + +} diff --git a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy index 477d936..9051b7c 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/AbstractBuildCommand.groovy @@ -47,7 +47,9 @@ abstract class AbstractBuildCommand extends AbstractSubCommand { new File('.'), this.buildScript, this.buildSrcDirs, - this.scriptArgs + this.scriptArgs, + this.class.classLoader, + this.buildSrcDirs.collect { it.toURI().toURL() } ) } diff --git a/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy b/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy index 1395b9a..c4d5ead 100644 --- a/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy +++ b/cli/src/main/groovy/com/jessebrault/ssg/CliBasedStaticSiteGenerator.groovy @@ -13,6 +13,8 @@ final class CliBasedStaticSiteGenerator implements StaticSiteGenerator { private final File buildScript private final Collection buildSrcDirs private final Map scriptArgs + private final ClassLoader classLoader + private final Collection scriptBaseUrls private StaticSiteGenerator staticSiteGenerator @@ -20,19 +22,23 @@ final class CliBasedStaticSiteGenerator implements StaticSiteGenerator { File baseDir, File buildScript, Collection buildSrcDirs, - Map scriptArgs + Map scriptArgs, + ClassLoader classLoader, + Collection scriptBaseUrls ) { this.baseDir = baseDir this.buildScript = buildScript this.buildSrcDirs = buildSrcDirs this.scriptArgs = scriptArgs + this.classLoader = classLoader + this.scriptBaseUrls = scriptBaseUrls } @Override boolean doBuild(String buildName, Consumer> diagnosticsConsumer) { if (this.staticSiteGenerator == null) { this.staticSiteGenerator = new BuildScriptBasedStaticSiteGenerator( - [new DefaultBuildScriptConfiguratorFactory(this.baseDir)], + [new DefaultBuildScriptConfiguratorFactory(this.baseDir, this.classLoader, this.scriptBaseUrls)], this.buildScript == new File('ssgBuilds.groovy') || this.buildScript.exists() ? new File(this.baseDir, this.buildScript.path) : null, diff --git a/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy b/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy index 1f6d4d1..57c31d5 100644 --- a/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy +++ b/cli/src/test/groovy/com/jessebrault/ssg/CliBasedStaticSiteGeneratorTests.groovy @@ -18,7 +18,9 @@ final class CliBasedStaticSiteGeneratorTests { tempDir, new File('ssgBuilds.groovy'), [new File('buildSrc')], - [:] + [:], + this.class.classLoader, + [new File(tempDir, 'buildSrc').toURI().toURL()] ) def diagnostics = [] as Collection assertTrue(ssg.doBuild('production', diagnostics.&addAll))