{-# LANGUAGE OverloadedStrings #-} import Control.Applicative import Control.Monad import Control.Monad.Trans.Resource import Data.Attoparsec.ByteString.Streaming import Data.ByteString.Streaming import Data.Function import Data.Functor import Data.Maybe import Data.XML.Parser.High as XML import Data.XML.Parser.Low.Entity as XML import Prelude hiding (readFile) import Test.Tasty import Test.Tasty.HUnit import Text.Parser.Combinators main :: IO () main = defaultMain $ testGroup "Unit tests" [ feedCase ] feedCase :: TestTree feedCase = testCase "Feed" $ do (result, _) <- runResourceT $ readFile "test/feed.xml" & parse (runTokenParser parser) result @?= Right "http://example.org/2003/12/13/atom03" where parser = do prolog tag' "feed" anyAttr $ withContent $ do many $ tag' (anyNameExcept "entry") anyAttr anyContent url <- tag' "entry" anyAttr $ withContent $ do many $ tag' (anyNameExcept "link") anyAttr anyContent url <- tag decodeHtmlEntities "link" (const $ attrValue "href") (anyContent $>) many anyTag return url many anyTag return url