
net.serenitybdd.screenplay.ensure.KnowableValue.kt Maven / Gradle / Ivy
package net.serenitybdd.screenplay.ensure
import net.serenitybdd.core.pages.WebElementFacade
import net.serenitybdd.screenplay.Actor
import net.serenitybdd.screenplay.Question
import net.serenitybdd.screenplay.questions.EnumValues
import net.serenitybdd.screenplay.targets.Target
import org.openqa.selenium.By
import java.math.BigDecimal
import java.time.LocalDate
import java.time.LocalTime
import java.time.format.DateTimeFormatter
typealias KnowableValue = (Actor) -> A?
class KnowableStringValue(val value : KnowableValue, val description: String) : KnowableValue {
override fun invoke(actor: Actor) = value(actor).toString()
override fun toString() = description
}
class KnowableIntValue(val value : KnowableValue, val description: String) : KnowableValue {
override fun invoke(actor: Actor)= value(actor).toString().toInt()
override fun toString() = description
}
class KnowableDoubleValue(val value : KnowableValue, val description: String) : KnowableValue {
override fun invoke(actor: Actor) = value(actor).toString().toDouble()
override fun toString() = description
}
class KnowableFloatValue(val value : KnowableValue, val description: String) : KnowableValue {
override fun invoke(actor: Actor) = value(actor).toString().toFloat()
override fun toString() = description
}
class KnowableBigDecimalValue(val value : KnowableValue, val description: String) : KnowableValue {
override fun invoke(actor: Actor) = value(actor).toString().toBigDecimal()
override fun toString() = description
}
class KnowableLocalDateValue(val value : KnowableValue, val description: String, val format: String? = null) : KnowableValue {
override fun invoke(actor: Actor): LocalDate? {
val resolvedValue = value(actor)
return if (resolvedValue is LocalDate) resolvedValue else parsedDateFor(resolvedValue.toString())
}
override fun toString() = description
private fun parsedDateFor(dateValue: String) : LocalDate {
val formatter = if (format != null) DateTimeFormatter.ofPattern(format) else DateTimeFormatter.ISO_LOCAL_DATE
return LocalDate.parse(dateValue, formatter)
}
}
class KnowableLocalTimeValue(val value : KnowableValue, val description: String, val format: String? = null) : KnowableValue {
override fun invoke(actor: Actor): LocalTime? {
val resolvedValue = value(actor)
return if (resolvedValue is LocalTime) resolvedValue else parsedTimeFor(resolvedValue.toString())
}
override fun toString() = description
private fun parsedTimeFor(dateValue: String) : LocalTime {
val formatter = if (format != null) DateTimeFormatter.ofPattern(format) else DateTimeFormatter.ISO_LOCAL_TIME
return LocalTime.parse(dateValue, formatter)
}
}
class KnowableBooleanValue(val value : KnowableValue, val description: String) : KnowableValue {
override fun invoke(actor: Actor) = value(actor).toString().toBoolean()
override fun toString() = description
}
class KnownValue(val value: A?, val description: String) : KnowableValue {
override fun invoke(actor: Actor): A? = value
override fun toString() = description
}
interface HasSubject {
fun subject() : String
}
class KnowableAnswer(val question: Question, val description: String) : KnowableValue, HasSubject {
override fun invoke(actor: Actor): A? = question.answeredBy(actor)
override fun toString() = description
override fun subject() = question.subject
}
class KnowableStringAnswer(val question: Question, val description: String) : KnowableValue, HasSubject {
override fun invoke(actor: Actor): String? = question.answeredBy(actor)
override fun toString() = description
override fun subject() = question.subject
}
class KnowableBooleanAnswer(val question: Question, val description: String) : KnowableValue, HasSubject {
override fun invoke(actor: Actor): Boolean? = question.answeredBy(actor)
override fun toString() = description
override fun subject() = question.subject
}
class KnowableComparableAnswer(val question: Question, val description: String) : KnowableValue, HasSubject {
override fun invoke(actor: Actor): A = question.answeredBy(actor)
override fun toString() = description
override fun subject() = question.subject
}
class KnowableCollectionAnswer(val question: Question>, val description: String) : KnowableValue>, HasSubject {
override fun invoke(actor: Actor): Collection = question.answeredBy(actor)
override fun toString() = description
override fun subject() = question.subject
}
class KnowableListAnswer(val question: Question>, val description: String) : KnowableValue>, HasSubject {
override fun invoke(actor: Actor): List = question.answeredBy(actor)
override fun toString() = description
override fun subject() = question.subject
}
class KnowableCollectionTarget(val target: Target, val description: String = pluralFormOf(target.name)) : KnowableValue?> {
constructor(locator: By) : this(Target.the(locator.toString()).located(locator))
override fun invoke(actor: Actor): List = target.resolveAllFor(actor)
override fun toString() = description
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy