From f6a967b5fce705a711c92c3ae0e9208b86e3f4ef Mon Sep 17 00:00:00 2001 From: Evan Tatarka Date: Sun, 23 Aug 2020 15:19:47 -0400 Subject: [PATCH] Don't throw MultipleFailuresError if failure list is empty In a nested context this was causing failures to be dropped since it was mapping to an empty list. Fixes #314 --- assertk/src/commonMain/kotlin/assertk/failure.kt | 8 ++++---- .../kotlin/test/assertk/assertions/IterableTest.kt | 11 +++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/assertk/src/commonMain/kotlin/assertk/failure.kt b/assertk/src/commonMain/kotlin/assertk/failure.kt index 1b301b04..1f833c69 100644 --- a/assertk/src/commonMain/kotlin/assertk/failure.kt +++ b/assertk/src/commonMain/kotlin/assertk/failure.kt @@ -115,10 +115,10 @@ internal class SoftFailure( } private fun compositeErrorMessage(errors: List): Throwable { - return if (errors.size == 1) { - errors.first() - } else { - MultipleFailuresError(message, errors).apply { + return when(errors.size) { + 0 -> AssertionFailedError(message) + 1 -> errors.first() + else -> MultipleFailuresError(message, errors).apply { errors.forEach(this::addSuppressed) } } diff --git a/assertk/src/commonTest/kotlin/test/assertk/assertions/IterableTest.kt b/assertk/src/commonTest/kotlin/test/assertk/assertions/IterableTest.kt index 5df69195..20d0cf49 100644 --- a/assertk/src/commonTest/kotlin/test/assertk/assertions/IterableTest.kt +++ b/assertk/src/commonTest/kotlin/test/assertk/assertions/IterableTest.kt @@ -221,6 +221,17 @@ class IterableTest { ) } + @Test fun exactly_too_few_inside_all_fails() { + val error = assertFails { + assertThat(listOf(5, 4, 3) as Iterable).all { + exactly(2) { it.isGreaterThan(2) } + } + } + assertEquals( + """expected to pass exactly 2 times""".trimMargin(), error.message + ) + } + @Test fun exactly_times_passed_passes() { assertThat(listOf(0, 1, 2) as Iterable).exactly(2) { it.isGreaterThan(0) } }