mirror of
https://github.com/polysemy-research/polysemy.git
synced 2024-12-02 11:54:06 +03:00
39 lines
1.0 KiB
Haskell
39 lines
1.0 KiB
Haskell
|
module ErrorSpec where
|
||
|
|
||
|
import qualified Control.Exception as X
|
||
|
import Polysemy
|
||
|
import Polysemy.Error
|
||
|
import Polysemy.Resource
|
||
|
import Test.Hspec
|
||
|
|
||
|
newtype MyExc = MyExc String
|
||
|
deriving (Show, Eq)
|
||
|
|
||
|
instance X.Exception MyExc
|
||
|
|
||
|
spec :: Spec
|
||
|
spec = parallel $ do
|
||
|
describe "fromException" $ do
|
||
|
it "should catch exceptions" $ do
|
||
|
a <-
|
||
|
runM $ runError $ fromException @MyExc $ do
|
||
|
_ <- X.throwIO $ MyExc "hello"
|
||
|
pure ()
|
||
|
a `shouldBe` (Left $ MyExc "hello")
|
||
|
|
||
|
it "should not catch non-exceptions" $ do
|
||
|
a <-
|
||
|
runM $ runError @MyExc $ fromException @MyExc $ pure ()
|
||
|
a `shouldBe` Right ()
|
||
|
|
||
|
it "should happen before Resource" $ do
|
||
|
a <-
|
||
|
runM $ resourceToIO $ runError @MyExc $ do
|
||
|
onException
|
||
|
(fromException @MyExc $ do
|
||
|
_ <- X.throwIO $ MyExc "hello"
|
||
|
pure ()
|
||
|
) $ pure $ error "this exception shouldn't happen"
|
||
|
a `shouldBe` (Left $ MyExc "hello")
|
||
|
|