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

commonMain.ch.tutteli.atrium.creating.RootExpectOptions.kt Maven / Gradle / Ivy

package ch.tutteli.atrium.creating

import ch.tutteli.atrium.core.ExperimentalNewExpectTypes
import ch.tutteli.atrium.reporting.translating.Translatable

/**
 * Additional (non-mandatory) options to create a [RootExpect].
 *
 * See atrium-logic for helper functions to create an instance for this. Core is kept simple on purpose because
 * it is also used in other JVM languages than Kotlin.
 *
 * @property expectationVerb Defines a custom assertion verb if not null.
 * @property representationInsteadOfSubject Defines a custom representation based on a present subject if not null.
 * @property componentFactoryContainer Defines a custom components.
 */
@ExperimentalNewExpectTypes
@OptIn(ExperimentalComponentFactoryContainer::class)
data class RootExpectOptions(
    val expectationVerb: Translatable?,
    val representationInsteadOfSubject: ((T) -> Any)?,
    val componentFactoryContainer: ComponentFactoryContainer?
) {

    /**
     * Merges the given [options] with `this` [RootExpectOptions] object creating a new [RootExpectOptions]
     * where defined properties in [options] will have precedence over properties defined in this instance.
     *
     * For instance, this object has defined [representationInsteadOfSubject] (meaning it is not `null`) and
     * the given [options] as well, then the resulting [RootExpectOptions] will have the
     * [representationInsteadOfSubject] of [options].
     */
    fun merge(options: RootExpectOptions): RootExpectOptions =
        RootExpectOptions(
            options.expectationVerb ?: expectationVerb,
            options.representationInsteadOfSubject ?: representationInsteadOfSubject,
            options.componentFactoryContainer?.let { c -> componentFactoryContainer?.merge(c) ?: c }
        )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy