Skip to content

Commit c68b75f

Browse files
Add assertNotContains assertion
1 parent cb9a7a1 commit c68b75f

File tree

5 files changed

+39
-3
lines changed

5 files changed

+39
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### Added
66

77
- `assertTrue` and `assertFalse` assertions
8+
- `assertNotContains` assertion
89

910
### Changed
1011

kotlin-test/api/android/kotlin-test.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ public final class com/javiersc/kotlin/test/StringMatchersKt {
2222
public static final fun assertNotEmpty (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
2323
public static synthetic fun assertNotEmpty$default (Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
2424
}
25+

kotlin-test/api/jvm/kotlin-test.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ public final class com/javiersc/kotlin/test/StringMatchersKt {
2929
public static final fun assertNotEmpty (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
3030
public static synthetic fun assertNotEmpty$default (Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
3131
}
32+

kotlin-test/common/main/kotlin/com/javiersc/kotlin/test/iterableMatchers.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
package com.javiersc.kotlin.test
22

3+
import kotlin.test.assertContains
4+
35
public inline fun <reified I : Iterable<T>, reified T : Any> I.assertContains(
46
element: T,
57
message: String? = null,
68
): I {
7-
if (element in this) return this
8-
fail(message ?: "Expected to contain $element but did not")
9+
assertContains(iterable = this, element = element, message = message)
10+
return this
911
}
1012

1113
public inline fun <reified I : Iterable<T>, reified T : Any> I.assertCount(
1214
expectSize: Int,
1315
message: String? = null,
1416
): I = assertSize(expectSize = expectSize, message = message)
1517

18+
public inline fun <reified I : Iterable<T>, reified T : Any> I.assertNotContains(
19+
element: T,
20+
message: String? = null,
21+
): I {
22+
if (element !in this) return this
23+
fail(message ?: "Expected to contain $element but did not")
24+
}
25+
1626
public inline fun <reified I : Iterable<T>, reified T : Any> I.assertSize(
1727
expectSize: Int,
1828
message: String? = null,

kotlin-test/common/test/kotlin/com/javiersc/kotlin/test/IterableMatchersTest.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ class IterableMatchersTest {
1212
val element = 4
1313
val message = "Custom error message"
1414
val exception: AssertionError = assertFailsWith { list.assertContains(element, message) }
15-
assertTrue(exception.message == message)
15+
assertTrue(
16+
exception.message ==
17+
"Custom error message. Expected the collection to contain the element.\n" +
18+
"Collection <[1, 2, 3]>, element <4>."
19+
)
1620
}
1721

1822
@Test
@@ -37,6 +41,25 @@ class IterableMatchersTest {
3741
assertTrue(exception.message == "Expected size 2 but was 3")
3842
}
3943

44+
@Test
45+
fun `assertNotContains should pass when element is not in the iterable`() {
46+
listOf(1, 2, 3).assertNotContains(4)
47+
}
48+
49+
@Test
50+
fun `assertNotContains should fail when element is in the iterable`() {
51+
assertFailsWith<AssertionError> { listOf(1, 2, 3).assertNotContains(2) }
52+
}
53+
54+
@Test
55+
fun `assertNotContains should fail with custom message when element is in the iterable`() {
56+
val message = "Custom error message"
57+
val exception: AssertionError = assertFailsWith {
58+
listOf(1, 2, 3).assertNotContains(2, message)
59+
}
60+
assertTrue(exception.message == message)
61+
}
62+
4063
@Test
4164
fun `assertSize should pass when size matches`() {
4265
val list: List<Int> = listOf(1, 2, 3)

0 commit comments

Comments
 (0)