{-# LANGUAGE OverloadedStrings, OverloadedLists #-} {-# LANGUAGE StandaloneDeriving #-} module Thermoprint.Printout.BBCodeSpec (spec) where import Test.Hspec import Test.Hspec.QuickCheck (prop) import Test.QuickCheck.Instances import Thermoprint.Printout.BBCode import Thermoprint.Printout import Data.Text (Text) import qualified Data.Text.Lazy as TL (pack) import Data.String (IsString(..)) import Control.Monad (zipWithM_) import Data.Monoid ((<>)) import Data.Function (on) import Data.Sequence (Seq) instance Eq Block where (==) = (==) `on` cotext deriving instance Eq Chunk instance IsString Line where fromString = (\(Right l) -> l) . text . TL.pack spec :: Spec spec = do zipWithM_ example [1..] examples where example n (s, ts) = let str = "Example " <> show n in specify str $ bbcode s == (pOut <$> ts) pOut :: Seq Block -> Printout pOut = fmap (pure . Cooked) examples :: [(Text, Either BBCodeError (Seq Block))] examples = [ ("Hello World!" , Right [Line (JuxtaPos ["Hello", HSpace 1, "World!"])]) , ("Hello [hspace width=2/] World!" , Right [Line (JuxtaPos ["Hello", HSpace 4, "World!"])]) , ("Par1\n\nPar2\n\nPar3 Word2" , Right [Line ("Par1"), Line ("Par2"), Line (JuxtaPos ["Par3", HSpace 1, "Word2"])]) , ("Par1 [hspace=3/]\n\n[vspace=2/]Par2\n\nPar3 Word2" , Right [Line (JuxtaPos ["Par1", HSpace 4]), NewlSep [VSpace 2, Line ("Par2")], Line (JuxtaPos ["Par3", HSpace 1, "Word2"])]) ]