mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-27 00:38:11 -07:00
Restructure the entry point for easier testing.
This commit is contained in:
parent
f2297fcfc3
commit
24d902bfbf
1 changed files with 35 additions and 26 deletions
|
@ -17,37 +17,13 @@ import java.net.URLClassLoader
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
fun main(argv: Array<String>) {
|
fun main(argv: Array<String>) {
|
||||||
val result = mainNoExit(argv)
|
val result = Main.mainNoExit(argv)
|
||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
System.exit(result)
|
System.exit(result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseArgs(argv: Array<String>): Main.RunInfo {
|
class Main @Inject constructor(
|
||||||
val args = Args()
|
|
||||||
val result = JCommander(args)
|
|
||||||
result.parse(*argv)
|
|
||||||
KobaltLogger.LOG_LEVEL = if (args.log < Constants.LOG_QUIET_LEVEL) {
|
|
||||||
Constants.LOG_DEFAULT_LEVEL
|
|
||||||
} else if (args.log > Constants.LOG_MAX_LEVEL) {
|
|
||||||
Constants.LOG_MAX_LEVEL
|
|
||||||
} else args.log
|
|
||||||
return Main.RunInfo(result, args)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun mainNoExit(argv: Array<String>): Int {
|
|
||||||
val (jc, args) = parseArgs(argv)
|
|
||||||
Kobalt.init(MainModule(args, KobaltSettings.readSettingsXml()))
|
|
||||||
val result = Kobalt.INJECTOR.getInstance(Main::class.java).run {
|
|
||||||
val runResult = run(jc, args, argv)
|
|
||||||
pluginInfo.cleanUp()
|
|
||||||
executors.shutdown()
|
|
||||||
runResult
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
private class Main @Inject constructor(
|
|
||||||
val plugins: Plugins,
|
val plugins: Plugins,
|
||||||
val http: Http,
|
val http: Http,
|
||||||
val files: KFiles,
|
val files: KFiles,
|
||||||
|
@ -59,6 +35,39 @@ private class Main @Inject constructor(
|
||||||
val pluginInfo: PluginInfo,
|
val pluginInfo: PluginInfo,
|
||||||
val options: Options) {
|
val options: Options) {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun mainNoExit(argv: Array<String>): Int {
|
||||||
|
val (jc, args) = parseArgs(argv)
|
||||||
|
Kobalt.init(MainModule(args, KobaltSettings.readSettingsXml()))
|
||||||
|
val result = launchMain(Kobalt.INJECTOR.getInstance(Main::class.java), jc, args, argv)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun parseArgs(argv: Array<String>): Main.RunInfo {
|
||||||
|
val args = Args()
|
||||||
|
val result = JCommander(args)
|
||||||
|
result.parse(*argv)
|
||||||
|
KobaltLogger.LOG_LEVEL = if (args.log < Constants.LOG_QUIET_LEVEL) {
|
||||||
|
Constants.LOG_DEFAULT_LEVEL
|
||||||
|
} else if (args.log > Constants.LOG_MAX_LEVEL) {
|
||||||
|
Constants.LOG_MAX_LEVEL
|
||||||
|
} else args.log
|
||||||
|
return Main.RunInfo(result, args)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point for tests, which can instantiate their main object with their own module and injector.
|
||||||
|
*/
|
||||||
|
fun launchMain(main: Main, jc: JCommander, args: Args, argv: Array<String>) : Int {
|
||||||
|
return main.run {
|
||||||
|
val runResult = run(jc, args, argv)
|
||||||
|
pluginInfo.cleanUp()
|
||||||
|
executors.shutdown()
|
||||||
|
runResult
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
data class RunInfo(val jc: JCommander, val args: Args)
|
data class RunInfo(val jc: JCommander, val args: Args)
|
||||||
|
|
||||||
private fun installCommandLinePlugins(args: Args): ClassLoader {
|
private fun installCommandLinePlugins(args: Args): ClassLoader {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue