@@ -10,56 +10,76 @@ module Test.Main where
1010import Prelude
1111
1212import Data.Array as Array
13- import Data.Either (either )
13+ import Data.Either (Either (..), either )
1414import Effect (Effect )
15- import Effect.Aff (runAff_ )
15+ import Effect.Aff (Error , Milliseconds (..), delay , runAff_ )
1616import Effect.Class (liftEffect )
1717import Effect.Class.Console as Console
1818import Node.Buffer (Buffer , concat )
1919import Node.Buffer as Buffer
2020import Node.Encoding (Encoding (..))
2121import Node.FS.Stream (createReadStream , createWriteStream )
22- import Node.Process (argv )
23- import Node.Stream.Aff (readAll , readN , readSome , write )
22+ import Node.Process (argv , stderr , stdout )
23+ import Node.Stream.Aff (noExit , readAll , readN , readSome , unbuffer , write , write' )
2424import Partial.Unsafe (unsafePartial )
2525import Test.Spec (describe , it )
2626import Test.Spec.Assertions (shouldEqual )
2727import Test.Spec.Reporter (consoleReporter )
2828import Test.Spec.Runner (runSpec )
2929import Unsafe.Coerce (unsafeCoerce )
3030
31+ completion :: Either Error (Effect Unit ) -> Effect Unit
32+ completion = case _ of
33+ Left e -> Console .error (unsafeCoerce e)
34+ Right f -> f
35+
3136main :: Effect Unit
3237main = unsafePartial $ do
33- runAff_ (either (unsafeCoerce >>> Console .error) (\_ -> pure unit)) $ runSpec [consoleReporter] do
34- describe " Node.Stream.Aff" do
35- it " reads 1" do
36- infile <- liftEffect $ createReadStream =<< pure <<< flip Array .unsafeIndex 2 =<< argv
37- inputs1 <- readN infile 500000
38- bytesRead1 :: Int <- liftEffect $ Array .foldM (\a b -> (a+_) <$> Buffer .size b) 0 inputs1
39- shouldEqual 500000 bytesRead1
40- inputs2 <- readSome infile
41- inputs3 <- readAll infile
42- let inputs = inputs1 <> inputs2 <> inputs3
43- -- TODO read after EOF will hang
44- -- inputs4 <- readAll infile
45- -- inputs4 <- readSome infile
46- -- inputs4 <- readN infile 10
47- -- let inputs = inputs1 <> inputs2 <> inputs3 <> inputs4
48- bytesRead :: Int
49- <- liftEffect $ Array.foldM (\a b -> (a +_ ) <$> Buffer.size b ) 0 inputs
50- shouldEqual 1000000 bytesRead
51- input :: Buffer <- liftEffect $ concat inputs
52- inputSize <- liftEffect $ Buffer .size input
53- shouldEqual 1000000 inputSize
54- it " writes 1" do
55- let outfilename = " outfile.txt"
56- outfile <- liftEffect $ createWriteStream outfilename
57- outstring <- liftEffect $ Buffer .fromString " aaaaaaaaaa" UTF8
58- write outfile $ Array .replicate 1000 outstring
59- infile <- liftEffect $ createReadStream outfilename
60- inputs <- readAll infile
61- input :: Buffer <- liftEffect $ concat inputs
62- inputSize <- liftEffect $ Buffer .size input
63- shouldEqual 10000 inputSize
64-
38+ -- Console.log $ unsafeCoerce stdout
39+ -- unbuffer stdout
40+ -- Console.log $ unsafeCoerce stdout
6541
42+ -- runAff_ (either (unsafeCoerce >>> Console.error) (\_ -> pure unit)) do
43+ exiter <- noExit
44+ runAff_ completion do
45+ write' stdout " ENTER \n "
46+ runSpec [consoleReporter] do
47+ describe " Node.Stream.Aff" do
48+ it " reads 1" do
49+ infile <- liftEffect $ createReadStream =<< pure <<< flip Array .unsafeIndex 2 =<< argv
50+ inputs1 <- readN infile 500000
51+ bytesRead1 :: Int <- liftEffect $ Array .foldM (\a b -> (a+_) <$> Buffer .size b) 0 inputs1
52+ shouldEqual 500000 bytesRead1
53+ inputs2 <- readSome infile
54+ inputs3 <- readAll infile
55+ let inputs = inputs1 <> inputs2 <> inputs3
56+ -- TODO read after EOF will hang
57+ -- inputs4 <- readAll infile
58+ -- inputs4 <- readSome infile
59+ -- inputs4 <- readN infile 10
60+ -- let inputs = inputs1 <> inputs2 <> inputs3 <> inputs4
61+ bytesRead :: Int
62+ <- liftEffect $ Array.foldM (\a b -> (a +_ ) <$> Buffer.size b ) 0 inputs
63+ shouldEqual 1000000 bytesRead
64+ input :: Buffer <- liftEffect $ concat inputs
65+ inputSize <- liftEffect $ Buffer .size input
66+ shouldEqual 1000000 inputSize
67+ it " writes 1" do
68+ let outfilename = " outfile.txt"
69+ outfile <- liftEffect $ createWriteStream outfilename
70+ outstring <- liftEffect $ Buffer .fromString " aaaaaaaaaa" UTF8
71+ write outfile $ Array .replicate 1000 outstring
72+ infile <- liftEffect $ createReadStream outfilename
73+ inputs <- readAll infile
74+ input :: Buffer <- liftEffect $ concat inputs
75+ inputSize <- liftEffect $ Buffer .size input
76+ shouldEqual 10000 inputSize
77+ do
78+ -- b <- liftEffect $ Buffer.create 0
79+ b <- liftEffect $ Buffer .fromString " EXIT \n " UTF8
80+ write stdout $ Array .replicate 10 b
81+ -- delay (Milliseconds 2000.0)
82+ -- write' stdout "EXIT\n"
83+ -- liftEffect exiter
84+ -- pure $ Console.log "log completion"
85+ pure (pure unit)
0 commit comments