BuildScriptRunner tests working; added binding and other params.
This commit is contained in:
parent
2dbbe53a10
commit
7708ac66e0
@ -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, [], [:]) { }
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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()
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
@ -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')
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
def t = new AnotherTask()
|
||||
|
||||
build('test') { }
|
@ -0,0 +1,5 @@
|
||||
def t = new TestHtmlTask()
|
||||
|
||||
build {
|
||||
name = 'test'
|
||||
}
|
@ -0,0 +1 @@
|
||||
stringConsumer.accept('test')
|
@ -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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user