packages feed

pro-abstract-0.1.0.0: test-suite/test-pro-abstract/Main.hs

module Main (main) where

import ProAbstract

import Optics.Core
import Prelude hiding (break)

import Control.Monad (when)
import Data.Text (Text)
import Hedgehog (Property, checkParallel, discover, property, withTests, (===))
import System.Exit (exitFailure)

main :: IO ()
main = checkParallel $$discover >>= \ok -> when (not ok) exitFailure

frag :: Text -> Fragment ()
frag x = Fragment{ fragmentText = x, fragmentAnnotation = () }

inlinePlain :: Text -> Inline ()
inlinePlain = InlinePlain . frag

inlineFork :: Lines () -> Inline ()
inlineFork x = InlineFork $ TaggedLines{ linesTag = Tag{ tagName = "x", tagMetadata = mempty, tagAnnotation = () }, taggedLines = x }

para :: Lines () -> Block ()
para x = BlockParagraph Paragraph{ paragraphAnnotation = (), paragraphContent = x }

btag :: Blocks () -> Block ()
btag x = BlockFork TaggedBlocks{ blocksTag = Tag{ tagName = "x", tagMetadata = mempty, tagAnnotation = () }, taggedBlocks = x }

tbtag :: Blocks () -> BlockTag ()
tbtag x = BlockTagFork TaggedBlocks{ blocksTag = Tag{ tagName = "x", tagMetadata = mempty, tagAnnotation = () }, taggedBlocks = x }

prop_ex1 :: Property
prop_ex1 = withTests 1 $ property $ do
    x <- pure $ inlinePlain "abc"
    preview (tagless TextStanza) x === Just ["abc"]

prop_ex2 :: Property
prop_ex2 = withTests 1 $ property $ do
    x <- pure $ InlineFork $
        TaggedLines
            { linesTag = Tag{ tagName = "x", tagMetadata = mempty, tagAnnotation = () }
            , taggedLines = [[inlinePlain "abc", inlinePlain "def"]]
            }
    preview (fork % content % (tagless TextStanza)) x === Just ["abcdef"]

prop_ex3 :: Property
prop_ex3 = withTests 1 $ property $ do
    x <- pure $ inlineFork [[inlinePlain "abc", inlinePlain "def"], [inlinePlain "ghi"]]
    preview (taglessContent TextStanza) x === Just ["abcdef", "ghi"]

prop_ex4 :: Property
prop_ex4 = withTests 1 $ property $ do
    x <- pure $ inlineFork [[inlinePlain "abc"]]
    preview (taglessContent TextStanza) x === Just ["abc"]

prop_ex5 :: Property
prop_ex5 = withTests 1 $ property $ do
    x <- pure $ inlineFork [[inlinePlain "abc", inlineFork []]]
    preview (taglessContent TextStanza) x === Nothing

prop_ex6 :: Property
prop_ex6 = withTests 1 $ property $ do
    x <- pure $ para [[inlinePlain "abc", inlineFork []]]
    preview (tagless TextStanza) x === Nothing

prop_ex7 :: Property
prop_ex7 = withTests 1 $ property $ do
    x <- pure $ para [[inlinePlain "abc", inlinePlain "def"]]
    preview (tagless TextStanza) x === Just ["abcdef"]

prop_ex8 :: Property
prop_ex8 = withTests 1 $ property $ do
    x <- pure $ btag [para [[inlinePlain "abc", inlinePlain "def"]]]
    preview (taglessContent TextStanza) x === Just ["abcdef"]

prop_ex9 :: Property
prop_ex9 = withTests 1 $ property $ do
    x <- pure $ ([para [[inlinePlain "abc", inlinePlain "def"]]] :: Blocks ())
    preview (tagless TextStanza) x === Just ["abcdef"]

prop_ex10 :: Property
prop_ex10 = withTests 1 $ property $ do
    x <- pure $ tbtag $ [para [[inlinePlain "abc"]]]
    preview (taglessContent TextStanza) x === Just ["abc"]

prop_ex11 :: Property
prop_ex11 = withTests 1 $ property $ do
    x <- pure $ tbtag $ [para [[inlinePlain "abc", inlinePlain "def"]]]
    preview (fork % content % (tagless TextStanza)) x === Just ["abcdef"]

prop_ex12 :: Property
prop_ex12 = withTests 1 $ property $ do
    x <- pure $ tbtag $ [para [[inlinePlain "abc", inlinePlain "def"], [inlinePlain "ghi"]]]
    preview (fork % content % (tagless TextStanza)) x === Just ["abcdef", "ghi"]