mirror of
https://github.com/sdkman/sdkman-cli.git
synced 2026-04-27 18:39:39 -04:00
Introduce gvm bash env builder for convenience in testing.
This commit is contained in:
129
src/test/groovy/gvm/GvmBashEnvBuilder.groovy
Normal file
129
src/test/groovy/gvm/GvmBashEnvBuilder.groovy
Normal file
@@ -0,0 +1,129 @@
|
||||
package gvm
|
||||
|
||||
class GvmBashEnvBuilder {
|
||||
|
||||
final buildScriptDir = "build/testScripts" as File
|
||||
|
||||
//mandatory fields
|
||||
private final File gvmBase
|
||||
private final CurlStub curlStub
|
||||
|
||||
//optional fields with sensible defaults
|
||||
List candidates = ['groovy', 'grails']
|
||||
List availableCandidates = candidates
|
||||
boolean onlineMode = true
|
||||
boolean forcedOfflineMode = false
|
||||
String broadcast = "This is a LIVE broadcast!"
|
||||
String service = "http://localhost:8080"
|
||||
String jdkHome = "/path/to/my/jdk"
|
||||
|
||||
File gvmDir, gvmBinDir, gvmVarDir, gvmSrcDir
|
||||
|
||||
BashEnv bashEnv
|
||||
|
||||
static GvmBashEnvBuilder create(File gvmBase, CurlStub curlStub){
|
||||
new GvmBashEnvBuilder(gvmBase, curlStub)
|
||||
}
|
||||
|
||||
private GvmBashEnvBuilder(File gvmBase, CurlStub curlStub){
|
||||
this.gvmBase = gvmBase
|
||||
this.curlStub = curlStub
|
||||
}
|
||||
|
||||
GvmBashEnvBuilder withCandidates(List candidates){
|
||||
this.candidates = candidates
|
||||
this
|
||||
}
|
||||
|
||||
GvmBashEnvBuilder withAvailableCandidates(List candidates){
|
||||
this.availableCandidates = candidates
|
||||
this
|
||||
}
|
||||
|
||||
GvmBashEnvBuilder withBroadcast(String broadcast){
|
||||
this.broadcast = broadcast
|
||||
this
|
||||
}
|
||||
|
||||
GvmBashEnvBuilder withOnlineMode(boolean onlineMode){
|
||||
this.onlineMode = this.onlineMode
|
||||
this
|
||||
}
|
||||
|
||||
GvmBashEnvBuilder withForcedOfflineMode(boolean forcedOfflineMode){
|
||||
this.forcedOfflineMode = forcedOfflineMode
|
||||
this
|
||||
}
|
||||
|
||||
GvmBashEnvBuilder withService(String service){
|
||||
this.service = service
|
||||
this
|
||||
}
|
||||
|
||||
GvmBashEnvBuilder withJdkHome(String jdkHome){
|
||||
this.jdkHome = jdkHome
|
||||
this
|
||||
}
|
||||
|
||||
BashEnv build() {
|
||||
gvmDir = prepareDirectory(gvmBase, ".gvm")
|
||||
gvmBinDir = prepareDirectory(gvmDir, "bin")
|
||||
gvmVarDir = prepareDirectory(gvmDir, "var")
|
||||
gvmSrcDir = prepareDirectory(gvmDir, "src")
|
||||
|
||||
initializeCandidates(gvmDir, candidates)
|
||||
initializeAvailableCandidates(gvmVarDir, availableCandidates)
|
||||
initializeBroadcast(gvmVarDir, broadcast)
|
||||
|
||||
primeInitScript(gvmBinDir)
|
||||
primeModuleScripts(gvmSrcDir)
|
||||
|
||||
bashEnv = new BashEnv(gvmBase.absolutePath, [
|
||||
GVM_DIR: gvmDir.absolutePath,
|
||||
GVM_ONLINE: onlineMode,
|
||||
GVM_FORCE_OFFLINE: forcedOfflineMode,
|
||||
GVM_SERVICE: service,
|
||||
JAVA_HOME: jdkHome
|
||||
])
|
||||
}
|
||||
|
||||
private prepareDirectory(File target, String directoryName) {
|
||||
def directory = new File(target, directoryName)
|
||||
directory.mkdirs()
|
||||
directory
|
||||
}
|
||||
|
||||
private initializeCandidates(File folder, List candidates) {
|
||||
candidates.each { candidate ->
|
||||
new File(folder, candidate).mkdirs()
|
||||
}
|
||||
}
|
||||
|
||||
private initializeAvailableCandidates(File folder, List candidates){
|
||||
new File(folder, "candidates") << candidates.join(",")
|
||||
}
|
||||
|
||||
private initializeBroadcast(File targetFolder, String broadcast) {
|
||||
new File(targetFolder, "broadcast") << broadcast
|
||||
}
|
||||
|
||||
private primeInitScript(File targetFolder) {
|
||||
def sourceInitScript = new File(buildScriptDir, 'gvm-init.sh')
|
||||
|
||||
if (!sourceInitScript.exists())
|
||||
throw new IllegalStateException("gvm-init.sh has not been prepared for consumption.")
|
||||
|
||||
def destInitScript = new File(targetFolder, "gvm-init.sh")
|
||||
destInitScript << sourceInitScript.text
|
||||
destInitScript
|
||||
}
|
||||
|
||||
private primeModuleScripts(File targetFolder){
|
||||
for (f in buildScriptDir.listFiles()){
|
||||
if(!(f.name in ['selfupdate.sh', 'install.sh', 'gvm-init.sh'])){
|
||||
new File(targetFolder, f.name) << f.text
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user