1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 16:28:12 -07:00

TaskManagerTest.

This commit is contained in:
Cedric Beust 2016-04-15 06:20:46 -08:00
parent 114a75b0fb
commit c9e595a3a0
2 changed files with 36 additions and 7 deletions

View file

@ -24,6 +24,7 @@ import javax.inject.Singleton
public class TaskManager @Inject constructor(val args: Args, public class TaskManager @Inject constructor(val args: Args,
val incrementalManagerFactory: IncrementalManager.IFactory) { val incrementalManagerFactory: IncrementalManager.IFactory) {
private val runBefore = TreeMultimap.create<String, String>() private val runBefore = TreeMultimap.create<String, String>()
private val runAfter = TreeMultimap.create<String, String>()
private val alwaysRunAfter = TreeMultimap.create<String, String>() private val alwaysRunAfter = TreeMultimap.create<String, String>()
/** /**
@ -37,6 +38,10 @@ public class TaskManager @Inject constructor(val args: Args,
runBefore.put(task1, task2) runBefore.put(task1, task2)
} }
fun runAfter(task1: String, task2: String) {
runAfter.put(task1, task2)
}
fun alwaysRunAfter(task1: String, task2: String) { fun alwaysRunAfter(task1: String, task2: String) {
alwaysRunAfter.put(task1, task2) alwaysRunAfter.put(task1, task2)
} }
@ -89,7 +94,7 @@ public class TaskManager @Inject constructor(val args: Args,
} }
val graph = createGraph(project.name, taskNames, tasksByNames, val graph = createGraph(project.name, taskNames, tasksByNames,
runBefore, alwaysRunAfter, runBefore, runAfter, alwaysRunAfter,
{ task: PluginTask -> task.name }, { task: PluginTask -> task.name },
{ task: PluginTask -> task.plugin.accept(project) }) { task: PluginTask -> task.plugin.accept(project) })
@ -120,6 +125,7 @@ public class TaskManager @Inject constructor(val args: Args,
@VisibleForTesting @VisibleForTesting
fun <T> createGraph(projectName: String, taskNames: List<String>, dependencies: Multimap<String, T>, fun <T> createGraph(projectName: String, taskNames: List<String>, dependencies: Multimap<String, T>,
runBefore: TreeMultimap<String, String>, runBefore: TreeMultimap<String, String>,
runAfter: TreeMultimap<String, String>,
alwaysRunAfter: TreeMultimap<String, String>, alwaysRunAfter: TreeMultimap<String, String>,
toName: (T) -> String, toName: (T) -> String,
accept: (T) -> Boolean): accept: (T) -> Boolean):
@ -173,14 +179,29 @@ public class TaskManager @Inject constructor(val args: Args,
} }
} }
//
// Add all the runAfter nodes if applicable
//
graph.nodes.forEach { node ->
val ra = runAfter[toName(node)]
ra.forEach { o ->
dependencies[o].forEach {
if (o != null) {
graph.addEdge(it, node)
}
}
}
println("RA: $ra")
}
// //
// If any of the nodes in the graph has an "alwaysRunAfter", add that edge too // If any of the nodes in the graph has an "alwaysRunAfter", add that edge too
// //
val allNodes = arrayListOf<T>() val allNodes = arrayListOf<T>()
allNodes.addAll(graph.nodes) allNodes.addAll(graph.nodes)
allNodes.forEach { node -> allNodes.forEach { node ->
val other = alwaysRunAfter.get(toName(node)) val ra = alwaysRunAfter[toName(node)]
other?.forEach { o -> ra?.forEach { o ->
dependencies[o]?.forEach { dependencies[o]?.forEach {
graph.addEdge(it, node) graph.addEdge(it, node)
} }
@ -350,7 +371,7 @@ public class TaskManager @Inject constructor(val args: Args,
} }
}) })
runBefore.forEach { runBefore(it, name) } runBefore.forEach { runBefore(it, name) }
runAfter.forEach { runBefore(name, it) } runAfter.forEach { runAfter(it, name) }
alwaysRunAfter.forEach { alwaysRunAfter(it, name)} alwaysRunAfter.forEach { alwaysRunAfter(it, name)}
} }

View file

@ -1,6 +1,7 @@
package com.beust.kobalt.internal package com.beust.kobalt.internal
import com.beust.kobalt.TestModule import com.beust.kobalt.TestModule
import com.beust.kobalt.misc.KobaltLogger
import com.google.common.collect.TreeMultimap import com.google.common.collect.TreeMultimap
import com.google.inject.Inject import com.google.inject.Inject
import org.testng.Assert import org.testng.Assert
@ -26,15 +27,19 @@ class TaskManagerTest @Inject constructor(val taskManager: TaskManager) {
private fun runTasks(tasks: List<String>) : List<String> { private fun runTasks(tasks: List<String>) : List<String> {
val runBefore = TreeMultimap.create<String, String>().apply { val runBefore = TreeMultimap.create<String, String>().apply {
put("assemble", "compile") put("assemble", "compile")
put("compile", "clean")
} }
val alwaysRunAfter = TreeMultimap.create<String, String>() val runAfter = TreeMultimap.create<String, String>().apply {
put("clean", "compile")
}
val alwaysRunAfter = TreeMultimap.create<String, String>().apply {
put("clean", "copyVersion")
}
val dependencies = TreeMultimap.create<String, String>().apply { val dependencies = TreeMultimap.create<String, String>().apply {
listOf("assemble", "compile", "clean").forEach { listOf("assemble", "compile", "clean").forEach {
put(it, it) put(it, it)
} }
} }
val graph = taskManager.createGraph("", tasks, dependencies, runBefore, alwaysRunAfter, val graph = taskManager.createGraph("", tasks, dependencies, runBefore, runAfter, alwaysRunAfter,
{ it }, { t -> true }) { it }, { t -> true })
val result = DryRunGraphExecutor(graph).run() val result = DryRunGraphExecutor(graph).run()
return result return result
@ -42,6 +47,9 @@ class TaskManagerTest @Inject constructor(val taskManager: TaskManager) {
@Test @Test
fun graphTest() { fun graphTest() {
KobaltLogger.LOG_LEVEL = 3
Assert.assertEquals(runTasks(listOf("clean")), listOf("clean", "copyVersion"))
Assert.assertEquals(runTasks(listOf("compile")), listOf("compile"))
Assert.assertEquals(runTasks(listOf("assemble")), listOf("compile", "assemble")) Assert.assertEquals(runTasks(listOf("assemble")), listOf("compile", "assemble"))
Assert.assertEquals(runTasks(listOf("clean", "assemble")), listOf("clean", "compile", "assemble")) Assert.assertEquals(runTasks(listOf("clean", "assemble")), listOf("clean", "compile", "assemble"))
} }