packages feed

mdoc-0.1.0.0: test/Mdoc/Parse/TroffMacroSpec.hs

-- |
--
-- Module      : Mdoc.Parse.TroffMacroSpec
-- Copyright   : (c) 2026 Patrick Brisbin
-- License     : AGPL-3
-- Maintainer  : pbrisbin@gmail.com
-- Stability   : experimental
-- Portability : POSIX
module Mdoc.Parse.TroffMacroSpec
  ( spec
  ) where

import Mdoc.Prelude

import Mdoc.Parse
import Mdoc.Parse.TroffMacro
import Mdoc.Test.Parse
import Mdoc.TroffMacro
import Test.Hspec

spec :: Spec
spec = do
  describe "parseTroffMacro" $ do
    context "Troff .de macros" $ do
      it "handles implicit end, and calling macros" $ do
        parseTest
          (sepEndBy parseTroffMacro eol)
          [ ".de mymacro"
          , ".."
          , ".mymacro"
          ]
          [ TroffMacroDefine "mymacro" Nothing
          , TroffMacroEnd ".."
          , TroffMacroCall "mymacro" []
          ]

      it "handles explicit end, and calling macros" $ do
        parseTest
          (sepEndBy parseTroffMacro eol)
          [ ".de mymacro endmacro"
          , ".endmacro"
          ]
          [ TroffMacroDefine "mymacro" (Just "endmacro")
          , TroffMacroEnd "endmacro"
          ]

      it "handles macros with arguments" $ do
        parseTest
          (sepEndBy parseTroffMacro eol)
          [ ".de mymacro"
          , ".."
          , ".mymacro foo"
          ]
          [ TroffMacroDefine "mymacro" Nothing
          , TroffMacroEnd ".."
          , TroffMacroCall "mymacro" ["foo"]
          ]