11module Test.Main where
22
33import Prelude
4- import Control.Apply
5- import Control.Bind
6-
7- import Control.Monad.Eff.Console
8- import Control.Monad.Eff.Console.Unsafe
94
5+ import Control.Monad.Eff (Eff )
6+ import Control.Monad.Eff.Console (CONSOLE , log )
7+ import Control.Monad.Eff.Exception (EXCEPTION )
108import Data.Posix.Signal (Signal (..))
11- import Node.Encoding (Encoding (UTF8))
129import Node.Buffer as Buffer
13- import Node.ChildProcess
10+ import Node.ChildProcess (CHILD_PROCESS , Exit (..), defaultExecOptions , exec , onError ,
11+ defaultSpawnOptions , spawn , stdout , onExit , kill )
12+ import Node.Encoding (Encoding (UTF8))
1413import Node.Stream (onData )
1514
15+ main :: forall eff . Eff
16+ ( cp :: CHILD_PROCESS
17+ , console :: CONSOLE
18+ , err :: EXCEPTION
19+ , buffer :: Buffer.BUFFER
20+ | eff
21+ ) Unit
1622main = do
1723 log " spawns processes ok"
1824 spawnLs
@@ -22,38 +28,59 @@ main = do
2228 log " nonexistent executable: all good."
2329
2430 log " doesn't perform effects too early"
25- ls <- spawn " ls" [" -la" ] defaultSpawnOptions
26- let unused = kill SIGTERM ls
27- onExit ls \exit ->
28- case exit of
29- Normally 0 ->
30- log " All good!"
31- _ -> do
32- log (" Bad exit: expected `Normally 0`, got: " <> show exit)
31+ spawn " ls" [" -la" ] defaultSpawnOptions >>= \ls -> do
32+ let unused = kill SIGTERM ls
33+ onExit ls \exit ->
34+ case exit of
35+ Normally 0 ->
36+ log " All good!"
37+ _ -> do
38+ log (" Bad exit: expected `Normally 0`, got: " <> show exit)
3339
3440 log " kills processes"
35- ls <- spawn " ls" [" -la" ] defaultSpawnOptions
36- kill SIGTERM ls
37- onExit ls \exit ->
38- case exit of
39- BySignal SIGTERM ->
40- log " All good!"
41- _ -> do
42- log (" Bad exit: expected `BySignal SIGTERM`, got: " <> show exit)
41+ spawn " ls" [" -la" ] defaultSpawnOptions >>= \ls -> do
42+ kill SIGTERM ls
43+ onExit ls \exit ->
44+ case exit of
45+ BySignal SIGTERM ->
46+ log " All good!"
47+ _ -> do
48+ log (" Bad exit: expected `BySignal SIGTERM`, got: " <> show exit)
4349
4450 log " exec"
4551 execLs
4652
53+ spawnLs :: forall eff . Eff ( cp :: CHILD_PROCESS
54+ , console :: CONSOLE
55+ , err :: EXCEPTION
56+ , buffer :: Buffer.BUFFER
57+ | eff
58+ ) Unit
4759spawnLs = do
4860 ls <- spawn " ls" [" -la" ] defaultSpawnOptions
4961 onExit ls \exit ->
5062 log $ " ls exited: " <> show exit
5163 onData (stdout ls) (Buffer .toString UTF8 >=> log)
5264
65+ nonExistentExecutable
66+ :: forall eff
67+ . Eff ( console :: CONSOLE
68+ , cp :: CHILD_PROCESS
69+ | eff
70+ ) Unit
71+ -> Eff ( cp :: CHILD_PROCESS
72+ , console :: CONSOLE
73+ | eff
74+ ) Unit
5375nonExistentExecutable done = do
5476 ch <- spawn " this-does-not-exist" [] defaultSpawnOptions
55- onError ch (\err -> logAny err *> done)
77+ onError ch (\err -> log err.code *> done)
5678
79+ execLs :: forall eff . Eff ( cp :: CHILD_PROCESS
80+ , console :: CONSOLE
81+ , buffer :: Buffer.BUFFER
82+ | eff
83+ ) Unit
5784execLs = do
5885 exec " ls >&2" defaultExecOptions \r ->
5986 log " redirected to stderr:" *> (Buffer .toString UTF8 r.stderr >>= log)
0 commit comments