BuildScriptRunner tests working; added binding and other params.

This commit is contained in:
JesseBrault0709 2023-04-30 20:15:01 +02:00
parent 2dbbe53a10
commit 7708ac66e0
10 changed files with 164 additions and 53 deletions

View File

@ -8,22 +8,32 @@ interface BuildScriptRunner {
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls,
Map<String, Object> binding,
Consumer<BuildScriptBase> configureBuildScript
)
default Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls,
Map<String, Object> binding
) {
this.runBuildScript(scriptName, scriptBaseDirUrl, otherUrls, binding) { }
}
default Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls
) {
this.runBuildScript(scriptName, scriptBaseDirUrl, otherUrls) { }
this.runBuildScript(scriptName, scriptBaseDirUrl, otherUrls, [:]) { }
}
default Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl
) {
this.runBuildScript(scriptName, scriptBaseDirUrl, [])
this.runBuildScript(scriptName, scriptBaseDirUrl, [], [:]) { }
}
}

View File

@ -6,13 +6,14 @@ import org.codehaus.groovy.control.CompilerConfiguration
import java.util.function.Consumer
@NullCheck
final class GroovyBuildScriptRunner implements BuildScriptRunner {
final class SimpleBuildScriptRunner implements BuildScriptRunner {
@Override
Collection<Build> runBuildScript(
String scriptName,
URL scriptBaseDirUrl,
Collection<URL> otherUrls,
Map<String, Object> binding,
Consumer<BuildScriptBase> configureBuildScript
) {
def engine = new GroovyScriptEngine([scriptBaseDirUrl, *otherUrls] as URL[])
@ -21,7 +22,7 @@ final class GroovyBuildScriptRunner implements BuildScriptRunner {
scriptBaseClass = 'com.jessebrault.ssg.buildscript.BuildScriptBase'
}
def buildScript = engine.createScript(scriptName, new Binding())
def buildScript = engine.createScript(scriptName, new Binding(binding))
assert buildScript instanceof BuildScriptBase
configureBuildScript.accept(buildScript)
buildScript.run()

View File

@ -1,46 +0,0 @@
package com.jessebrault.ssg.buildscript
import groovy.transform.NullCheck
import org.junit.jupiter.api.Test
import static org.junit.jupiter.api.Assertions.assertEquals
@NullCheck
final class GroovyBuildScriptRunnerTests {
/**
* Must be non-static, otherwise Groovy gets confused inside the Closures.
*/
@SuppressWarnings('GrMethodMayBeStatic')
private void copyLocalResourceToWriter(String name, Writer target) {
GroovyBuildScriptRunnerTests.getResourceAsStream(name).withReader {
it.transferTo(target)
}
}
/**
* Must be non-static, otherwise Groovy gets confused inside the Closures.
*/
@SuppressWarnings('GrMethodMayBeStatic')
private File setupScriptEnvironment(Collection<String> resourceNames) {
def tempDir = File.createTempDir()
new FileTreeBuilder(tempDir).tap {
resourceNames.each { String resourceName ->
file(resourceName).withWriter {
this.copyLocalResourceToWriter(resourceName, it)
}
}
}
tempDir
}
@Test
void simpleScript() {
def baseDir = this.setupScriptEnvironment(['simple.groovy'])
def runner = new GroovyBuildScriptRunner()
def builds = runner.runBuildScript('simple.groovy', baseDir.toURI().toURL(), [])
assertEquals(1, builds.size())
assertEquals('test', builds[0].name)
}
}

View File

@ -0,0 +1,98 @@
package com.jessebrault.ssg.buildscript
import groovy.transform.NullCheck
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
import java.util.function.Consumer
import static org.junit.jupiter.api.Assertions.assertEquals
import static org.mockito.Mockito.verify
@NullCheck
@ExtendWith(MockitoExtension)
final class SimpleBuildScriptRunnerTests {
/**
* Must be non-static, otherwise Groovy gets confused inside the Closures.
*/
@SuppressWarnings('GrMethodMayBeStatic')
private void copyLocalResourceToWriter(String name, Writer target) {
SimpleBuildScriptRunnerTests.getResourceAsStream(name).withReader {
it.transferTo(target)
}
}
/**
* Must be non-static, otherwise Groovy gets confused inside the Closures.
*/
@SuppressWarnings('GrMethodMayBeStatic')
private File setupScripts(Collection<String> resourceNames) {
def tempDir = File.createTempDir()
new FileTreeBuilder(tempDir).tap {
resourceNames.each { String resourceName ->
file(resourceName).withWriter {
this.copyLocalResourceToWriter(resourceName, it)
}
}
}
tempDir
}
@Test
void simpleScript() {
def baseDir = this.setupScripts(['simple.groovy'])
def runner = new SimpleBuildScriptRunner()
def builds = runner.runBuildScript('simple.groovy', baseDir.toURI().toURL())
assertEquals(1, builds.size())
assertEquals('test', builds[0].name)
}
@Test
void testImport() {
def baseDir = this.setupScripts(['testImport.groovy', 'TestHtmlTask.groovy'])
def runner = new SimpleBuildScriptRunner()
def builds = runner.runBuildScript('testImport.groovy', baseDir.toURI().toURL())
assertEquals(1, builds.size())
assertEquals('test', builds[0].name)
}
@Test
void buildSrcTest() {
def baseDir = File.createTempDir()
new FileTreeBuilder(baseDir).tap {
file('buildSrcTest.groovy').withWriter {
this.copyLocalResourceToWriter('buildSrcTest.groovy', it)
}
dir('buildSrc') {
file('AnotherTask.groovy').withWriter {
this.copyLocalResourceToWriter('buildSrc/AnotherTask.groovy', it)
}
}
}
def runner = new SimpleBuildScriptRunner()
def builds = runner.runBuildScript(
'buildSrcTest.groovy',
baseDir.toURI().toURL(),
[new File(baseDir, 'buildSrc').toURI().toURL()]
)
assertEquals(1, builds.size())
assertEquals('test', builds[0].name)
}
@Test
void withBinding(@Mock Consumer<String> stringConsumer) {
def baseDir = this.setupScripts(['withBinding.groovy'])
def runner = new SimpleBuildScriptRunner()
runner.runBuildScript(
'withBinding.groovy',
baseDir.toURI().toURL(),
[],
[stringConsumer: stringConsumer]
)
verify(stringConsumer).accept('test')
}
}

View File

@ -0,0 +1,22 @@
import com.jessebrault.ssg.html.HtmlTask
import com.jessebrault.ssg.task.Task
import com.jessebrault.ssg.util.Diagnostic
final class TestHtmlTask implements HtmlTask {
@Override
String getPath() {
return null
}
@Override
String getName() {
return null
}
@Override
Collection<Diagnostic> execute(Collection<Task> allTasks) {
return null
}
}

View File

@ -0,0 +1,16 @@
import com.jessebrault.ssg.task.Task
import com.jessebrault.ssg.util.Diagnostic
final class AnotherTask implements Task {
@Override
String getName() {
return null
}
@Override
Collection<Diagnostic> execute(Collection<Task> allTasks) {
return null
}
}

View File

@ -0,0 +1,3 @@
def t = new AnotherTask()
build('test') { }

View File

@ -0,0 +1,5 @@
def t = new TestHtmlTask()
build {
name = 'test'
}

View File

@ -0,0 +1 @@
stringConsumer.accept('test')

View File

@ -1,7 +1,7 @@
package com.jessebrault.ssg
import com.jessebrault.ssg.buildscript.Build
import com.jessebrault.ssg.buildscript.GroovyBuildScriptRunner
import com.jessebrault.ssg.buildscript.SimpleBuildScriptRunner
import com.jessebrault.ssg.buildscript.DefaultBuildScriptConfiguratorFactory
import com.jessebrault.ssg.util.Diagnostic
import org.apache.logging.log4j.LogManager
@ -33,10 +33,11 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
if (buildScriptFile.exists()) {
logger.info('found buildScriptFile: {}', buildScriptFile)
def configuratorFactory = new DefaultBuildScriptConfiguratorFactory()
this.availableBuilds = new GroovyBuildScriptRunner().runBuildScript(
this.availableBuilds = new SimpleBuildScriptRunner().runBuildScript(
buildScriptFile.name,
buildScriptFile.parentFile.toURI().toURL(),
[new File('buildSrc').toURI().toURL()]
[new File('buildSrc').toURI().toURL()],
[:]
) {
configuratorFactory.get().accept(it)
}