packages feed

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

module Interactive where

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

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 ()