1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-06-16 21:30:51 -07:00

Restructure the entry point for easier testing.

This commit is contained in:
Cedric Beust 2017-04-06 10:52:17 -07:00
parent f2297fcfc3
commit 24d902bfbf

View file

@ -17,12 +17,32 @@ 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)
} }
} }
class Main @Inject constructor(
val plugins: Plugins,
val http: Http,
val files: KFiles,
val executors: KobaltExecutors,
val dependencyManager: DependencyManager,
val github: GithubApi2,
val updateKobalt: UpdateKobalt,
val client: KobaltClient,
val pluginInfo: PluginInfo,
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 { private fun parseArgs(argv: Array<String>): Main.RunInfo {
val args = Args() val args = Args()
val result = JCommander(args) val result = JCommander(args)
@ -35,29 +55,18 @@ private fun parseArgs(argv: Array<String>): Main.RunInfo {
return Main.RunInfo(result, args) return Main.RunInfo(result, args)
} }
fun mainNoExit(argv: Array<String>): Int { /**
val (jc, args) = parseArgs(argv) * Entry point for tests, which can instantiate their main object with their own module and injector.
Kobalt.init(MainModule(args, KobaltSettings.readSettingsXml())) */
val result = Kobalt.INJECTOR.getInstance(Main::class.java).run { fun launchMain(main: Main, jc: JCommander, args: Args, argv: Array<String>) : Int {
return main.run {
val runResult = run(jc, args, argv) val runResult = run(jc, args, argv)
pluginInfo.cleanUp() pluginInfo.cleanUp()
executors.shutdown() executors.shutdown()
runResult runResult
} }
return result
} }
}
private class Main @Inject constructor(
val plugins: Plugins,
val http: Http,
val files: KFiles,
val executors: KobaltExecutors,
val dependencyManager: DependencyManager,
val github: GithubApi2,
val updateKobalt: UpdateKobalt,
val client: KobaltClient,
val pluginInfo: PluginInfo,
val options: Options) {
data class RunInfo(val jc: JCommander, val args: Args) data class RunInfo(val jc: JCommander, val args: Args)