From 5fcffb02412eaf77d78bc0ac6aae47ff2867feb9 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Tue, 7 Jun 2016 01:16:59 -0800 Subject: [PATCH] Test for build order. --- .../com/beust/kobalt/internal/TaskManager.kt | 4 +- .../beust/kobalt/internal/BuildOrderTest.kt | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt index 182eb26d..668b3494 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/internal/TaskManager.kt @@ -91,7 +91,7 @@ class TaskManager @Inject constructor(val args: Args, * Determine which projects to run based on the request tasks. Also make sure that all the requested projects * exist. */ - private fun findProjectsToRun(taskInfos: List, projects: List) : List { + fun findProjectsToRun(taskInfos: List, projects: List) : List { // Validate projects val result = arrayListOf() @@ -180,7 +180,7 @@ class TaskManager @Inject constructor(val args: Args, * see if that project depends on others and if it does, invoke these tasks on all of them. This * function returns all these task names (including dependent). */ - private fun calculateDependentTaskNames(taskNames: List, projects: List): List { + fun calculateDependentTaskNames(taskNames: List, projects: List): List { val projectMap = hashMapOf().apply { projects.forEach { put(it.name, it)} } diff --git a/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt new file mode 100644 index 00000000..dabdb163 --- /dev/null +++ b/src/test/kotlin/com/beust/kobalt/internal/BuildOrderTest.kt @@ -0,0 +1,41 @@ +package com.beust.kobalt.internal + +import com.beust.kobalt.TestModule +import com.beust.kobalt.api.Kobalt +import com.beust.kobalt.project +import org.testng.Assert +import org.testng.annotations.BeforeClass +import org.testng.annotations.DataProvider +import org.testng.annotations.Guice +import org.testng.annotations.Test +import javax.inject.Inject + +@Guice(modules = arrayOf(TestModule::class)) +class BuildOrderTest @Inject constructor(val taskManager: TaskManager) { + @BeforeClass + fun beforeClass() { + Kobalt.init(TestModule()) + } + + @DataProvider + fun tasks(): Array> { + return arrayOf( + arrayOf(listOf("p1:assemble"), listOf("p1:assemble")), + arrayOf(listOf("p2:assemble"), listOf("p1:assemble", "p2:assemble")), + arrayOf(listOf("p3:assemble"), listOf("p1:assemble", "p2:assemble", "p3:assemble")) + ) + } + + @Test(dataProvider = "tasks") + fun shouldBuildInRightOrder(tasks: List, expectedTasks: List) { + val p1 = project { name = "p1" } + val p2 = project(p1) { name = "p2" } + val p3 = project(p2) { name = "p3" } + + val allProjects = listOf(p1, p2, p3) + with(taskManager) { + val taskInfos = calculateDependentTaskNames(tasks, allProjects) + Assert.assertEquals(taskInfos.map { it.id }, expectedTasks) + } + } +}