packages feed

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"
                 ]
          )
        ]
      ]
  ]