packages feed

extensible-effects-concurrent-2.0.0: test/Interactive.hs

module Interactive where

import Common
import qualified Control.Eff.Concurrent.Process.ForkIOScheduler as ForkIOScheduler
import Control.Eff.Concurrent.Process.Interactive
import qualified Control.Eff.Concurrent.Process.SingleThreadedScheduler as SingleThreaded

test_interactive :: TestTree
test_interactive =
  setTravisTestOptions $
    testGroup
      "Interactive"
      [ testGroup "SingleThreadedScheduler" $ allTests SingleThreaded.defaultMain,
        testGroup "ForkIOScheduler" $ allTests ForkIOScheduler.defaultMain
      ]

allTests ::
  SetMember Lift (Lift IO) r =>
  (Eff (Processes r) () -> IO ()) ->
  [TestTree]
allTests scheduler = [happyCaseTest scheduler]

happyCaseTest ::
  SetMember Lift (Lift IO) r =>
  (Eff (Processes r) () -> IO ()) ->
  TestTree
happyCaseTest scheduler =
  testCase "start, wait and stop interactive scheduler" $ do
    s <- forkInteractiveScheduler scheduler
    threadDelay 100000
    killInteractiveScheduler s
    return ()