packages feed

language-webidl-0.1.3.0: test/Test.hs

import Test.HUnit
import Language.WebIDL.Parser
import Language.WebIDL.PPrint
import Control.Monad.IO.Class (liftIO)

main :: IO ()
main = runTestTT tests >>= print

tests :: Test
tests = TestList [ TestLabel "WebGL" (testIDL "examples/webgl.idl")
                 , TestLabel "File API" (testIDL "examples/fileapi.idl") ]

testIDL :: FilePath -> Test
testIDL idlpath = TestCase $ do
    text <- liftIO $ readFile idlpath
    case parseIDL text of
        Right defs -> do
            let text' = unlines $ map printDef defs
            case parseIDL text' of
                Right defs' -> assertEqual "Definitions should be equal" defs defs'
                Left err -> assertFailure ("Incorrect parsing of regenerated file: " ++ show err ++ "\n" ++ text')
        Left err -> assertFailure ("Incorrect parsing of original file: " ++ show err)