packages feed

streaming-commons-0.1.9: test/Data/Streaming/ByteString/BuilderSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module Data.Streaming.ByteString.BuilderSpec (spec) where

import qualified Data.ByteString.Char8 as S
import qualified Data.ByteString.Unsafe as S
import qualified Data.ByteString.Builder as B
import qualified Data.ByteString.Lazy.Char8 as L
import Data.IORef
import Data.Monoid
import Test.Hspec
import Test.Hspec.QuickCheck (prop)

import Data.Streaming.ByteString.Builder

spec :: Spec
spec =
    describe "Data.Streaming.ByteString.Builder" $ do
        prop "toByteStringIO idempotent to toLazyByteString" $ \bss' -> do
            let bss = mconcat (map (B.byteString . S.pack) bss')
            ior <- newIORef []
            toByteStringIOWith 16
                               (\s -> do s' <- S.useAsCStringLen s S.unsafePackCStringLen
                                         modifyIORef ior (s' :))
                               bss
            chunks <- readIORef ior
            L.fromChunks (reverse chunks) `shouldBe` B.toLazyByteString bss