packages feed

polysemy-process-0.5.0.0: test/Polysemy/Process/Test/ProcessTest.hs

{-# options_ghc -fplugin=Polysemy.Plugin #-}

module Polysemy.Process.Test.ProcessTest where

import qualified Data.ByteString as ByteString
import Polysemy.Async (asyncToIOFinal)
import Polysemy.Conc.Interpreter.Race (interpretRace)
import Polysemy.Resume (resuming)
import Polysemy.Test (UnitTest, runTestAuto, (===))
import qualified System.Process.Typed as Process
import System.Process.Typed (ProcessConfig)

import qualified Polysemy.Process.Effect.Process as Process
import Polysemy.Process.Effect.Process (withProcess)
import Polysemy.Process.Interpreter.ProcessIOE (interpretProcessIOE)

config :: ProcessConfig () () ()
config =
  Process.proc "cat" []

message :: ByteString
message =
  ByteString.replicate 10 120

test_process :: UnitTest
test_process =
  runTestAuto $ interpretRace $ asyncToIOFinal $ interpretProcessIOE True 10 config do
    withProcess do
      response <- resuming (pure . show) do
        Process.send message
        Process.recv
      message === response