packages feed

countable-1.1: test/Golden.hs

module Golden where

import Data.ByteString.Builder
import Data.ByteString.Lazy.Char8
import Data.IORef
import Test.Tasty
import Test.Tasty.Golden

accumulate :: Monoid a => ((a -> IO ()) -> IO r) -> IO a
accumulate f = do
    ref <- newIORef mempty
    _ <- f $ \a1 -> modifyIORef ref (\a0 -> mappend a0 a1)
    readIORef ref

goldenVsWrite :: TestName -> FilePath -> ((ByteString -> IO ()) -> IO a) -> TestTree
goldenVsWrite name path action =
    goldenVsString name path $ fmap toLazyByteString $ accumulate $ \write -> action (write . lazyByteString)

goldenVsWriteString :: TestName -> FilePath -> ((String -> IO ()) -> IO a) -> TestTree
goldenVsWriteString name path action = goldenVsWrite name path $ \write -> action (write . pack)