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

commonMain.io.kotest.matchers.result.matchers.kt Maven / Gradle / Ivy

package io.kotest.matchers.result

import io.kotest.matchers.Matcher
import io.kotest.matchers.MatcherResult
import io.kotest.matchers.should
import io.kotest.matchers.shouldNot
import kotlin.reflect.KClass

fun  Result.shouldBeSuccess(block: ((T) -> Unit)? = null): T {
   this should beSuccess()
   return getOrThrow().also { block?.invoke(it) }
}

fun  Result.shouldNotBeSuccess() = this shouldNot beSuccess()

infix fun  Result.shouldBeSuccess(expected: T): T {
   this should beSuccess(expected)
   return getOrThrow()
}

infix fun  Result.shouldNotBeSuccess(expected: T) = this shouldNot beSuccess(expected)

fun Result.shouldBeFailure(block: ((Throwable) -> Unit)? = null): Throwable {
   this should BeFailure()
   return exceptionOrNull()!!.also { block?.invoke(it) }
}

fun  Result.shouldNotBeFailure() = this shouldNot BeFailure()

inline fun  Result.shouldBeFailureOfType(): A {
   this should BeFailureOfType(A::class)
   return exceptionOrNull() as A
}

inline fun  Result.shouldNotBeFailureOfType() = this shouldNot BeFailureOfType(A::class)

fun  beSuccess(): Matcher> = object : Matcher> {
   override fun test(value: Result): MatcherResult {
      return MatcherResult(
         value.isSuccess,
         { "Result should be a Success but was $value" },
         { "Result should not be a Success" })
   }
}

fun  beSuccess(expected: T?): BeSuccess = BeSuccess(expected)
class BeSuccess(val expected: T?) : Matcher> {
   override fun test(value: Result): MatcherResult {
      return value.fold(
         {
            MatcherResult(
               it == expected,
               { "Result should be a Success($expected), but instead got Success($it)." },
               { "Result should not be a Success($expected)" })
         },
         {
            defaultResult(false)
         }
      )
   }

   private fun defaultResult(passed: Boolean) =
      MatcherResult(
         passed,
         { "Result should be a success." },
         { "Result should not be a success" })
}

fun beFailure(): BeFailure = BeFailure()
class BeFailure : Matcher> {
   override fun test(value: Result) = MatcherResult(
      value.isFailure,
      { "Result should be a failure but was ${value.getOrNull()}" },
      { "Result should not be a failure" })
}

class BeFailureOfType(private val clazz: KClass) : Matcher> {
   override fun test(value: Result): MatcherResult {
      val error = value.exceptionOrNull()
      return when {
         value.isSuccess -> MatcherResult(
            false,
            { "Result should be a failure but was success" },
            { "" })
         clazz.isInstance(error) -> MatcherResult(
            true,
            { "Result should be a Failure($clazz)" },
            { "Result should not be a Failure($clazz)" })
         else -> {
            MatcherResult(
               false,
               { "Result should be a Failure($clazz) but was Failure(${error!!::class})" },
               { "" })
         }
      }
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy