@@ -3,12 +3,13 @@ module Test.Main where
33import Prelude
44
55import Data.Either (Either (..))
6- import Data.Maybe (Maybe (..), fromJust , isNothing , isJust )
6+ import Data.Maybe (Maybe (..), fromJust , isJust , isNothing )
77import Effect (Effect )
88import Effect.Console (log )
9+ import Effect.Exception (error )
910import Node.Buffer as Buffer
1011import Node.Encoding (Encoding (..))
11- import Node.Stream (Duplex , Readable , Writable , onDataString , end , writeString , pipe , onDataEither , onData , setEncoding , setDefaultEncoding , read , onReadable , readString )
12+ import Node.Stream (Duplex , Readable , Writable , destroyWithError , end , onData , onDataEither , onDataString , onError , onReadable , pipe , read , readString , setDefaultEncoding , setEncoding , writeString )
1213import Partial.Unsafe (unsafePartial )
1314import Test.Assert (assert , assert' )
1415
@@ -39,6 +40,12 @@ main = do
3940 log " test pipe"
4041 _ <- testPipe
4142
43+ log " test write"
44+ testWrite
45+
46+ log " test end"
47+ testEnd
48+
4249 log " test manual reads"
4350 testReads
4451
@@ -129,7 +136,7 @@ testPipe = do
129136 _ <- unzip `pipe` sOut
130137
131138 writeString sIn UTF8 testString \_ -> do
132- end sIn do
139+ end sIn \_ -> do
133140 onDataString sOut UTF8 \str -> do
134141 assertEqual str testString
135142
@@ -140,3 +147,39 @@ foreign import createGunzip :: Effect Duplex
140147
141148-- | Create a PassThrough stream, which simply writes its input to its output.
142149foreign import passThrough :: Effect Duplex
150+
151+ testWrite :: Effect Unit
152+ testWrite = do
153+ hasError
154+ noError
155+ where
156+ hasError = do
157+ w1 <- writableStreamBuffer
158+ _ <- onError w1 (const $ pure unit)
159+ void $ end w1 $ const $ pure unit
160+ void $ writeString w1 UTF8 " msg" \err -> do
161+ assert' " writeString - should have error" $ isJust err
162+
163+ noError = do
164+ w1 <- writableStreamBuffer
165+ void $ writeString w1 UTF8 " msg1" \err -> do
166+ assert' " writeString - should have no error" $ isNothing err
167+ void $ end w1 (const $ pure unit)
168+
169+ testEnd :: Effect Unit
170+ testEnd = do
171+ hasError
172+ noError
173+ where
174+ hasError = do
175+ w1 <- writableStreamBuffer
176+ _ <- onError w1 (const $ pure unit)
177+ void $ writeString w1 UTF8 " msg" \_ -> do
178+ _ <- destroyWithError w1 $ error " Problem"
179+ end w1 \err -> do
180+ assert' " end - should have error" $ isJust err
181+
182+ noError = do
183+ w1 <- writableStreamBuffer
184+ end w1 \err -> do
185+ assert' " end - should have no error" $ isNothing err
0 commit comments