@@ -20,10 +20,7 @@ import assertk.assertThat
20
20
import assertk.assertions.containsExactlyInAnyOrder
21
21
import assertk.assertions.isEqualTo
22
22
import assertk.assertions.isFalse
23
- import assertk.assertions.isIn
24
23
import java.io.File
25
- import org.gradle.testkit.runner.GradleRunner
26
- import org.gradle.testkit.runner.TaskOutcome
27
24
import org.jetbrains.kotlin.konan.target.HostManager
28
25
import org.jetbrains.kotlin.konan.target.presetName
29
26
import org.junit.Test
@@ -61,19 +58,16 @@ class BurstGradlePluginTest {
61
58
platformName : String ,
62
59
checkKlibMetadata : Boolean = false,
63
60
) {
64
- val projectDir = File ( " src/test/projects/ multiplatform" )
61
+ val tester = GradleTester ( " multiplatform" )
65
62
66
63
val taskName = " :lib:$testTaskName "
67
- val result = createRunner(projectDir, " clean" , taskName).build()
68
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
69
-
70
- val testResults = projectDir.resolve(" lib/build/test-results" )
64
+ tester.cleanAndBuild(taskName)
71
65
72
66
// There's no default specialization.
73
- assertThat(testResults.resolve( " $testTaskName /TEST- CoffeeTest.xml " ).exists( )).isFalse()
67
+ assertThat(tester.hasTestSuite( " CoffeeTest" , testTaskName )).isFalse()
74
68
75
69
// Each test class is executed normally with nothing skipped.
76
- with (readTestSuite(testResults.resolve( " $testTaskName /TEST- CoffeeTest_Regular.xml " ) )) {
70
+ with (tester. readTestSuite(" CoffeeTest_Regular" , testTaskName )) {
77
71
assertThat(testCases.map { it.name }).containsExactlyInAnyOrder(
78
72
" test_Milk[$platformName ]" ,
79
73
" test_None[$platformName ]" ,
@@ -86,7 +80,7 @@ class BurstGradlePluginTest {
86
80
87
81
if (checkKlibMetadata) {
88
82
val klib = readKlib(
89
- projectDir .resolve(" lib/build/classes/kotlin/$platformName /test/klib/lib_test" ),
83
+ File ( " src/test/projects/multiplatform " ) .resolve(" lib/build/classes/kotlin/$platformName /test/klib/lib_test" ),
90
84
)
91
85
val klibMetadata = klib.moduleMetadata()
92
86
val coffeeTestMetadata = klibMetadata.classes.first { it.name == " CoffeeTest" }
@@ -102,16 +96,12 @@ class BurstGradlePluginTest {
102
96
103
97
@Test
104
98
fun functionParameters () {
105
- val projectDir = File ( " src/test/projects/ functionParameters" )
99
+ val tester = GradleTester ( " functionParameters" )
106
100
107
101
val taskName = " :lib:test"
108
- val result = createRunner(projectDir, " clean" , taskName).build()
109
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
110
-
111
- val testResults = projectDir.resolve(" lib/build/test-results" )
112
- val testXmlFile = testResults.resolve(" test/TEST-CoffeeTest.xml" )
102
+ tester.cleanAndBuild(taskName)
113
103
114
- val testSuite = readTestSuite(testXmlFile )
104
+ val testSuite = tester. readTestSuite(" CoffeeTest " )
115
105
116
106
assertThat(testSuite.testCases.map { it.name }).containsExactlyInAnyOrder(
117
107
" test_Decaf_Milk" ,
@@ -131,16 +121,11 @@ class BurstGradlePluginTest {
131
121
132
122
@Test
133
123
fun abstractClasses () {
134
- val projectDir = File ( " src/test/projects/ abstractClasses" )
124
+ val tester = GradleTester ( " abstractClasses" )
135
125
136
- val taskName = " :lib:test"
137
- val result = createRunner(projectDir, " clean" , taskName).build()
138
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
126
+ tester.cleanAndBuild(" :lib:test" )
139
127
140
- val testResults = projectDir.resolve(" lib/build/test-results" )
141
- val testXmlFile = testResults.resolve(" test/TEST-CoffeeTest.xml" )
142
-
143
- val testSuite = readTestSuite(testXmlFile)
128
+ val testSuite = tester.readTestSuite(" CoffeeTest" )
144
129
145
130
assertThat(testSuite.testCases.map { it.name }).containsExactlyInAnyOrder(
146
131
" test_Milk" ,
@@ -151,18 +136,14 @@ class BurstGradlePluginTest {
151
136
152
137
@Test
153
138
fun classParameters () {
154
- val projectDir = File (" src/test/projects/classParameters" )
155
-
156
- val taskName = " :lib:test"
157
- val result = createRunner(projectDir, " clean" , taskName).build()
158
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
139
+ val tester = GradleTester (" classParameters" )
159
140
160
- val testResults = projectDir.resolve( " lib/build/ test-results " )
141
+ tester.cleanAndBuild( " : lib: test" )
161
142
162
143
// There's no default specialization.
163
- assertThat(testResults.resolve( " test/TEST- CoffeeTest.xml " ).exists( )).isFalse()
144
+ assertThat(tester.hasTestSuite( " CoffeeTest" )).isFalse()
164
145
165
- val sampleTest = readTestSuite(testResults.resolve( " test/TEST- CoffeeTest_Regular_Milk.xml " ) )
146
+ val sampleTest = tester. readTestSuite(" CoffeeTest_Regular_Milk" )
166
147
val sampleTestTest = sampleTest.testCases.single()
167
148
assertThat(sampleTestTest.name).isEqualTo(" test" )
168
149
assertThat(sampleTestTest.skipped).isFalse()
@@ -177,26 +158,18 @@ class BurstGradlePluginTest {
177
158
178
159
@Test
179
160
fun android () {
180
- val projectDir = File (" src/test/projects/android" )
181
-
182
- val testTaskName = " :lib:test"
183
- val androidTestTaskName = " :lib:assembleAndroidTest"
184
- val result = createRunner(projectDir, " clean" , testTaskName, androidTestTaskName).build()
185
- assertThat(result.task(testTaskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
186
- assertThat(result.task(androidTestTaskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
161
+ val tester = GradleTester (" android" )
162
+ tester.cleanAndBuild(" :lib:test" , " :lib:assembleAndroidTest" )
187
163
}
188
164
189
165
@Test
190
166
fun defaultArguments () {
191
- val projectDir = File (" src/test/projects/defaultArguments" )
192
-
193
- val result = createRunner(projectDir, " clean" , " :lib:test" ).build()
194
- assertThat(result.task(" :lib:test" )!! .outcome).isIn(* SUCCESS_OUTCOMES )
167
+ val tester = GradleTester (" defaultArguments" )
195
168
196
- val testResults = projectDir.resolve( " lib/build/ test-results " )
169
+ tester.cleanAndBuild( " : lib: test" )
197
170
198
171
// The original test class runs the default specialization.
199
- with (readTestSuite(testResults.resolve( " test/TEST- CoffeeTest.xml " ) )) {
172
+ with (tester. readTestSuite(" CoffeeTest" )) {
200
173
assertThat(testCases.map { it.name }).containsExactlyInAnyOrder(
201
174
" test" ,
202
175
" test_None" ,
@@ -211,10 +184,10 @@ class BurstGradlePluginTest {
211
184
}
212
185
213
186
// No subclass is generated for the default specialization.
214
- assertThat(testResults.resolve( " test/TEST- CoffeeTest_Regular.xml " ).exists( )).isFalse()
187
+ assertThat(tester.hasTestSuite( " CoffeeTest_Regular" )).isFalse()
215
188
216
189
// Another test class is executed normally with nothing skipped.
217
- with (readTestSuite(testResults.resolve( " test/TEST- CoffeeTest_Double.xml " ) )) {
190
+ with (tester. readTestSuite(" CoffeeTest_Double" )) {
218
191
assertThat(testCases.map { it.name }).containsExactlyInAnyOrder(
219
192
" test" ,
220
193
" test_None" ,
@@ -231,15 +204,11 @@ class BurstGradlePluginTest {
231
204
232
205
@Test
233
206
fun burstValues () {
234
- val projectDir = File (" src/test/projects/burstValues" )
235
-
236
- val taskName = " :lib:test"
237
- val result = createRunner(projectDir, " clean" , taskName).build()
238
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
207
+ val tester = GradleTester (" burstValues" )
239
208
240
- val testResults = projectDir.resolve( " lib/build/ test-results " )
209
+ tester.cleanAndBuild( " : lib: test" )
241
210
242
- with (readTestSuite(testResults.resolve( " test/TEST- CoffeeTest.xml " ) )) {
211
+ with (tester. readTestSuite(" CoffeeTest" )) {
243
212
assertThat(testCases.map { it.name }).containsExactlyInAnyOrder(
244
213
" test" ,
245
214
" test_12" ,
@@ -258,7 +227,7 @@ class BurstGradlePluginTest {
258
227
)
259
228
}
260
229
261
- with (readTestSuite(testResults.resolve( " test/TEST- CoffeeTest_Regular.xml " ) )) {
230
+ with (tester. readTestSuite(" CoffeeTest_Regular" )) {
262
231
assertThat(testCases.map { it.name }).containsExactlyInAnyOrder(
263
232
" test" ,
264
233
" test_12" ,
@@ -280,15 +249,11 @@ class BurstGradlePluginTest {
280
249
281
250
@Test
282
251
fun junit5 () {
283
- val projectDir = File ( " src/test/projects/ junit5" )
252
+ val tester = GradleTester ( " junit5" )
284
253
285
- val taskName = " :lib:test"
286
- val result = createRunner(projectDir, " clean" , taskName).build()
287
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
288
-
289
- val testResults = projectDir.resolve(" lib/build/test-results" )
254
+ tester.cleanAndBuild(" :lib:test" )
290
255
291
- with (readTestSuite(testResults.resolve( " test/TEST- CoffeeTest_Regular.xml " ) )) {
256
+ with (tester. readTestSuite(" CoffeeTest_Regular" )) {
292
257
assertThat(testCases.map { it.name }).containsExactlyInAnyOrder(
293
258
" kotlinTestTest_Milk()" ,
294
259
" kotlinTestTest_None()" ,
@@ -306,14 +271,11 @@ class BurstGradlePluginTest {
306
271
/* * https://github.com/cashapp/burst/issues/90 */
307
272
@Test
308
273
fun subclass () {
309
- val projectDir = File ( " src/test/projects/ subclass" )
274
+ val tester = GradleTester ( " subclass" )
310
275
311
- val taskName = " :lib:test"
312
- val result = createRunner(projectDir, " clean" , taskName).build()
313
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
276
+ tester.cleanAndBuild(" :lib:test" )
314
277
315
- val testResults = projectDir.resolve(" lib/build/test-results" )
316
- with (readTestSuite(testResults.resolve(" test/TEST-CoffeeTest.xml" ))) {
278
+ with (tester.readTestSuite(" CoffeeTest" )) {
317
279
assertThat(testCases.map { it.name }).containsExactlyInAnyOrder(
318
280
" hasFakeOverride" ,
319
281
" hasFakeOverride_Oat" ,
@@ -331,18 +293,14 @@ class BurstGradlePluginTest {
331
293
332
294
@Test
333
295
fun valueClassConstructor () {
334
- val projectDir = File (" src/test/projects/valueClassConstructor" )
335
-
336
- val taskName = " :lib:test"
337
- val result = createRunner(projectDir, " clean" , taskName).build()
338
- assertThat(result.task(taskName)!! .outcome).isIn(* SUCCESS_OUTCOMES )
296
+ val tester = GradleTester (" valueClassConstructor" )
339
297
340
- val testResults = projectDir.resolve( " lib/build/ test-results " )
298
+ tester.cleanAndBuild( " : lib: test" )
341
299
342
300
// There's no default specialization.
343
- assertThat(testResults.resolve( " test/TEST- CoffeeTest.xml " ).exists( )).isFalse()
301
+ assertThat(tester.hasTestSuite( " CoffeeTest" )).isFalse()
344
302
345
- val sampleTest = readTestSuite(testResults.resolve( " test/TEST- CoffeeTest_Decaf.xml " ) )
303
+ val sampleTest = tester. readTestSuite(" CoffeeTest_Decaf" )
346
304
val sampleTestTest = sampleTest.testCases.single()
347
305
assertThat(sampleTestTest.name).isEqualTo(" test" )
348
306
assertThat(sampleTestTest.skipped).isFalse()
@@ -353,24 +311,4 @@ class BurstGradlePluginTest {
353
311
""" .trimMargin(),
354
312
)
355
313
}
356
-
357
- private fun createRunner (
358
- projectDir : File ,
359
- vararg taskNames : String ,
360
- ): GradleRunner {
361
- val gradleRoot = projectDir.resolve(" gradle" ).also { it.mkdir() }
362
- File (" ../gradle/wrapper" ).copyRecursively(gradleRoot.resolve(" wrapper" ), true )
363
- File (projectDir, " kotlin-js-store/yarn.lock" ).delete()
364
- val arguments = arrayOf(" --info" , " --stacktrace" , " --continue" )
365
- return GradleRunner .create()
366
- .withProjectDir(projectDir)
367
- .withDebug(true ) // Run in-process.
368
- .withArguments(* arguments, * taskNames, versionProperty)
369
- .forwardOutput()
370
- }
371
-
372
- companion object {
373
- val SUCCESS_OUTCOMES = arrayOf(TaskOutcome .SUCCESS , TaskOutcome .UP_TO_DATE )
374
- val versionProperty = " -PburstVersion=${System .getProperty(" burstVersion" )} "
375
- }
376
314
}
0 commit comments