module Main where
import Language.ECMAScript3.Parser
import Language.ECMAScript3.PrettyPrint
import Language.ECMAScript3.Syntax
import Language.ECMAScript3.Syntax.Arbitrary
import Language.ECMAScript3.Syntax.Annotations
import Test.QuickCheck
import System.Exit
main =
let qcArgs = Args {maxSuccess = 50
,maxDiscardRatio = 10
,maxSize = 10
,replay = Nothing
,chatty = True}
in quickCheckWithResult qcArgs prettyParseEquivalence >>= \res ->
case res of
Success {} -> putStrLn "All tests passes"
GaveUp {} -> putStrLn "Gave up"
Failure {} -> putStrLn "Test failed" >> exitFailure
NoExpectedFailure {} -> putStrLn "Unexpected failure" >> exitFailure
prettyParseEquivalence :: JavaScript () -> Bool
prettyParseEquivalence js =
case parseScriptFromString "" $ show $ javaScript js of
Left _ -> False
Right parsed -> (reannotate (const ()) parsed) == js