{-# LANGUAGE OverloadedStrings #-} module ConduitSpec (main, spec) where import Network.Wai.Handler.Warp.Conduit import Network.Wai.Handler.Warp.Types import Control.Monad (
replicateM
) import
Test.Hspec
import Data.IORef as I import qualified
Data.ByteString
as S
main
::
IO
()
main
=
hspec
spec
spec
::
Spec
spec
=
describe
"conduit"
$
do
it
"IsolatedBSSource"
$
do
ref
<-
newIORef
$
map
S.singleton
[1..50]
src
<-
mkSource
$
do
x
<-
readIORef
ref
case
x
of [] ->
return
S.empty
y
:
z
-> do
writeIORef
ref
z
return
y
isrc
<-
mkISource
src
40
x
<-
replicateM
20
$
readISource
isrc
S.concat
x
`shouldBe`
S.pack
[1..20]
y
<-
replicateM
40
$
readISource
isrc
S.concat
y
`shouldBe`
S.pack
[21..40]
z
<-
replicateM
40
$
readSource
src
S.concat
z
`shouldBe`
S.pack
[41..50]
it
"chunkedSource"
$
do
ref
<-
newIORef
$
"5\r\n12345\r\n3\r\n678\r\n0\r\n\r\nBLAH"
src
<-
mkSource
$
do
x
<-
readIORef
ref
writeIORef
ref
S.empty
return
x
csrc
<-
mkCSource
src
x
<-
replicateM
15
$
readCSource
csrc
S.concat
x
`shouldBe`
"12345678"
y
<-
replicateM
15
$
readSource
src
S.concat
y
`shouldBe`
"BLAH"
it
"chunk boundaries"
$
do
ref
<-
newIORef
[
"5\r\n"
,
"12345\r\n3\r"
,
"\n678\r\n0\r\n"
,
"\r\nBLAH"
]
src
<-
mkSource
$
do
x
<-
readIORef
ref
case
x
of [] ->
return
S.empty
y
:
z
-> do
writeIORef
ref
z
return
y
csrc
<-
mkCSource
src
x
<-
replicateM
15
$
readCSource
csrc
S.concat
x
`shouldBe`
"12345678"
y
<-
replicateM
15
$
readSource
src
S.concat
y
`shouldBe`
"BLAH"