11-- | How to test:
22-- |
33-- | ```
4- -- | spago -x spago-dev.dhall test --exec-args <(head --bytes 1000000 /dev/zero)
4+ -- | spago -x spago-dev.dhall test
55-- | ```
66-- |
77-- | We want to read from a file, not stdin, because stdin has no EOF.
@@ -10,22 +10,22 @@ module Test.Main where
1010import Prelude
1111
1212import Data.Array as Array
13- import Data.Either (Either (..), either )
13+ import Data.Either (Either (..))
14+ import Data.Maybe (Maybe (..))
1415import Effect (Effect )
15- import Effect.Aff (Error , Milliseconds (..), delay , runAff_ )
16+ import Effect.Aff (Error , Milliseconds (..), runAff_ )
1617import Effect.Class (liftEffect )
1718import Effect.Class.Console as Console
1819import Node.Buffer (Buffer , concat )
1920import Node.Buffer as Buffer
2021import Node.Encoding (Encoding (..))
2122import Node.FS.Stream (createReadStream , createWriteStream )
22- import Node.Process (argv , stderr , stdout )
23- import Node.Stream.Aff (noExit , readAll , readN , readSome , unbuffer , write , write' )
23+ import Node.Stream.Aff (readAll , readN , readSome , write )
2424import Partial.Unsafe (unsafePartial )
2525import Test.Spec (describe , it )
2626import Test.Spec.Assertions (shouldEqual )
2727import Test.Spec.Reporter (consoleReporter )
28- import Test.Spec.Runner (runSpec )
28+ import Test.Spec.Runner (defaultConfig , runSpecT )
2929import Unsafe.Coerce (unsafeCoerce )
3030
3131completion :: Either Error (Effect Unit ) -> Effect Unit
@@ -35,51 +35,21 @@ completion = case _ of
3535
3636main :: Effect Unit
3737main = unsafePartial $ do
38- -- Console.log $ unsafeCoerce stdout
39- -- unbuffer stdout
40- -- Console.log $ unsafeCoerce stdout
41-
42- -- runAff_ (either (unsafeCoerce >>> Console.error) (\_ -> pure unit)) do
43- exiter <- noExit
4438 runAff_ completion do
45- write' stdout " ENTER \n "
46- runSpec [consoleReporter] do
39+ void $ runSpecT (defaultConfig {timeout = Just (Milliseconds 10000.0 )}) [consoleReporter] do
4740 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"
41+ it " writes and reads" do
42+ let outfilename = " /tmp/test1.txt"
43+ let magnitude = 100000
6944 outfile <- liftEffect $ createWriteStream outfilename
7045 outstring <- liftEffect $ Buffer .fromString " aaaaaaaaaa" UTF8
71- write outfile $ Array .replicate 1000 outstring
46+ write outfile $ Array .replicate magnitude outstring
7247 infile <- liftEffect $ createReadStream outfilename
73- inputs <- readAll infile
48+ input1 <- readSome infile
49+ input2 <- readN infile (5 * magnitude)
50+ input3 <- readAll infile
51+ let inputs = input1 <> input2 <> input3
7452 input :: Buffer <- liftEffect $ concat inputs
7553 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"
54+ shouldEqual (10 * magnitude) inputSize
8555 pure (pure unit)
0 commit comments