packages feed

penntreebank-megaparsec-0.2.0: test/unit/Data/Tree/Parser/Penn/Megaparsec/CharSpec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
module Data.Tree.Parser.Penn.Megaparsec.CharSpec (
    spec
) where

import Test.Hspec
-- import Test.QuickCheck
-- import Control.Exception (evaluate)
import Control.Monad.Identity

import Data.Void (Void)
import Data.Text (Text)
import Data.Tree 
import Text.Megaparsec

import Data.Tree.Parser.Penn.Megaparsec.Char as TC
import Data.Tree.Parser.Penn.Megaparsec.Char.QQ

parser :: (Monad m) => TC.PennTreeParserT Text m Text
parser = TC.pTree

parserUnsafe :: (Monad m) => TC.PennTreeParserT Text m Text
parserUnsafe = TC.pUnsafeTree

spec :: Spec
spec = do
    describe "pTree" $ do
        it "parses" $ do 
            parseTest parser ""
            parseTest parser "()"
            parseTest parser "( )"
            parseTest parser "A"
            parseTest parser "A B V"
            parseTest parser "A (B V)"
            parseTest parser "(A (B V))"
            parseTest parser "( A (B V))"
            parseTest parser "(A (B C (D E)))"
        it "fails against broken trees" $ do
            parseTest parser "(A (B C (D E)"
    describe "pTreeQQ" $ do
        it "parses" $ example $ do
            return [penn| () |]
            return [penn| ( ) |]
            return [penn| A |]
            return [penn| (A (B V)) |]
            return [penn| ( A (B V)) |]
            return [penn| (A (B C (D E))) |]
            return ()
    describe "pUnsafeTree" $ do
        it "parses" $ do 
            parseTest parserUnsafe ""
            parseTest parserUnsafe "()"
            parseTest parserUnsafe "( )"
            parseTest parserUnsafe "A"
            parseTest parserUnsafe "A B V"
            parseTest parserUnsafe "A (B V)"
            parseTest parserUnsafe "(A (B V))"
            parseTest parserUnsafe "(A (B C (D E)))"
        it "fails against broken trees" $ do
            parseTest parserUnsafe "(A (B C (D E)"
    describe "pUnsafeTreeQQ" $ do
        it "parses" $ example $ do
            return [pennUnsafe| () |]
            return [pennUnsafe| ( ) |]
            return [pennUnsafe| A |]
            return [pennUnsafe| (A (B V)) |]
            return [pennUnsafe| ( A (B V)) |]
            return [pennUnsafe| (A (B C (D E))) |]
            return ()