packages feed

language-ocaml-0.2.0: test/Language/OCaml/Parser/TestUtils.hs

module Language.OCaml.Parser.TestUtils
  ( mkParsingTest
  , mkParsingTestFromFile
  , parse
  ) where

import Text.Megaparsec
import Test.Tasty
import Test.Tasty.HUnit

import Language.OCaml.Parser

assertParses :: Parser a -> String -> Assertion
assertParses parser input = do
  case parser input of
    Left msg -> assertFailure msg
    Right _  -> return ()

mkParsingTest :: (String -> Either String a) -> String -> TestTree
mkParsingTest parser input = testCase shortInput $ assertParses parser input
  where
    shortInput | length input <= 40 = input
               | otherwise          = take 40 input ++ "..."

mkParsingTestFromFile :: (String -> Either String a) -> FilePath -> TestTree
mkParsingTestFromFile parser fileName =
  testCase fileName $ readFile fileName >>= assertParses parser