module Expect.Task
( check,
andCheck,
succeeds,
fails,
Failure,
)
where
import qualified Debug
import qualified Expect
import NriPrelude
import qualified Task
import qualified Test.Internal as Internal
type Failure = Internal.Failure
andCheck :: (a -> Expect.Expectation) -> Task Failure a -> Task Failure a
andCheck :: (a -> Expectation) -> Task Failure a -> Task Failure a
andCheck a -> Expectation
expectation Task Failure a
task = do
a
x <- Task Failure a
task
TestResult
res <-
a -> Expectation
expectation a
x
Expectation
-> (Expectation -> Task Never TestResult) -> Task Never TestResult
forall a b. a -> (a -> b) -> b
|> Expectation -> Task Never TestResult
Internal.unExpectation
Task Never TestResult
-> (Task Never TestResult -> Task Failure TestResult)
-> Task Failure TestResult
forall a b. a -> (a -> b) -> b
|> (Never -> Failure)
-> Task Never TestResult -> Task Failure TestResult
forall x y a. (x -> y) -> Task x a -> Task y a
Task.mapError Never -> Failure
forall a. Never -> a
never
case TestResult
res of
TestResult
Internal.Succeeded -> Task Failure a
task
Internal.Failed Failure
failure -> Failure -> Task Failure a
forall x a. x -> Task x a
Task.fail Failure
failure
check :: Expect.Expectation -> Task Failure ()
check :: Expectation -> Task Failure ()
check Expectation
expectation =
() -> Task Failure ()
forall a x. a -> Task x a
Task.succeed ()
Task Failure ()
-> (Task Failure () -> Task Failure ()) -> Task Failure ()
forall a b. a -> (a -> b) -> b
|> (() -> Expectation) -> Task Failure () -> Task Failure ()
forall a. (a -> Expectation) -> Task Failure a -> Task Failure a
andCheck (\() -> Expectation
expectation)
succeeds :: Show err => Task err a -> Task Failure a
succeeds :: Task err a -> Task Failure a
succeeds Task err a
task =
(err -> Failure) -> Task err a -> Task Failure a
forall x y a. (x -> y) -> Task x a -> Task y a
Task.mapError
( \err
message ->
Text -> Failure
Internal.FailedAssertion (err -> Text
forall a. Show a => a -> Text
Debug.toString err
message)
)
Task err a
task
fails :: Text -> Task Failure a
fails :: Text -> Task Failure a
fails Text
msg =
Text
msg
Text -> (Text -> Failure) -> Failure
forall a b. a -> (a -> b) -> b
|> Text -> Failure
Internal.FailedAssertion
Failure -> (Failure -> Task Failure a) -> Task Failure a
forall a b. a -> (a -> b) -> b
|> Failure -> Task Failure a
forall x a. x -> Task x a
Task.fail