aboutsummaryrefslogtreecommitdiff
path: root/tp-bbcode/test/Thermoprint/Printout/BBCodeSpec.hs
blob: c10018f403f6736fe3b3e8794f9714b4148a72ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{-# 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 qualified Data.Sequence as Seq (fromList)

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 :: [Block] -> Printout
pOut = pure . Seq.fromList . map Cooked

examples :: [(Text, Either BBCodeError [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 1, Line ("Par2")], Line (JuxtaPos ["Par3", HSpace 1, "Word2"])])
           ]