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,
|
String scriptName,
|
||||||
URL scriptBaseDirUrl,
|
URL scriptBaseDirUrl,
|
||||||
Collection<URL> otherUrls,
|
Collection<URL> otherUrls,
|
||||||
|
Map<String, Object> binding,
|
||||||
Consumer<BuildScriptBase> configureBuildScript
|
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(
|
default Collection<Build> runBuildScript(
|
||||||
String scriptName,
|
String scriptName,
|
||||||
URL scriptBaseDirUrl,
|
URL scriptBaseDirUrl,
|
||||||
Collection<URL> otherUrls
|
Collection<URL> otherUrls
|
||||||
) {
|
) {
|
||||||
this.runBuildScript(scriptName, scriptBaseDirUrl, otherUrls) { }
|
this.runBuildScript(scriptName, scriptBaseDirUrl, otherUrls, [:]) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
default Collection<Build> runBuildScript(
|
default Collection<Build> runBuildScript(
|
||||||
String scriptName,
|
String scriptName,
|
||||||
URL scriptBaseDirUrl
|
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
|
import java.util.function.Consumer
|
||||||
|
|
||||||
@NullCheck
|
@NullCheck
|
||||||
final class GroovyBuildScriptRunner implements BuildScriptRunner {
|
final class SimpleBuildScriptRunner implements BuildScriptRunner {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
Collection<Build> runBuildScript(
|
Collection<Build> runBuildScript(
|
||||||
String scriptName,
|
String scriptName,
|
||||||
URL scriptBaseDirUrl,
|
URL scriptBaseDirUrl,
|
||||||
Collection<URL> otherUrls,
|
Collection<URL> otherUrls,
|
||||||
|
Map<String, Object> binding,
|
||||||
Consumer<BuildScriptBase> configureBuildScript
|
Consumer<BuildScriptBase> configureBuildScript
|
||||||
) {
|
) {
|
||||||
def engine = new GroovyScriptEngine([scriptBaseDirUrl, *otherUrls] as URL[])
|
def engine = new GroovyScriptEngine([scriptBaseDirUrl, *otherUrls] as URL[])
|
||||||
@ -21,7 +22,7 @@ final class GroovyBuildScriptRunner implements BuildScriptRunner {
|
|||||||
scriptBaseClass = 'com.jessebrault.ssg.buildscript.BuildScriptBase'
|
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
|
assert buildScript instanceof BuildScriptBase
|
||||||
configureBuildScript.accept(buildScript)
|
configureBuildScript.accept(buildScript)
|
||||||
buildScript.run()
|
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
|
package com.jessebrault.ssg
|
||||||
|
|
||||||
import com.jessebrault.ssg.buildscript.Build
|
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.buildscript.DefaultBuildScriptConfiguratorFactory
|
||||||
import com.jessebrault.ssg.util.Diagnostic
|
import com.jessebrault.ssg.util.Diagnostic
|
||||||
import org.apache.logging.log4j.LogManager
|
import org.apache.logging.log4j.LogManager
|
||||||
@ -33,10 +33,11 @@ abstract class AbstractBuildCommand extends AbstractSubCommand {
|
|||||||
if (buildScriptFile.exists()) {
|
if (buildScriptFile.exists()) {
|
||||||
logger.info('found buildScriptFile: {}', buildScriptFile)
|
logger.info('found buildScriptFile: {}', buildScriptFile)
|
||||||
def configuratorFactory = new DefaultBuildScriptConfiguratorFactory()
|
def configuratorFactory = new DefaultBuildScriptConfiguratorFactory()
|
||||||
this.availableBuilds = new GroovyBuildScriptRunner().runBuildScript(
|
this.availableBuilds = new SimpleBuildScriptRunner().runBuildScript(
|
||||||
buildScriptFile.name,
|
buildScriptFile.name,
|
||||||
buildScriptFile.parentFile.toURI().toURL(),
|
buildScriptFile.parentFile.toURI().toURL(),
|
||||||
[new File('buildSrc').toURI().toURL()]
|
[new File('buildSrc').toURI().toURL()],
|
||||||
|
[:]
|
||||||
) {
|
) {
|
||||||
configuratorFactory.get().accept(it)
|
configuratorFactory.get().accept(it)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user