Make collectAssertions fail with empty assertionsCreator lambda

This commit is contained in:
Ed
2021-06-21 16:01:25 -07:00
parent d923d416d1
commit 17c726012b
2 changed files with 18 additions and 14 deletions

View File

@@ -3,9 +3,13 @@ package ch.tutteli.atrium.logic.creating.collectors
import ch.tutteli.atrium.assertions.AssertionGroup
import ch.tutteli.atrium.assertions.ExplanatoryAssertionGroupType
import ch.tutteli.atrium.assertions.builders.AssertionsOption
import ch.tutteli.atrium.assertions.builders.ExplanatoryAssertionGroupFinalStep
import ch.tutteli.atrium.core.None
import ch.tutteli.atrium.core.Option
import ch.tutteli.atrium.creating.AssertionContainer
import ch.tutteli.atrium.creating.CollectingExpect
import ch.tutteli.atrium.creating.Expect
import ch.tutteli.atrium.creating.ExperimentalComponentFactoryContainer
import ch.tutteli.atrium.logic.collectForCompositionBasedOnSubject
/**
@@ -13,8 +17,19 @@ import ch.tutteli.atrium.logic.collectForCompositionBasedOnSubject
*
* //TODO 0.18.0 in case we somehow incorporate the current container in AssertionsOptions, then remove container as parameter
*/
fun <T, G : ExplanatoryAssertionGroupType, R> AssertionsOption<G, R>.collectAssertions(
@Suppress("DEPRECATION" /* OptIn is only available since 1.3.70 which we cannot use if we want to support 1.2 */)
@UseExperimental(ExperimentalComponentFactoryContainer::class)
fun <T, G : ExplanatoryAssertionGroupType, R: ExplanatoryAssertionGroupFinalStep> AssertionsOption<G, R>.collectAssertions(
container: AssertionContainer<*>,
maybeSubject: Option<T>,
assertionCreator: Expect<T>.() -> Unit
): R = withAssertions(container.collectForCompositionBasedOnSubject(maybeSubject, assertionCreator))
): ExplanatoryAssertionGroupFinalStep {
val collectingExpect = CollectingExpect<T>(None, container.components)
// not using addAssertionsCreatedBy on purpose so that we don't append a failing assertion
collectingExpect.assertionCreator()
return withAssertions(container.collectForCompositionBasedOnSubject(maybeSubject, assertionCreator))
.let {
if(collectingExpect.getAssertions().isEmpty()) it.failing
else it
}
}

View File

@@ -8,9 +8,7 @@ import ch.tutteli.atrium.core.Some
import ch.tutteli.atrium.core.falseProvider
import ch.tutteli.atrium.core.trueProvider
import ch.tutteli.atrium.creating.AssertionContainer
import ch.tutteli.atrium.creating.CollectingExpect
import ch.tutteli.atrium.creating.Expect
import ch.tutteli.atrium.creating.ExperimentalComponentFactoryContainer
import ch.tutteli.atrium.logic.collectBasedOnSubject
import ch.tutteli.atrium.logic.creating.collectors.collectAssertions
import ch.tutteli.atrium.reporting.Text
@@ -38,8 +36,6 @@ internal fun <E : Any> allCreatedAssertionsHold(
else -> assertionCreator != null && container.collectBasedOnSubject(Some(subject), assertionCreator).holds()
}
@Suppress("DEPRECATION" /* OptIn is only available since 1.3.70 which we cannot use if we want to support 1.2 */)
@UseExperimental(ExperimentalComponentFactoryContainer::class)
internal fun <E : Any> createExplanatoryAssertionGroup(
container: AssertionContainer<*>,
assertionCreatorOrNull: (Expect<E>.() -> Unit)?
@@ -50,14 +46,7 @@ internal fun <E : Any> createExplanatoryAssertionGroup(
//TODO 0.18.0 looks a lot like toBeNullIfNullGiven
if (assertionCreatorOrNull != null) {
// we don't use a subject, we will not show it anyway
val collectingExpect = CollectingExpect<E>(None, container.components)
// not using addAssertionsCreatedBy on purpose so that we don't append a failing assertion
collectingExpect.assertionCreatorOrNull()
if(collectingExpect.getAssertions().isEmpty()) {
it.collectAssertions(container, None, assertionCreatorOrNull).failing
} else {
it.collectAssertions(container, None, assertionCreatorOrNull)
}
it.collectAssertions(container, None, assertionCreatorOrNull)
} else {
it.withAssertion(
// it is for an explanatoryGroup where it does not matter if the assertion holds or not