packages feed

atom-conduit-0.7.0.0: test/GoldenTests.hs

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
import           Control.Monad.Trans.Resource
import           Data.Conduit
import           Data.Conduit.Combinators     as Conduit (decodeUtf8,
                                                          sourceFile)
import           Data.Default
import qualified Data.Text.Lazy.Encoding      as Lazy
import           System.FilePath
import           Test.Tasty
import           Test.Tasty.Golden            (findByExtension, goldenVsString)
import           Text.Atom.Conduit.Parse      as Parser
import           Text.Atom.Conduit.Render     as Renderer
import           Text.Atom.Types
import           Text.Pretty.Simple
import qualified Text.XML.Stream.Parse        as XML

main :: IO ()
main = defaultMain =<< do
  xmlFiles <- findByExtension [".xml"] "."

  return $ testGroup "Atom golden tests" $ do
    xmlFile <- xmlFiles
    let goldenFile = addExtension xmlFile ".golden"
        f file = fmap (Lazy.encodeUtf8 . pShowNoColor) $ runResourceT $ runConduit $ sourceFile file .| Conduit.decodeUtf8 .| XML.parseText def .| XML.force "Invalid <feed>" atomFeed
    return $ goldenVsString xmlFile goldenFile $ f xmlFile