{- Copyright (C) 2009 John Millikin This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . -} module Main () where import Test.HUnit import Text.XML.LibXML.SAX allTests = "allTests" ~: TestList [beginTests, endTests, textTests, otherTests, incrementalTests] beginTests = "beginTests" ~: TestList [testBegin, testBeginNS, testBeginPrefix] endTests = "endTests" ~: TestList [testEnd, testEndNS, testEndPrefix] textTests = "textTests" ~: TestList [testText, testPredefinedEntity, testNumericEntity] otherTests = "otherTests" ~: TestList [testProcessingInstruction, testComment, testCDATA, testError] incrementalTests = "incrementalTests" ~: TestList [incrBegin, incrEnd, incrText] testBegin = TestCase $ do parser <- mkParser [event] <- parse parser "" False BeginElement (QName "" "" "test") [] @=? event testBeginNS = TestCase $ do parser <- mkParser [event] <- parse parser "" False BeginElement (QName "urn:test" "" "test") [] @=? event testBeginPrefix = TestCase $ do parser <- mkParser [event] <- parse parser "" False BeginElement (QName "urn:test" "t" "test") [] @=? event testEnd = TestCase $ do parser <- mkParser [_, event] <- parse parser "" True EndElement (QName "" "" "test") @=? event testEndNS = TestCase $ do parser <- mkParser [_, event] <- parse parser "" True EndElement (QName "urn:test" "" "test") @=? event testEndPrefix = TestCase $ do parser <- mkParser [_, event] <- parse parser "" True EndElement (QName "urn:test" "t" "test") @=? event testText = TestCase $ do parser <- mkParser [_, event, _] <- parse parser "text here" True Characters "text here" @=? event testPredefinedEntity = TestCase $ do parser <- mkParser events <- parse parser "text & here" True let events' = init . tail $ events [Characters "text ", Characters "&", Characters " here"] @=? events' testNumericEntity = TestCase $ do parser <- mkParser events <- parse parser "text < here" True let events' = init . tail $ events [Characters "text ", Characters "<", Characters " here"] @=? events' testProcessingInstruction = TestCase $ do parser <- mkParser events <- parse parser "" True ProcessingInstruction "instr" "version='1.0'" @=? head events testComment = TestCase $ do parser <- mkParser events <- parse parser "" True Comment " comment here " @=? head events testCDATA = TestCase $ do parser <- mkParser events <- parse parser "]]>" True let events' = init . tail $ events [Characters ""] @=? events' testError = TestCase $ do parser <- mkParser events <- parse parser "" True [ParseError "StartTag: invalid element name\n"] @=? events incrBegin = TestCase $ do parser <- mkParser let parse' = parse parser [] <- parse' "" False BeginElement (QName "" "" "test") [] @=? event incrEnd = TestCase $ do parser <- mkParser let parse' = parse parser [_] <- parse' "" True EndElement (QName "" "" "test") @=? event incrText = TestCase $ do parser <- mkParser let parse' = parse parser [_] <- parse' "text" False [] <- parse' " more text" False [event, _] <- parse' "" True Characters "text more text" @=? event main = do runTestTT allTests