Skip to content

Commit d95a511

Browse files
committed
Merge branch 'aa/careful-handles' into develop
2 parents cc19f06 + 469712d commit d95a511

File tree

3 files changed

+36
-27
lines changed

3 files changed

+36
-27
lines changed

ChangeLog.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Revision history for reflex-process
22

3+
## 0.3.3.1
4+
5+
* Support for reflex-0.9.3
6+
37
## 0.3.3.0
48

59
* Add `Lines` for keeping track of accumulated output, including both terminated and unterminated lines

reflex-process.cabal

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cabal-version: >=1.10
22
name: reflex-process
3-
version: 0.3.3.0
3+
version: 0.3.3.1
44
synopsis: Reflex FRP interface for running system processes
55
description:
66
Run and interact with system processes from within a Reflex FRP application.

test/Main.hs

+31-26
Original file line numberDiff line numberDiff line change
@@ -31,34 +31,40 @@ main = hspec $ do
3131
timeoutWrapperAsync (checkFRPBlocking $ P.proc "cat" []) `shouldReturn` Right (Just Exit)
3232
it "isn't blocked by a downstream blocking process" $ do
3333
timeoutWrapperAsync (checkFRPBlocking $ P.proc "sleep" ["infinity"]) `shouldReturn` Right (Just Exit)
34-
it "sends messages on stdin and receives messages on stdout and stderr" $ runHeadlessApp $ do
35-
let
36-
-- Produces an event when the given message is seen on both stdout and stderr of the given process events
37-
getSawMessage procOut msg = do
38-
let filterMsg = mapMaybe (guard . (== msg))
39-
seen <- foldDyn ($) (False, False) $
40-
mergeWith (.)
41-
[ first (const True) <$ filterMsg (_process_stdout procOut)
42-
, second (const True) <$ filterMsg (_process_stderr procOut)
43-
]
44-
pure $ mapMaybe (guard . (== (True, True))) $ updated seen
45-
46-
rec
47-
procOut <- createProcess (P.proc "tee" ["/dev/stderr"]) $ ProcessConfig send never
48-
aWasSeen <- getSawMessage procOut "a\n"
49-
bWasSeen <- getSawMessage procOut "b\n"
50-
pb <- getPostBuild
34+
it "sends messages on stdin and receives messages on stdout and stderr" $ do
35+
() <- runHeadlessApp $ do
5136
let
52-
send = leftmost
53-
[ SendPipe_Message "a\n" <$ pb
54-
, SendPipe_Message "b\n" <$ aWasSeen
55-
, SendPipe_LastMessage "c\n" <$ bWasSeen
56-
]
37+
-- Produces an event when the given message is seen on both stdout and stderr of the given process events
38+
getSawMessage procOut msg = do
39+
let filterMsg = mapMaybe (guard . (== msg))
40+
seen <- foldDyn ($) (False, False) $
41+
mergeWith (.)
42+
[ first (const True) <$ filterMsg (_process_stdout procOut)
43+
, second (const True) <$ filterMsg (_process_stderr procOut)
44+
]
45+
pure $ mapMaybe (guard . (== (True, True))) $ updated seen
46+
47+
rec
48+
procOut <- createProcess (P.proc "tee" ["/dev/stderr"]) $ ProcessConfig send never
49+
aWasSeen <- getSawMessage procOut "a\n"
50+
bWasSeen <- getSawMessage procOut "b\n"
51+
pb <- getPostBuild
52+
let
53+
send = leftmost
54+
[ SendPipe_Message "a\n" <$ pb
55+
, SendPipe_Message "b\n" <$ aWasSeen
56+
, SendPipe_LastMessage "c\n" <$ bWasSeen
57+
]
5758

58-
getSawMessage procOut "c\n"
59+
getSawMessage procOut "c\n"
60+
pure ()
5961

60-
it "sends signals" $ runHeadlessApp $ void . _process_exit <$> sendSignalTest
61-
it "fires event when signal is sent" $ runHeadlessApp $ void . _process_signal <$> sendSignalTest
62+
it "sends signals" $ do
63+
() <- runHeadlessApp $ void . _process_exit <$> sendSignalTest
64+
pure ()
65+
it "fires event when signal is sent" $ do
66+
() <- runHeadlessApp $ void . _process_signal <$> sendSignalTest
67+
pure ()
6268

6369
where
6470
sendSignalTest :: MonadHeadlessApp t m => m (Process t ByteString ByteString)
@@ -68,7 +74,6 @@ main = hspec $ do
6874
liftIO $ threadDelay 1000000 *> signalTrigger 15 -- SIGTERM
6975
pure procOut
7076

71-
7277
-- This datatype signals that the FRP network was able to exit on its own.
7378
data Exit = Exit deriving (Show, Eq)
7479

0 commit comments

Comments
 (0)