packages feed

hsaml2-0.1: test/XML.hs

module XML
  ( testXML
  , uri
  , pickleElem
  ) where

import Data.Maybe (fromJust)
import Network.URI (URI, parseURIReference)
import qualified Test.HUnit as U

import qualified Text.XML.HXT.Core as HXT
import qualified Text.XML.HXT.HTTP as HXT (withHTTP)
import qualified Text.XML.HXT.DOM.XmlNode as DOM

parseXML :: HXT.XmlPickler a => String -> IO [Either String a]
parseXML u = fmap (map (HXT.unpickleDoc' HXT.xpickle)) $
  HXT.runX $
    HXT.readDocument [HXT.withCheckNamespaces HXT.yes, HXT.withHTTP [], HXT.withRemoveWS HXT.yes] u
    HXT.>>> HXT.processBottomUp (HXT.processAttrl (HXT.none `HXT.when` HXT.isNamespaceDeclAttr))

testXML :: (Eq a, HXT.XmlPickler a, Show a) => String -> a -> U.Test
testXML u a = U.TestCase $
  U.assertEqual u [Right a] =<< parseXML u

uri :: String -> URI
uri = fromJust . parseURIReference

pickleElem :: HXT.PU a -> a -> HXT.XmlTree
pickleElem p = head . DOM.getChildren . HXT.pickleDoc p