Skip to content

Commit dfaebcd

Browse files
authored
Test improvements (#3)
- Update some of the test assertions to ones that provide better error messages - Remove old comments - cache Gradle TestKit in GitHub Workflow - enable Gradle Scan in GitHub Workflow
1 parent 3a03ae1 commit dfaebcd

File tree

14 files changed

+129
-89
lines changed

14 files changed

+129
-89
lines changed

.github/workflows/gradle_task.yml

+11-1
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,20 @@ jobs:
4747
distribution: temurin
4848
java-version: 11
4949

50+
- name: Cache Gradle TestKit
51+
id: cache-gradle-testkit
52+
uses: actions/cache@v3
53+
with:
54+
path: |
55+
${{ runner.temp }}/.gradle-test-kit/caches
56+
key: gradle-testkit-${{ runner.os }}
57+
5058
- uses: gradle/gradle-build-action@v2
59+
env:
60+
GRADLE_TESTKIT_DIR: ${{ runner.temp }}/.gradle-test-kit/caches
5161
with:
5262
gradle-home-cache-cleanup: true
53-
arguments: ${{ inputs.gradle-task }}
63+
arguments: ${{ inputs.gradle-task }} --scan
5464

5565
- name: Upload build reports
5666
if: failure()

buildSrc/src/main/kotlin/buildsrc/conventions/kotlin-gradle-plugin-tests.gradle.kts

+9
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,12 @@ testing.suites {
3434
}
3535
}
3636
}
37+
38+
tasks.withType<Test>().configureEach {
39+
// Help speed up TestKit tests by re-using dependencies cache
40+
// https://docs.gradle.org/current/userguide/dependency_resolution.html#sub:shared-readonly-cache
41+
environment("GRADLE_RO_DEP_CACHE", gradle.gradleUserHomeDir.resolve("caches"))
42+
providers.environmentVariable("GRADLE_TESTKIT_DIR").orNull?.let {
43+
systemProperty("gradleTestKitDir", it)
44+
}
45+
}

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/AndroidLibraryTest.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import org.gradle.testkit.runner.TaskOutcome.SUCCESS
88
import org.junit.jupiter.api.Disabled
99
import org.junit.jupiter.api.Test
1010

11-
@Disabled("Leftovers after revert of #94")
11+
@Disabled("Leftovers after revert of https://github.com/Kotlin/binary-compatibility-validator/issues/94")
1212
internal class AndroidLibraryTest : BaseKotlinGradleTest() {
1313

1414
// region Kotlin Android Library
@@ -25,7 +25,7 @@ internal class AndroidLibraryTest : BaseKotlinGradleTest() {
2525
}
2626

2727
runner.build {
28-
task(":kotlin-library:apiDump") shouldHaveOutcome SUCCESS
28+
shouldHaveRunTask(":kotlin-library:apiDump", SUCCESS)
2929
}
3030
}
3131

@@ -38,7 +38,7 @@ internal class AndroidLibraryTest : BaseKotlinGradleTest() {
3838
arguments.add(":kotlin-library:apiCheck")
3939
}
4040
}.build {
41-
task(":kotlin-library:apiCheck") shouldHaveOutcome SUCCESS
41+
shouldHaveRunTask(":kotlin-library:apiCheck", SUCCESS)
4242
}
4343
}
4444

@@ -58,7 +58,7 @@ internal class AndroidLibraryTest : BaseKotlinGradleTest() {
5858
}
5959

6060
runner.build {
61-
task(":java-library:apiDump") shouldHaveOutcome SUCCESS
61+
shouldHaveRunTask(":java-library:apiDump", SUCCESS)
6262
}
6363
}
6464

@@ -71,7 +71,7 @@ internal class AndroidLibraryTest : BaseKotlinGradleTest() {
7171
arguments.add(":java-library:apiCheck")
7272
}
7373
}.build {
74-
task(":java-library:apiCheck") shouldHaveOutcome SUCCESS
74+
shouldHaveRunTask(":java-library:apiCheck", SUCCESS)
7575
}
7676
}
7777

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/DefaultConfigTests.kt

+11-11
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
2626

2727
runner.buildAndFail {
2828
output shouldContain "Please ensure that task ':apiDump' was executed"
29-
task(":apiCheck") shouldHaveOutcome FAILED
29+
shouldHaveRunTask(":apiCheck", FAILED)
3030
}
3131
}
3232

