1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
module ImportExport
( importExportTests
) where
import Prelude.Compat
import Data.Generics (everywhere, mkT)
import Data.Text (strip)
import qualified Data.Text.Lazy.IO as T
import qualified Data.XML.Types as XML
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit ((@=?))
import qualified Text.XML as C
import Text.Feed.Export (xmlFeed)
import Text.Feed.Import (readAtom)
import Text.Feed.Types (Feed)
import Text.RSS.Utils (elementToDoc)
import Paths_feed
importExportTests :: Test
importExportTests =
testGroup "ImportExport" [testImportExport readAtom "tests/files/import_export_atom.xml"]
testImportExport :: (XML.Element -> Maybe Feed) -> FilePath -> Test
testImportExport readFeed fileName =
testCase fileName $ do
input <- T.readFile =<< getDataFileName fileName
let inputXml = C.parseText_ C.def input
let Just feed = readFeed $ C.toXMLElement $ C.documentRoot inputXml
let Just outputXml = elementToDoc $ xmlFeed feed
let output = C.renderText C.def outputXml
let input' = C.renderText C.def $ stripXmlWhitespace inputXml
input' @=? output
stripXmlWhitespace :: C.Document -> C.Document
stripXmlWhitespace = everywhere (mkT stripWhitespaceNodes)
where
stripWhitespaceNodes e = e {C.elementNodes = filter (not . isWhite) (C.elementNodes e)}
isWhite (C.NodeContent t) = strip t == ""
isWhite (C.NodeComment _) = True
isWhite _ = False
|