Skip to content

Commit 48890af

Browse files
Add more assertions
1 parent c68b75f commit 48890af

File tree

7 files changed

+156
-6
lines changed

7 files changed

+156
-6
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
- `assertTrue` and `assertFalse` assertions
88
- `assertNotContains` assertion
9+
- `assertStartWith` and `assertEndWith` assertions
10+
- `assertGreaterThan` and `assertLessThan` assertions for `Duration`
911

1012
### Changed
1113

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ public final class com/javiersc/kotlin/test/BooleanMatchersKt {
55
public static synthetic fun assertTrue$default (ZLjava/lang/String;ILjava/lang/Object;)V
66
}
77

8+
public final class com/javiersc/kotlin/test/CharSequenceMatchersKt {
9+
public static final fun assertNotStartWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/CharSequence;
10+
public static synthetic fun assertNotStartWith$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/CharSequence;
11+
public static final fun assertStartWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/CharSequence;
12+
public static synthetic fun assertStartWith$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/CharSequence;
13+
}
14+
815
public final class com/javiersc/kotlin/test/FailKt {
916
public static final fun fail (Ljava/lang/String;)Ljava/lang/Void;
1017
}
@@ -16,6 +23,13 @@ public final class com/javiersc/kotlin/test/GenericMatchersKt {
1623
public static synthetic fun assertNotEquals$default (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Object;
1724
}
1825

26+
public final class com/javiersc/kotlin/test/NumberMatchersKt {
27+
public static final fun assertGreaterThan-NqJ4yvY (JJLjava/lang/String;)J
28+
public static synthetic fun assertGreaterThan-NqJ4yvY$default (JJLjava/lang/String;ILjava/lang/Object;)J
29+
public static final fun assertLessThan-NqJ4yvY (JJLjava/lang/String;)J
30+
public static synthetic fun assertLessThan-NqJ4yvY$default (JJLjava/lang/String;ILjava/lang/Object;)J
31+
}
32+
1933
public final class com/javiersc/kotlin/test/StringMatchersKt {
2034
public static final fun assertNotBlank (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
2135
public static synthetic fun assertNotBlank$default (Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ public final class com/javiersc/kotlin/test/BooleanMatchersKt {
55
public static synthetic fun assertTrue$default (ZLjava/lang/String;ILjava/lang/Object;)V
66
}
77

8+
public final class com/javiersc/kotlin/test/CharSequenceMatchersKt {
9+
public static final fun assertNotStartWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/CharSequence;
10+
public static synthetic fun assertNotStartWith$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/CharSequence;
11+
public static final fun assertStartWith (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;)Ljava/lang/CharSequence;
12+
public static synthetic fun assertStartWith$default (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/CharSequence;
13+
}
14+
815
public final class com/javiersc/kotlin/test/FailKt {
916
public static final fun fail (Ljava/lang/String;)Ljava/lang/Void;
1017
}
@@ -23,6 +30,13 @@ public final class com/javiersc/kotlin/test/GenericMatchersKt {
2330
public static synthetic fun assertNotEquals$default (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/Object;
2431
}
2532

33+
public final class com/javiersc/kotlin/test/NumberMatchersKt {
34+
public static final fun assertGreaterThan-NqJ4yvY (JJLjava/lang/String;)J
35+
public static synthetic fun assertGreaterThan-NqJ4yvY$default (JJLjava/lang/String;ILjava/lang/Object;)J
36+
public static final fun assertLessThan-NqJ4yvY (JJLjava/lang/String;)J
37+
public static synthetic fun assertLessThan-NqJ4yvY$default (JJLjava/lang/String;ILjava/lang/Object;)J
38+
}
39+
2640
public final class com/javiersc/kotlin/test/StringMatchersKt {
2741
public static final fun assertNotBlank (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
2842
public static synthetic fun assertNotBlank$default (Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Ljava/lang/String;
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.javiersc.kotlin.test
2+
3+
public fun <T : CharSequence?> T.assertStartWith(prefix: CharSequence, message: String? = null): T {
4+
if (this?.startsWith(prefix) == false) fail(message ?: "$this does not start with $prefix")
5+
return this
6+
}
7+
8+
public fun <T : CharSequence?> T.assertNotStartWith(
9+
prefix: CharSequence,
10+
message: String? = null,
11+
): T {
12+
if (this?.startsWith(prefix) == true) fail(message ?: "$this does start with $prefix")
13+
return this
14+
}
Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.javiersc.kotlin.test
22

3+
import kotlin.time.Duration
4+
35
public inline fun <reified T : Number> T.assertGreaterThan(number: T, message: String? = null): T {
46
val message: String = message ?: "$this is not greater than $number"
57
when (this) {
@@ -13,15 +15,27 @@ public inline fun <reified T : Number> T.assertGreaterThan(number: T, message: S
1315
return this
1416
}
1517

18+
public fun Duration.assertGreaterThan(number: Duration, message: String? = null): Duration {
19+
val message: String = message ?: "$this is not greater than $number"
20+
if (this <= number) fail(message)
21+
return this
22+
}
23+
1624
public inline fun <reified T : Number> T.assertLessThan(number: T, message: String? = null): T {
1725
val message: String = message ?: "$this is not less than $number"
1826
when (this) {
19-
is Byte -> if (this > number.toByte()) fail(message)
20-
is Short -> if (this > number.toShort()) fail(message)
21-
is Int -> if (this > number.toInt()) fail(message)
22-
is Long -> if (this > number.toLong()) fail(message)
23-
is Float -> if (this > number.toFloat()) fail(message)
24-
is Double -> if (this > number.toDouble()) fail(message)
27+
is Byte -> if (this >= number.toByte()) fail(message)
28+
is Short -> if (this >= number.toShort()) fail(message)
29+
is Int -> if (this >= number.toInt()) fail(message)
30+
is Long -> if (this >= number.toLong()) fail(message)
31+
is Float -> if (this >= number.toFloat()) fail(message)
32+
is Double -> if (this >= number.toDouble()) fail(message)
2533
}
2634
return this
2735
}
36+
37+
public fun Duration.assertLessThan(number: Duration, message: String? = null): Duration {
38+
val message: String = message ?: "$this is not less than $number"
39+
if (this >= number) fail(message)
40+
return this
41+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.javiersc.kotlin.test
2+
3+
import kotlin.test.Test
4+
import kotlin.test.assertFailsWith
5+
import kotlin.test.assertTrue
6+
7+
class CharSequenceMatchersTest {
8+
9+
@Test
10+
fun `assertStartWith should pass when prefix matches`() {
11+
val result: String = "hello".assertStartWith("he")
12+
assertTrue(result == "hello")
13+
}
14+
15+
@Test
16+
fun `assertStartWith should fail when prefix does not match`() {
17+
val exception: AssertionError = assertFailsWith {
18+
"hello".assertStartWith("hi", "Custom error message")
19+
}
20+
assertTrue(exception.message == "Custom error message")
21+
}
22+
23+
@Test
24+
fun `assertStartWith should fail with default message when prefix does not match`() {
25+
val exception: AssertionError = assertFailsWith { "hello".assertStartWith("hi") }
26+
assertTrue(exception.message == "hello does not start with hi")
27+
}
28+
29+
@Test
30+
fun `assertNotStartWith should pass when prefix does not match`() {
31+
val result = "hello".assertNotStartWith("hi")
32+
assertTrue(result == "hello")
33+
}
34+
35+
@Test
36+
fun `assertNotStartWith should fail when prefix matches`() {
37+
val exception: AssertionError = assertFailsWith {
38+
"hello".assertNotStartWith("he", "Custom error message")
39+
}
40+
assertTrue(exception.message == "Custom error message")
41+
}
42+
43+
@Test
44+
fun `assertNotStartWith should fail with default message when prefix matches`() {
45+
val exception: AssertionError = assertFailsWith { "hello".assertNotStartWith("he") }
46+
assertTrue(exception.message == "hello does start with he")
47+
}
48+
}

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import com.javiersc.kotlin.stdlib.Platform
55
import kotlin.test.Test
66
import kotlin.test.assertFailsWith
77
import kotlin.test.assertTrue
8+
import kotlin.time.Duration
9+
import kotlin.time.Duration.Companion.seconds
810

911
class NumberMatchersTest {
1012

@@ -138,6 +140,28 @@ class NumberMatchersTest {
138140
assertTrue(exception.message == "$oneDouble is not greater than $twoDouble")
139141
}
140142

143+
@Test
144+
fun `assertGreaterThan passes when Duration is greater`() {
145+
val result: Duration = 2.seconds.assertGreaterThan(1.seconds)
146+
assertTrue(result == 2.seconds)
147+
}
148+
149+
@Test
150+
fun `assertGreaterThan fails when Duration is less custom error`() {
151+
val exception: AssertionError = assertFailsWith {
152+
1.seconds.assertGreaterThan(2.seconds, "Custom error")
153+
}
154+
assertTrue(exception.message == "Custom error")
155+
}
156+
157+
@Test
158+
fun `assertGreaterThan fails when Duration is less`() {
159+
val exception: AssertionError = assertFailsWith {
160+
1.seconds.assertGreaterThan(2.seconds, "Custom error")
161+
}
162+
assertTrue(exception.message == "Custom error")
163+
}
164+
141165
@Test
142166
fun `assertGreaterThan fails with custom message`() {
143167
val message = "Custom error message"
@@ -257,6 +281,26 @@ class NumberMatchersTest {
257281
assertTrue(exception.message == "$twoDouble is not less than $oneDouble")
258282
}
259283

284+
@Test
285+
fun `assertLessThan passes when Duration is less`() {
286+
val result: Duration = 1.seconds.assertLessThan(2.seconds)
287+
assertTrue(result == 1.seconds)
288+
}
289+
290+
@Test
291+
fun `assertLessThan fails when Duration is greater with custom error`() {
292+
val exception: AssertionError = assertFailsWith {
293+
2.seconds.assertLessThan(1.seconds, "Custom error")
294+
}
295+
assertTrue(exception.message == "Custom error")
296+
}
297+
298+
@Test
299+
fun `assertLessThan fails when Duration is greater`() {
300+
val exception: AssertionError = assertFailsWith { 2.seconds.assertLessThan(1.seconds) }
301+
assertTrue(exception.message == "2s is not less than 1s")
302+
}
303+
260304
@Test
261305
fun `assertLessThan fails with custom message`() {
262306
val message = "Custom error message"

0 commit comments

Comments
 (0)