{-# LANGUAGE OverloadedStrings #-}
module XML.Canonical (tests) where
import qualified Data.ByteString as BS
import qualified Test.HUnit as U
import qualified Text.XML.HXT.Core as HXT
import SAML2.XML.Canonical
canonicalizeXML :: CanonicalizationAlgorithm -> String -> Bool -> IO [BS.ByteString]
canonicalizeXML c f ent = HXT.runX $
(HXT.readDocument [HXT.withCheckNamespaces HXT.yes, HXT.withValidate HXT.no, HXT.withCanonicalize HXT.no, HXT.withSubstDTDEntities ent] f
HXT.>>> HXT.arrIO (canonicalize c Nothing Nothing))
testC14N :: CanonicalizationAlgorithm -> String -> Bool -> BS.ByteString -> U.Test
testC14N c f ent s = U.TestCase $
U.assertEqual (show c ++ ' ' : f) [s] =<< canonicalizeXML c f ent
tests :: U.Test
tests = U.test
[ testC14N (CanonicalXML10 False) "test/XML/noncanonical1.xml" False
"\nHello, world!\n"
, testC14N (CanonicalXML10 True) "test/XML/noncanonical1.xml" False
"\nHello, world!\n\n\n"
, testC14N (CanonicalXML10 False) "test/XML/noncanonical2.xml" False
"\n \n A B \n \n A\n \n B\n A B \n C\n \n"
, testC14N (CanonicalXML10 False) "test/XML/noncanonical3.xml" False
"\n \n \n \n \n \n \n \n \n \n \n \n \n"
, testC14N (CanonicalXML10 False) "test/XML/noncanonical4.xml" False
"\n First line
\nSecond line\n 2\n value>\"0\" && value<\"10\" ?\"valid\":\"error\"\n "0" && value<"10" ?"valid":"error"\">valid\n \n \n \n"
, testC14N (CanonicalXML10 False) "test/XML/noncanonical5.xml" True
"\n Hello, world!\n"
, testC14N (CanonicalXML10 False) "test/XML/noncanonical6.xml" False
"\194\169"
-- , testC14N (CanonicalXML10 False) "test/XML/noncanonical7.xml"
]