All Downloads are FREE. Search and download functionalities are using the official Maven repository.

main.kotlin.ch.tutteli.atrium.logic.featureExtensions.kt Maven / Gradle / Ivy

There is a newer version: 1.0.0
Show newest version
package ch.tutteli.atrium.logic

import ch.tutteli.atrium.core.ExperimentalNewExpectTypes
import ch.tutteli.atrium.core.None
import ch.tutteli.atrium.creating.AssertionContainer
import ch.tutteli.atrium.logic.creating.feature.MetaFeature
import ch.tutteli.atrium.logic.creating.transformers.FeatureExtractorBuilder
import ch.tutteli.atrium.reporting.Text
import ch.tutteli.atrium.reporting.translating.Untranslatable
import ch.tutteli.atrium.reporting.translating.Translatable
import ch.tutteli.atrium.translations.ErrorMessages

/**
 * Convenience method to pass a [String] as [description] which is wrapped into an [Untranslatable] instead of passing
 * a [Translatable].
 */
fun  AssertionContainer.manualFeature(
    description: String,
    provider: T.() -> R
): FeatureExtractorBuilder.ExecutionStep = manualFeature(Untranslatable(description), provider)

fun  AssertionContainer.genericSubjectBasedFeature(
    provider: (T) -> MetaFeature
): FeatureExtractorBuilder.ExecutionStep =
    genericFeature(this, maybeSubject.fold(::createFeatureSubjectNotDefined) { provider(it) })

private fun  createFeatureSubjectNotDefined(): MetaFeature =
    MetaFeature(
        ErrorMessages.DESCRIPTION_BASED_ON_SUBJECT,
        ErrorMessages.REPRESENTATION_BASED_ON_SUBJECT_NOT_DEFINED,
        None
    )
private fun  genericFeature(
    container: AssertionContainer,
    metaFeature: MetaFeature
): FeatureExtractorBuilder.ExecutionStep {
    val representation: Any = metaFeature.representation ?: Text.NULL
    @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(metaFeature.description)
        .withRepresentationForFailure(representation)
        .withFeatureExtraction { metaFeature.maybeSubject }
        .withOptions { withRepresentation { representation } }
        .build()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy