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

com.avito.truth.ResultSubject.kt Maven / Gradle / Ivy

Go to download

Collection of infrastructure libraries and gradle plugins of Avito Android project

The newest version!
package com.avito.truth

import com.avito.android.Result
import com.google.common.truth.Fact
import com.google.common.truth.FailureMetadata
import com.google.common.truth.Subject
import com.google.common.truth.Subject.Factory
import com.google.common.truth.Truth

public class ResultSubject private constructor(
    private val failureMetadata: FailureMetadata,
    private val actual: Result
) : Subject(failureMetadata, actual) {

    public fun isSuccess(): SuccessSubject {
        when (actual) {
            is Result.Failure -> {
                failWithActual(Fact.simpleFact("expected to be Success, but failure with ${actual.throwable}"))
                throw IllegalStateException("Can't be here")
            }
            is Result.Success ->
                return SuccessSubject(failureMetadata, actual.value)
        }
    }

    public fun isFailure(): FailureSubject {
        when (actual) {
            is Result.Success -> {
                failWithActual(Fact.simpleFact("expected to be Failure, but was Success"))
                throw IllegalStateException("Can't be here")
            }
            is Result.Failure ->
                return FailureSubject(failureMetadata, actual.throwable)
        }
    }

    public class SuccessSubject internal constructor(
        failureMetadata: FailureMetadata,
        private val actual: T
    ) : Subject(failureMetadata, actual) {

        public fun withValue(body: (T) -> Unit) {
            body(actual)
        }
    }

    public class FailureSubject internal constructor(
        failureMetadata: FailureMetadata,
        private val actual: Throwable
    ) : Subject(failureMetadata, actual) {

        public fun withThrowable(body: (Throwable) -> Unit) {
            body(actual)
        }
    }

    public companion object {

        @JvmStatic
        private val RESULT_SUBJECT_FACTORY: Factory, Result<*>> =
            Factory, Result<*>> { metadata, actual -> ResultSubject(metadata, actual) }

        @JvmStatic
        public fun results(): Factory, Result<*>> = RESULT_SUBJECT_FACTORY

        @Suppress("UNCHECKED_CAST")
        @JvmStatic
        public fun  assertThat(result: Result): ResultSubject =
            Truth.assertAbout(RESULT_SUBJECT_FACTORY).that(result) as ResultSubject
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy