dzen-dhall-1.0.0: test/DzenDhall/Test/Parser.hs
module DzenDhall.Test.Parser where
import qualified Data.HashMap.Strict as H
import Data.Vector
import Test.Tasty (TestTree, TestName, testGroup)
import Test.Tasty.HUnit
import Text.Parsec
import DzenDhall.Config
import DzenDhall.Data
import DzenDhall.Parser
mkTest :: TestName -> [Token] -> Either ParseError (Bar Marshalled) -> TestTree
mkTest name tokenList expected =
Test.Tasty.HUnit.testCase name $
DzenDhall.Parser.runBarParser tokenList @?= expected
marquee :: Marquee
marquee = Marquee 0 0 True
getTests :: TestTree
getTests =
testGroup "Bar data parsing"
[ mkTest
"parsing #1"
[ TokOpen (OMarquee marquee)
, TokMarkup "txt"
, TokClose
]
(Right $ Bars [ BarMarquee marquee $ Bars [ BarMarkup "txt" ] ])
, mkTest
"parsing #2"
[ TokOpen (OFG $ Color "red")
, TokMarkup "raw"
, TokTxt "txt"
, TokOpen (OMarquee marquee)
, TokSource (Source { updateInterval = Nothing
, command = []
, input = ""
, escape = True
})
, TokClose
, TokClose
]
$ Right $
Bars [ BarProp (FG $ Color "red") $
Bars [ BarMarkup "raw"
, BarText "txt"
, BarMarquee marquee $ Bars
[ BarSource (Source { updateInterval = Nothing
, command = []
, input = ""
, escape = True
})
]
]
]
, let fadeUp = Fade VUp 1 10
slider = (Slider fadeUp fadeUp 1)
in
mkTest
"parsing #3 - slider without separators"
[ TokOpen (OSlider slider)
, TokOpen (OSlider slider)
, TokTxt "text"
, TokClose
, TokClose
]
$ Right $
Bars
[ BarSlider slider $ Data.Vector.fromList
[ Bars
[ BarSlider slider $ Data.Vector.fromList
[ Bars [ BarText "text" ]
]
]
]
]
, let fadeUp = Fade VUp 1 10
slider = (Slider fadeUp fadeUp 1)
in
mkTest
"parsing #4 - slider with separators"
[ TokOpen (OSlider slider)
, TokOpen (OSlider slider)
, TokTxt "a"
, TokSeparator
, TokTxt "b"
, TokClose
, TokSeparator
, TokTxt "c"
, TokClose
]
$ Right $
Bars
[ BarSlider slider $ Data.Vector.fromList
[ Bars
[ BarSlider slider $ Data.Vector.fromList
[ Bars
[ BarText "a"
]
, Bars
[ BarText "b"
]
]
]
, Bars
[ BarText "c"
]
]
]
, let stt = STT mempty in
mkTest "parsing #5 - automaton"
[ TokOpen (OAutomaton "id" stt)
, TokOpen (OStateMapKey "a")
, TokTxt "A"
, TokTxt "A"
, TokClose
, TokOpen (OStateMapKey "b")
, TokTxt "B"
, TokTxt "B"
, TokClose
, TokOpen (OStateMapKey "c")
, TokTxt "C"
, TokTxt "C"
, TokClose
, TokClose
]
$ Right $ Bars
[ BarAutomaton "id" stt $
H.fromList
[ ( "a"
, Bars [ BarText "A"
, BarText "A"
]
)
, ( "b"
, Bars [ BarText "B"
, BarText "B"
]
)
, ( "c"
, Bars [ BarText "C"
, BarText "C"
]
)
]
]
]