packages feed

katydid-0.1.1.0: test/RelapseSpec.hs

-- | 
-- This module RelapseSpec tests the Relapse module.
module RelapseSpec (
    tests
) where

import qualified Test.Tasty as T
import qualified Test.Tasty.HUnit as HUnit

import Control.Monad.Except (runExcept)

import Relapse
import Json

tests = T.testGroup "Relapse" [
    HUnit.testCase "parseGrammar success" $ either HUnit.assertFailure (\_ -> return ()) $
        runExcept $ Relapse.parseGrammar "a == 1"

    , HUnit.testCase "parseGrammar failure" $ either (\_ -> return ()) (\_ -> HUnit.assertFailure "expected error") $
        runExcept $ Relapse.parseGrammar "{ a : 1 }" 

    , HUnit.testCase "validate success" $ 
        either HUnit.assertFailure (HUnit.assertBool "expected success") $ 
        Relapse.validate <$> 
            runExcept (Relapse.parseGrammar "a == 1") <*> 
            Json.decodeJSON "{\"a\":1}"

    , HUnit.testCase "validate failure" $
        either HUnit.assertFailure (HUnit.assertBool "expected failure" . not) $
        Relapse.validate <$> 
            runExcept (Relapse.parseGrammar "a == 1") <*> 
            Json.decodeJSON "{\"a\":2}"

    , HUnit.testCase "filter" $ case do {
        refs <- runExcept $ Relapse.parseGrammar "a == 1";
        want <- Json.decodeJSON "{\"a\":1}";
        other <- Json.decodeJSON "{\"a\":2}";
        return (Relapse.filter refs [want, other], [want]);
    } of
        (Left err) -> HUnit.assertFailure err
        (Right (got, want)) -> HUnit.assertEqual "expected the same tree" want got

    ]