From 32e05b4631dc48789bfc4fa5fabe35323423a3f4 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Thu, 9 Mar 2023 16:46:22 +0100 Subject: [PATCH] [Gradle] Add tests for KotlinPluginLifecycle.Stage utils ^KT-34662 Verification Pending --- .../gradle/plugin/KotlinPluginLifecycle.kt | 4 ++- .../unitTests/KotlinPluginLifecycleTest.kt | 26 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginLifecycle.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginLifecycle.kt index ed5f4399720..89fe02aabb2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginLifecycle.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginLifecycle.kt @@ -305,9 +305,11 @@ internal interface KotlinPluginLifecycle { val previousOrNull: Stage? get() = values.getOrNull(ordinal - 1) val nextOrNull: Stage? get() = values.getOrNull(ordinal + 1) val nextOrLast: Stage get() = nextOrNull ?: values.last() - val nextOrThrow: Stage get() = values[ordinal + 1] + val nextOrThrow: Stage + get() = nextOrNull ?: throw IllegalArgumentException("'$this' does not have a next ${Stage::class.simpleName}") operator fun rangeTo(other: Stage): Set { + if (this.ordinal > other.ordinal) return emptySet() return values.subList(this.ordinal, other.ordinal + 1).toSet() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt index c9432f5b75d..c9be66a81f6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinPluginLifecycleTest.kt @@ -349,4 +349,30 @@ class KotlinPluginLifecycleTest { } } } + + @Test + fun `test - Stage - previous next utils`() { + assertNull(Stage.values.first().previousOrNull) + assertEquals(Stage.values.first(), Stage.values.first().previousOrFirst) + + assertNull(Stage.values.last().nextOrNull) + assertEquals(Stage.values.last(), Stage.values.last().nextOrLast) + + assertFailsWith { Stage.values.last().nextOrThrow } + } + + @Test + fun `test - Stage - range utils`() { + assertEquals(setOf(BeforeFinaliseDsl, FinaliseDsl, AfterFinaliseDsl), BeforeFinaliseDsl..AfterFinaliseDsl) + assertEquals(emptySet(), AfterFinaliseDsl..BeforeFinaliseDsl) + assertEquals(setOf(BeforeFinaliseDsl), BeforeFinaliseDsl..BeforeFinaliseDsl) + + assertTrue(FinaliseDsl in Stage.upTo(FinaliseDsl)) + assertTrue(Stage.values.first() in Stage.upTo(FinaliseDsl)) + assertTrue(BeforeFinaliseDsl in Stage.upTo(FinaliseDsl)) + assertTrue(FinaliseDsl.nextOrThrow !in Stage.upTo(FinaliseDsl)) + + assertTrue(FinaliseDsl !in Stage.until(FinaliseDsl)) + assertTrue(FinaliseDsl.previousOrFirst in Stage.until(FinaliseDsl)) + } } \ No newline at end of file