packages feed

fay-0.10.0.0: src/Test/Api.hs

{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}

module Test.Api (tests) where

import           Language.Fay                   hiding (compileFile)
import           Language.Fay.Compiler
import           Paths_fay

import           Data.Default
import           Data.Maybe
import           Language.Haskell.Exts.Syntax
import           System.FilePath
import           Test.Framework
import           Test.Framework.Providers.HUnit
import           Test.Framework.TH
import           Test.HUnit                     (Assertion, assertBool)
import           Test.Util

tests :: Test
tests = $testGroupGenerator

case_imports :: Assertion
case_imports = do
  res <- compileFile defConf fp
  assertBool "Could not compile file with imports" (isRight res)

case_importedList :: Assertion
case_importedList = do
  res <- compileFile defConf fp
  case res of
    Left err -> error (show err)
    Right r -> assertBool "RecordImport_Export was not added to stateImported" $
                 isJust $ lookup (ModuleName "RecordImport_Export") (stateImported r)

fp :: FilePath
fp = "tests/RecordImport_Import.hs"

defConf :: CompileConfig
defConf = def { configTypecheck = False, configDirectoryIncludes = ["tests"] }

compileFile :: CompileConfig -> FilePath -> IO (Either CompileError CompileState)
compileFile config filein = do
  srcdir <- fmap (takeDirectory . takeDirectory . takeDirectory) (getDataFileName "src/Language/Fay/Stdlib.hs")
  hscode <- readFile filein
  result <- compileViaStr filein
    (config { configDirectoryIncludes = configDirectoryIncludes config ++ [srcdir] })
    compileToplevelModule hscode
  return $ either Left (Right . snd) result