packages feed

SJW-0.1.2.2: test/Tests.hs

module Tests (
    tests
  ) where

import Distribution.TestSuite
import SJW (compile, source)
import System.FilePath ((</>))
import Text.Printf (printf)

testData :: FilePath
testData = "test" </> "data"

checkResult :: (String, Bool) -> IO Progress
checkResult (dirName, expected) = do
  result <- either failed passed =<< compile (source [testData </> dirName])
  return . Finished $ if result == expected then Pass else Fail (explain message)
  where
    failed s = putStrLn s>> return False
    passed _ = return True
    explain = uncurry (printf "Compilation %sed when it was expected to %s")
    message = if expected then ("fail", "succeed") else ("succeed", "fail")

makeTest :: (String, Bool) -> TestInstance
makeTest (patternName, expected) = testInstance
  where
    testInstance = TestInstance {
          run = checkResult (patternName, expected)
        , name = patternName
        , tags = []
        , options = []
        , setOption = \_ _ -> Right testInstance
      }

tests :: IO [Test]
tests = return $ (Test . makeTest) <$> [
      ("cycle", False)
    , ("diamond", True)
    , ("loop", False)
    , ("q", False)
    , ("simple", True)
    , ("triangle", True)
  ]