Skip to content

Commit c232e71

Browse files
authored
Complete tests for kotest functions (#45)
1 parent 126c4d8 commit c232e71

File tree

3 files changed

+332
-207
lines changed

3 files changed

+332
-207
lines changed

build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
1919

2020
plugins {
2121
id("com.github.ben-manes.versions") version "0.28.0"
22-
id("io.gitlab.arturbosch.detekt") version "1.9.0"
22+
id("io.gitlab.arturbosch.detekt") version "1.9.1"
2323
id("com.appmattus.markdown") version "0.6.0"
2424
}
2525

@@ -67,7 +67,7 @@ tasks.withType(DependencyUpdatesTask::class.java).all {
6767
}
6868

6969
dependencies {
70-
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.9.0")
70+
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.9.1")
7171
}
7272

7373
detekt {

fixture-kotest/src/test/kotlin/com/appmattus/kotlinfixture/kotest/CheckAllExtTest.kt

Lines changed: 165 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -16,139 +16,203 @@
1616

1717
package com.appmattus.kotlinfixture.kotest
1818

19+
import com.appmattus.kotlinfixture.Fixture
1920
import com.appmattus.kotlinfixture.kotlinFixture
21+
import io.kotest.property.PropTestConfig
2022
import io.kotest.property.PropertyTesting
2123
import kotlinx.coroutines.runBlocking
24+
import org.junit.runner.RunWith
25+
import org.junit.runners.Parameterized
2226
import kotlin.test.Test
2327
import kotlin.test.assertEquals
2428
import kotlin.test.assertFailsWith
2529
import kotlin.test.fail
2630

31+
@RunWith(Parameterized::class)
2732
class CheckAllExtTest {
28-
private val fixture = kotlinFixture()
2933

30-
@Test
31-
fun `one param generates all random values`() = runBlocking {
32-
val generatedData = mutableSetOf<Person>()
33-
fixture.checkAll { person: Person ->
34-
generatedData.add(person)
35-
}
36-
37-
assertEquals(ITERATIONS, generatedData.size)
38-
}
39-
40-
@Test
41-
fun `one param succeeds when all values true`() {
42-
runBlocking {
43-
fixture.checkAll<Person> { }
44-
}
45-
}
46-
47-
@Test
48-
fun `one param throws when all values false`() {
49-
runBlocking {
50-
assertFailsWith<AssertionError> {
51-
fixture.checkAll<Person> { fail() }
52-
}
53-
}
54-
}
55-
56-
@Test
57-
fun `two param generates all random values`() {
58-
runBlocking {
59-
val generatedData = mutableSetOf<Person>()
60-
fixture.checkAll { person1: Person, person2: Person ->
61-
generatedData.add(person1)
62-
generatedData.add(person2)
63-
}
64-
65-
assertEquals(ITERATIONS * 2, generatedData.size)
66-
}
67-
}
68-
69-
@Test
70-
fun `two params succeeds when all values true`() {
71-
runBlocking {
72-
fixture.checkAll { _: Person, _: Person -> }
73-
}
74-
}
75-
76-
@Test
77-
fun `two params throws when all values false`() {
78-
runBlocking {
79-
assertFailsWith<AssertionError> {
80-
fixture.checkAll { _: Person, _: Person -> fail() }
81-
}
82-
}
83-
}
34+
@Parameterized.Parameter(0)
35+
lateinit var testCase: TestCase
8436

85-
@Test
86-
fun `three params succeeds when all values true`() {
87-
runBlocking {
88-
fixture.checkAll { _: Person, _: Person, _: Person -> }
89-
}
90-
}
37+
data class Person(val name: String, val age: Int)
9138

92-
@Test
93-
fun `three params throws when all values false`() {
94-
runBlocking {
95-
assertFailsWith<AssertionError> {
96-
fixture.checkAll { _: Person, _: Person, _: Person -> fail() }
97-
}
98-
}
99-
}
39+
data class TestCase(
40+
val expectedCount: Int,
41+
val block: suspend Fixture.(save: (person: List<Person>) -> Unit, result: () -> Unit) -> Unit
42+
)
10043

10144
@Test
102-
fun `four params succeeds when all values true`() {
45+
fun `param generates all random values`() {
10346
runBlocking {
104-
fixture.checkAll { _: Person, _: Person, _: Person, _: Person -> }
105-
}
106-
}
47+
val generatedValues = mutableSetOf<Person>()
10748

108-
@Test
109-
fun `four params throws when all values false`() {
110-
runBlocking {
111-
assertFailsWith<AssertionError> {
112-
fixture.checkAll { _: Person, _: Person, _: Person, _: Person -> fail() }
113-
}
114-
}
115-
}
116-
117-
@Test
118-
fun `five params succeeds when all values true`() {
119-
runBlocking {
120-
fixture.checkAll { _: Person, _: Person, _: Person, _: Person, _: Person -> }
121-
}
122-
}
49+
testCase.block(fixture, { generatedValues.addAll(it) }) { }
12350

124-
@Test
125-
fun `five params throws when all values false`() {
126-
runBlocking {
127-
assertFailsWith<AssertionError> {
128-
fixture.checkAll { _: Person, _: Person, _: Person, _: Person, _: Person -> fail() }
129-
}
51+
assertEquals(testCase.expectedCount, generatedValues.size)
13052
}
13153
}
13254

13355
@Test
134-
fun `six params succeeds when all values true`() {
56+
fun `param succeeds when all values true`() {
13557
runBlocking {
136-
fixture.checkAll { _: Person, _: Person, _: Person, _: Person, _: Person, _: Person -> }
58+
testCase.block(fixture, { }) { }
13759
}
13860
}
13961

14062
@Test
141-
fun `six params throws when all values false`() {
63+
fun `param throws when all values false`() {
14264
runBlocking {
14365
assertFailsWith<AssertionError> {
144-
fixture.checkAll { _: Person, _: Person, _: Person, _: Person, _: Person, _: Person -> fail() }
66+
testCase.block(fixture, { }) { fail() }
14567
}
14668
}
14769
}
14870

149-
data class Person(val name: String, val age: Int)
150-
15171
companion object {
152-
private val ITERATIONS = PropertyTesting.defaultIterationCount
72+
private const val ITERATIONS = 10
73+
private val fixture = kotlinFixture()
74+
75+
@JvmStatic
76+
@Parameterized.Parameters
77+
@Suppress("LongMethod")
78+
fun data(): Array<TestCase> = arrayOf(
79+
80+
// 1 parameter
81+
82+
TestCase(PropertyTesting.defaultIterationCount) { save, result ->
83+
checkAll<Person> { p1 -> save(listOf(p1)); result() }
84+
},
85+
86+
TestCase(ITERATIONS) { save, result ->
87+
checkAll<Person>(ITERATIONS) { p1 -> save(listOf(p1)); result() }
88+
},
89+
90+
TestCase(PropertyTesting.defaultIterationCount) { save, result ->
91+
checkAll<Person>(PropTestConfig()) { p1 -> save(listOf(p1)); result() }
92+
},
93+
94+
TestCase(ITERATIONS) { save, result ->
95+
checkAll<Person>(ITERATIONS, PropTestConfig()) { p1 -> save(listOf(p1)); result() }
96+
},
97+
98+
// 2 parameters
99+
100+
TestCase(PropertyTesting.defaultIterationCount * 2) { save, result ->
101+
checkAll<Person, Person> { p1, p2 -> save(listOf(p1, p2)); result() }
102+
},
103+
104+
TestCase(ITERATIONS * 2) { save, result ->
105+
checkAll<Person, Person>(ITERATIONS) { p1, p2 -> save(listOf(p1, p2)); result() }
106+
},
107+
108+
TestCase(PropertyTesting.defaultIterationCount * 2) { save, result ->
109+
checkAll<Person, Person>(PropTestConfig()) { p1, p2 -> save(listOf(p1, p2)); result() }
110+
},
111+
112+
TestCase(ITERATIONS * 2) { save, result ->
113+
checkAll<Person, Person>(ITERATIONS, PropTestConfig()) { p1, p2 -> save(listOf(p1, p2)); result() }
114+
},
115+
116+
// 3 parameters
117+
118+
TestCase(PropertyTesting.defaultIterationCount * 3) { save, result ->
119+
checkAll<Person, Person, Person> { p1, p2, p3 -> save(listOf(p1, p2, p3)); result() }
120+
},
121+
122+
TestCase(ITERATIONS * 3) { save, result ->
123+
checkAll<Person, Person, Person>(ITERATIONS) { p1, p2, p3 -> save(listOf(p1, p2, p3)); result() }
124+
},
125+
126+
TestCase(PropertyTesting.defaultIterationCount * 3) { save, result ->
127+
checkAll<Person, Person, Person>(PropTestConfig()) { p1, p2, p3 ->
128+
save(listOf(p1, p2, p3)); result()
129+
}
130+
},
131+
132+
TestCase(ITERATIONS * 3) { save, result ->
133+
checkAll<Person, Person, Person>(ITERATIONS, PropTestConfig()) { p1, p2, p3 ->
134+
save(listOf(p1, p2, p3)); result()
135+
}
136+
},
137+
138+
// 4 parameters
139+
140+
TestCase(PropertyTesting.defaultIterationCount * 4) { save, result ->
141+
checkAll<Person, Person, Person, Person> { p1, p2, p3, p4 -> save(listOf(p1, p2, p3, p4)); result() }
142+
},
143+
144+
TestCase(ITERATIONS * 4) { save, result ->
145+
checkAll<Person, Person, Person, Person>(ITERATIONS) { p1, p2, p3, p4 ->
146+
save(listOf(p1, p2, p3, p4)); result()
147+
}
148+
},
149+
150+
TestCase(PropertyTesting.defaultIterationCount * 4) { save, result ->
151+
checkAll<Person, Person, Person, Person>(PropTestConfig()) { p1, p2, p3, p4 ->
152+
save(listOf(p1, p2, p3, p4)); result()
153+
}
154+
},
155+
156+
TestCase(ITERATIONS * 4) { save, result ->
157+
checkAll<Person, Person, Person, Person>(ITERATIONS, PropTestConfig()) { p1, p2, p3, p4 ->
158+
save(listOf(p1, p2, p3, p4)); result()
159+
}
160+
},
161+
162+
// 5 parameters
163+
164+
TestCase(PropertyTesting.defaultIterationCount * 5) { save, result ->
165+
checkAll<Person, Person, Person, Person, Person> { p1, p2, p3, p4, p5 ->
166+
save(listOf(p1, p2, p3, p4, p5)); result()
167+
}
168+
},
169+
170+
TestCase(ITERATIONS * 5) { save, result ->
171+
checkAll<Person, Person, Person, Person, Person>(ITERATIONS) { p1, p2, p3, p4, p5 ->
172+
save(listOf(p1, p2, p3, p4, p5)); result()
173+
}
174+
},
175+
176+
TestCase(PropertyTesting.defaultIterationCount * 5) { save, result ->
177+
checkAll<Person, Person, Person, Person, Person>(PropTestConfig()) { p1, p2, p3, p4, p5 ->
178+
save(listOf(p1, p2, p3, p4, p5)); result()
179+
}
180+
},
181+
182+
TestCase(ITERATIONS * 5) { save, result ->
183+
checkAll<Person, Person, Person, Person, Person>(ITERATIONS, PropTestConfig()) { p1, p2, p3, p4, p5 ->
184+
save(listOf(p1, p2, p3, p4, p5)); result()
185+
}
186+
},
187+
188+
// 6 parameters
189+
190+
TestCase(PropertyTesting.defaultIterationCount * 6) { save, result ->
191+
checkAll<Person, Person, Person, Person, Person, Person> { p1, p2, p3, p4, p5, p6 ->
192+
save(listOf(p1, p2, p3, p4, p5, p6)); result()
193+
}
194+
},
195+
196+
TestCase(ITERATIONS * 6) { save, result ->
197+
checkAll<Person, Person, Person, Person, Person, Person>(ITERATIONS) { p1, p2, p3, p4, p5, p6 ->
198+
save(listOf(p1, p2, p3, p4, p5, p6)); result()
199+
}
200+
},
201+
202+
TestCase(PropertyTesting.defaultIterationCount * 6) { save, result ->
203+
checkAll<Person, Person, Person, Person, Person, Person>(PropTestConfig()) { p1, p2, p3, p4, p5, p6 ->
204+
save(listOf(p1, p2, p3, p4, p5, p6)); result()
205+
}
206+
},
207+
208+
TestCase(ITERATIONS * 6) { save, result ->
209+
checkAll<Person, Person, Person, Person, Person, Person>(
210+
ITERATIONS,
211+
PropTestConfig()
212+
) { p1, p2, p3, p4, p5, p6 ->
213+
save(listOf(p1, p2, p3, p4, p5, p6)); result()
214+
}
215+
}
216+
)
153217
}
154218
}

0 commit comments

Comments
 (0)