Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
main.kotlin.ch.tutteli.atrium.logic.impl.DefaultFeatureAssertions.kt Maven / Gradle / Ivy
package ch.tutteli.atrium.logic.impl
import ch.tutteli.atrium.core.ExperimentalNewExpectTypes
import ch.tutteli.atrium.core.Some
import ch.tutteli.atrium.creating.AssertionContainer
import ch.tutteli.atrium.creating.ExperimentalComponentFactoryContainer
import ch.tutteli.atrium.creating.build
import ch.tutteli.atrium.logic.FeatureAssertions
import ch.tutteli.atrium.logic.creating.transformers.FeatureExtractorBuilder
import ch.tutteli.atrium.logic.extractFeature
import ch.tutteli.atrium.reporting.MethodCallFormatter
import ch.tutteli.atrium.reporting.translating.Translatable
import ch.tutteli.atrium.reporting.translating.Untranslatable
import ch.tutteli.atrium.translations.ErrorMessages
import kotlin.reflect.*
class DefaultFeatureAssertions : FeatureAssertions {
//@formatter:off
override fun property(container: AssertionContainer, property: KProperty1): FeatureExtractorBuilder.ExecutionStep =
extractFeature(container, property.name, property::get)
override fun f0(container: AssertionContainer, f: KFunction1): FeatureExtractorBuilder.ExecutionStep =
extractFeature(container, buildMethodCallFormatter(container).formatCall(f.name, arrayOf()), f::invoke)
override fun f1(container: AssertionContainer, f: KFunction2, a1: A1): FeatureExtractorBuilder.ExecutionStep =
extractFeature(container, buildMethodCallFormatter(container).formatCall(f.name, arrayOf(a1))) { f(it, a1) }
override fun f2(container: AssertionContainer, f: KFunction3, a1: A1, a2: A2): FeatureExtractorBuilder.ExecutionStep =
extractFeature(container ,buildMethodCallFormatter(container).formatCall(f.name, arrayOf(a1, a2))) { f(it, a1, a2) }
override fun f3(container: AssertionContainer, f: KFunction4, a1: A1, a2: A2, a3: A3): FeatureExtractorBuilder.ExecutionStep =
extractFeature(container, buildMethodCallFormatter(container).formatCall(f.name, arrayOf(a1, a2, a3))) { f(it, a1, a2, a3) }
override fun f4(container: AssertionContainer, f: KFunction5, a1: A1, a2: A2, a3: A3, a4: A4): FeatureExtractorBuilder.ExecutionStep =
extractFeature(container, buildMethodCallFormatter(container).formatCall(f.name, arrayOf(a1, a2, a3, a4))) { f(it, a1, a2, a3, a4) }
override fun f5(container: AssertionContainer, f: KFunction6, a1: A1, a2: A2, a3: A3, a4: A4, a5: A5): FeatureExtractorBuilder.ExecutionStep =
extractFeature(container, buildMethodCallFormatter(container).formatCall(f.name, arrayOf(a1, a2, a3, a4, a5))) { f(it, a1, a2, a3, a4, a5) }
//@formatter:on
@Suppress("DEPRECATION" /* OptIn is only available since 1.3.70 which we cannot use if we want to support 1.2 */)
@UseExperimental(ExperimentalComponentFactoryContainer::class)
private fun buildMethodCallFormatter(container: AssertionContainer) =
container.components.build()
override fun manualFeature(
container: AssertionContainer,
description: Translatable,
provider: T.() -> R
): FeatureExtractorBuilder.ExecutionStep = extractFeature(container, description, provider)
private fun extractFeature(
container: AssertionContainer,
description: String,
provider: (T) -> R
): FeatureExtractorBuilder.ExecutionStep = extractFeature(container, Untranslatable(description), provider)
private fun extractFeature(
container: AssertionContainer,
description: Translatable,
provider: (T) -> R
): FeatureExtractorBuilder.ExecutionStep {
@Suppress("DEPRECATION" /* OptIn is only available since 1.3.70 which we cannot use if we want to support 1.2 */)
@UseExperimental(ExperimentalNewExpectTypes::class)
return container.extractFeature
.withDescription(description)
.withRepresentationForFailure(ErrorMessages.REPRESENTATION_BASED_ON_SUBJECT_NOT_DEFINED)
.withFeatureExtraction { Some(provider(it)) }
.withoutOptions()
.build()
}
}