effectful-2.6.0.0: tests/ReaderTests.hs
module ReaderTests (readerTests) where
import Test.Tasty
import Test.Tasty.HUnit
import Effectful
import Effectful.Dispatch.Dynamic
import Effectful.Reader.Dynamic qualified as D
import Effectful.Reader.Static qualified as S
import Utils qualified as U
readerTests :: TestTree
readerTests = testGroup "Reader"
[ testCase "local works in handlers (static)" test_localInHandlerStatic
, testCase "local works in handlers (dynamic)" test_localInHandlerDynamic
]
data SomeEff :: Effect where
SomeAction :: SomeEff m ()
type instance DispatchOf SomeEff = Dynamic
test_localInHandlerStatic :: Assertion
test_localInHandlerStatic = runEff . S.runReader "global" . interpret f $ do
S.local (const "local") $ send SomeAction
where
f :: (IOE :> es, S.Reader String :> es) => EffectHandler SomeEff es
f _ SomeAction = U.assertEqual "expected result" "local" =<< S.ask
test_localInHandlerDynamic :: Assertion
test_localInHandlerDynamic = runEff . D.runReader "global" . interpret f $ do
D.local (const "local") $ send SomeAction
where
f :: (IOE :> es, D.Reader String :> es) => EffectHandler SomeEff es
f _ SomeAction = U.assertEqual "expected result" "local" =<< D.ask