@@ -43,7 +43,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
4343
}
4444

4545
runner.buildAndFail {
46-
task(":apiCheck") shouldHaveOutcome FAILED
46+
shouldHaveRunTask(":apiCheck", FAILED)
4747
shouldNotHaveRunTask(":check") // apiCheck fails before we can run check
4848
}
4949
}
@@ -63,7 +63,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
6363
}
6464

6565
runner.build {
66-
task(":apiCheck") shouldHaveOutcome SUCCESS
66+
shouldHaveRunTask(":apiCheck", SUCCESS)
6767
}
6868
}
6969

@@ -86,7 +86,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
8686
}
8787

8888
runner.build {
89-
task(":apiCheck") shouldHaveOutcome SUCCESS
89+
shouldHaveRunTask(":apiCheck", SUCCESS)
9090
}
9191
}
9292

@@ -109,7 +109,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
109109
}
110110

111111
runner.build {
112-
task(":apiCheck") shouldHaveOutcome SUCCESS
112+
shouldHaveRunTask(":apiCheck", SUCCESS)
113113
}
114114
}
115115

@@ -132,7 +132,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
132132
}
133133

134134
runner.buildAndFail {
135-
task(":apiCheck") shouldHaveOutcome FAILED
135+
shouldHaveRunTask(":apiCheck", FAILED)
136136

137137
// note that tabs are used as function indents!
138138
val dumpOutput = /*language=TEXT*/ """
@@ -160,7 +160,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
160160
}
161161

162162
runner.build {
163-
task(":apiDump") shouldHaveOutcome SUCCESS
163+
shouldHaveRunTask(":apiDump", SUCCESS)
164164

165165
assertTrue(
166166
rootProjectApiDump.exists(),
@@ -187,7 +187,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
187187
}
188188

189189
runner.build {
190-
task(":apiDump") shouldHaveOutcome SUCCESS
190+
shouldHaveRunTask(":apiDump", SUCCESS)
191191

192192
val apiDumpFile = rootProjectDir.resolve("api/testproject.api")
193193
assertTrue(apiDumpFile.exists(), "api dump file ${apiDumpFile.path} should exist")
@@ -217,7 +217,7 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
217217
}
218218

219219
runner.build {
220-
task(":apiDump") shouldHaveOutcome SUCCESS
220+
shouldHaveRunTask(":apiDump", SUCCESS)
221221

222222
assertTrue(rootProjectApiDump.exists(), "api dump file should exist")
223223

@@ -242,8 +242,8 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() {
242242
}
243243

244244
runner.build {
245-
task(":check") shouldHaveOutcome SUCCESS
246-
task(":apiCheck") shouldHaveOutcome SUCCESS
245+
shouldHaveRunTask(":check", SUCCESS)
246+
shouldHaveRunTask(":apiCheck", SUCCESS)
247247
}
248248
}
249249
}

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/IgnoredClassesTests.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package kotlinx.validation.test
22

33
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.api.*
44
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.build
5-
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.shouldHaveOutcome
5+
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.shouldHaveRunTask
66
import io.kotest.matchers.comparables.shouldBeEqualComparingTo
77
import org.gradle.testkit.runner.TaskOutcome.SUCCESS
88
import org.junit.jupiter.api.Assertions.assertTrue
@@ -30,7 +30,7 @@ internal class IgnoredClassesTests : BaseKotlinGradleTest() {
3030
}
3131

3232
runner.build {
33-
task(":apiCheck") shouldHaveOutcome SUCCESS
33+
shouldHaveRunTask(":apiCheck", SUCCESS)
3434
}
3535
}
3636

@@ -54,7 +54,7 @@ internal class IgnoredClassesTests : BaseKotlinGradleTest() {
5454
}
5555

5656
runner.build {
57-
task(":apiCheck") shouldHaveOutcome SUCCESS
57+
shouldHaveRunTask(":apiCheck", SUCCESS)
5858
}
5959
}
6060

@@ -78,7 +78,7 @@ internal class IgnoredClassesTests : BaseKotlinGradleTest() {
7878
}
7979

8080
runner.build {
81-
task(":apiDump") shouldHaveOutcome SUCCESS
81+
shouldHaveRunTask(":apiDump", SUCCESS)
8282

8383
assertTrue(rootProjectApiDump.exists(), "api dump file should exist")
8484

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/InputJarTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package kotlinx.validation.test
22

33
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.api.*
44
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.build
5-
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.shouldHaveOutcome
5+
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.shouldHaveRunTask
66
import org.gradle.testkit.runner.TaskOutcome.SUCCESS
77
import org.junit.jupiter.api.Test
88

@@ -30,8 +30,8 @@ class InputJarTest : BaseKotlinGradleTest() {
3030
}
3131

3232
runner.build {
33-
task(":jar") shouldHaveOutcome SUCCESS
34-
task(":apiCheck") shouldHaveOutcome SUCCESS
33+
shouldHaveRunTask(":jar", SUCCESS)
34+
shouldHaveRunTask(":apiCheck", SUCCESS)
3535
}
3636
}
3737
}

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/JavaTestFixturesTest.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class JavaTestFixturesTest : FunSpec({
2222
test("expect :apiDump task passes") {
2323
project.runner.withArguments("apiDump").build {
2424
withClue(output) {
25-
task(":apiDump") shouldHaveOutcome SUCCESS
25+
shouldHaveRunTask(":apiDump", SUCCESS)
2626
}
2727
}
2828
}
@@ -36,7 +36,7 @@ class JavaTestFixturesTest : FunSpec({
3636
)
3737
.build {
3838
withClue(output) {
39-
task(":apiCheck") shouldHaveOutcome SUCCESS
39+
shouldHaveRunTask(":apiCheck", SUCCESS)
4040
}
4141
}
4242
}
@@ -74,7 +74,7 @@ class JavaTestFixturesTest : FunSpec({
7474
test("expect :apiDump task passes") {
7575
project.runner.withArguments("apiDump").build {
7676
withClue(output) {
77-
task(":apiDump") shouldHaveOutcome SUCCESS
77+
shouldHaveRunTask(":apiDump", SUCCESS)
7878
}
7979
}
8080
}
@@ -88,7 +88,7 @@ class JavaTestFixturesTest : FunSpec({
8888
)
8989
.build {
9090
withClue(output) {
91-
task(":apiCheck") shouldHaveOutcome SUCCESS
91+
shouldHaveRunTask(":apiCheck", SUCCESS)
9292
}
9393
}
9494
}

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/MultiPlatformSingleJvmTargetTest.kt

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package kotlinx.validation.test
33
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.*
44
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.api.*
55
import io.kotest.assertions.withClue
6-
import io.kotest.matchers.comparables.shouldBeEqualComparingTo
6+
import io.kotest.matchers.file.shouldBeAFile
7+
import io.kotest.matchers.shouldBe
78
import io.kotest.matchers.string.shouldContain
89
import java.io.File
910
import org.gradle.testkit.runner.TaskOutcome.FAILED
@@ -46,7 +47,7 @@ internal class MultiPlatformSingleJvmTargetTest : BaseKotlinGradleTest() {
4647
}
4748

4849
runner.build {
49-
task(":apiCheck") shouldHaveOutcome SUCCESS
50+
shouldHaveRunTask(":apiCheck", SUCCESS)
5051
}
5152
}
5253

@@ -119,7 +120,7 @@ internal class MultiPlatformSingleJvmTargetTest : BaseKotlinGradleTest() {
119120
}
120121

121122
runner.build {
122-
task(":apiDump") shouldHaveOutcome SUCCESS
123+
shouldHaveRunTask(":apiDump", SUCCESS)
123124

124125
val mainExpectedApi = """
125126
|${readResourceFile("/examples/classes/Subsub1Class.dump").trim()}
@@ -129,9 +130,8 @@ internal class MultiPlatformSingleJvmTargetTest : BaseKotlinGradleTest() {
129130
|
130131
""".trimMargin()
131132

132-
val actual = jvmApiDump.readText().invariantNewlines()
133-
134-
actual.shouldBeEqualComparingTo(mainExpectedApi)
133+
jvmApiDump.shouldBeAFile()
134+
jvmApiDump.readText().invariantNewlines() shouldBe mainExpectedApi
135135
}
136136
}
137137

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/MultipleJvmTargetsTest.kt

+12-13
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ internal class MultipleJvmTargetsTest : BaseKotlinGradleTest() {
5353
}
5454

5555
runner.build {
56-
task(":apiCheck") shouldHaveOutcome SUCCESS
56+
shouldHaveRunTask(":apiCheck", SUCCESS)
5757
}
5858
}
5959

@@ -92,7 +92,7 @@ internal class MultipleJvmTargetsTest : BaseKotlinGradleTest() {
9292

9393
runner.buildAndFail {
9494
withClue(output) {
95-
shouldHaveRunTask(":apiCheck") shouldHaveOutcome FAILED
95+
shouldHaveRunTask(":apiCheck", FAILED)
9696
output shouldContain "API check failed for project :testproject"
9797
shouldNotHaveRunTask(":check")
9898
}
@@ -118,22 +118,21 @@ internal class MultipleJvmTargetsTest : BaseKotlinGradleTest() {
118118

119119
}
120120
runner.build {
121-
task(":apiDump") shouldHaveOutcome SUCCESS
122-
123-
System.err.println(output)
121+
withClue(output) {
122+
shouldHaveRunTask(":apiDump", SUCCESS)
124123

125-
val anotherExpectedApi = readResourceFile("/examples/classes/Subsub1Class.dump")
126-
anotherApiDump.shouldBeAFile()
127-
anotherApiDump.readText().invariantNewlines().shouldBe(anotherExpectedApi)
124+
val anotherExpectedApi = readResourceFile("/examples/classes/Subsub1Class.dump")
125+
anotherApiDump.shouldBeAFile()
126+
anotherApiDump.readText().invariantNewlines() shouldBe anotherExpectedApi
128127

129-
val mainExpectedApi =
130-
anotherExpectedApi + readResourceFile("/examples/classes/Subsub2Class.dump")
131-
jvmApiDump.shouldBeAFile()
132-
jvmApiDump.readText().invariantNewlines().shouldBe(mainExpectedApi)
128+
val mainExpectedApi =
129+
anotherExpectedApi + readResourceFile("/examples/classes/Subsub2Class.dump")
130+
jvmApiDump.shouldBeAFile()
131+
jvmApiDump.readText().invariantNewlines() shouldBe mainExpectedApi
132+
}
133133
}
134134
}
135135

136136
private val jvmApiDump: File get() = rootProjectDir.resolve("api/jvm/testproject.api")
137137
private val anotherApiDump: File get() = rootProjectDir.resolve("api/anotherJvm/testproject.api")
138-
139138
}

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/NonPublicMarkersTest.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package kotlinx.validation.test
33
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.api.*
44
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.build
55
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.shouldHaveOutcome
6+
import dev.adamko.kotlin.binary_compatibility_validator.test.utils.shouldHaveTaskWithOutcome
67
import org.gradle.testkit.runner.TaskOutcome.SUCCESS
78
import org.junit.jupiter.api.Test
89

@@ -30,7 +31,7 @@ class NonPublicMarkersTest : BaseKotlinGradleTest() {
3031
}
3132

3233
runner.build {
33-
task(":apiCheck") shouldHaveOutcome SUCCESS
34+
shouldHaveTaskWithOutcome(":apiCheck", SUCCESS)
3435
}
3536
}
3637
}

modules/bcv-gradle-plugin-functional-tests/src/functionalTest/kotlin/kotlinx/validation/test/SettingsPluginDslTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import io.kotest.matchers.paths.shouldExist
99
import io.kotest.matchers.shouldBe
1010
import io.kotest.matchers.string.shouldContain
1111
import kotlin.io.path.readText
12-
import org.gradle.testkit.runner.TaskOutcome
12+
import org.gradle.testkit.runner.TaskOutcome.SUCCESS
1313
import org.intellij.lang.annotations.Language
1414

1515
internal class SettingsPluginDslTest : FunSpec({
@@ -71,8 +71,8 @@ internal class SettingsPluginDslTest : FunSpec({
7171
shouldNotHaveRunTask(":apiDump")
7272
}
7373

74-
task(":sub1:apiDump") shouldHaveOutcome TaskOutcome.SUCCESS
75-
task(":sub2:apiDump") shouldHaveOutcome TaskOutcome.SUCCESS
74+
shouldHaveRunTask(":sub1:apiDump", SUCCESS)
75+
shouldHaveRunTask(":sub2:apiDump", SUCCESS)
7676
}
7777

7878
testCase.project.projectDir.resolve("sub1/api/sub1.api").asClue { apiDump ->

0 commit comments

Comments
 (0)