mdoc-0.4.1.2: test/Mdoc/Test/Render.hs
-- |
--
-- Module : Mdoc.Test.Render
-- Copyright : (c) 2026 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Mdoc.Test.Render
( shouldRender
, prettyDescribeds
, prettyDescribed
, renderPlain
) where
import Mdoc.Prelude
import Data.List (sort)
import Data.Text qualified as T
import Mdoc.Data.Described
import Mdoc.Pretty
import Test.Hspec
shouldRender :: (HasCallStack, Pretty a) => a -> [Text] -> Expectation
shouldRender a lns =
renderPlain (pretty a) `shouldBe` T.intercalate "\n" lns
infix 1 `shouldRender`
prettyDescribeds :: (Ord a, Pretty a) => [Described a] -> Doc ann
prettyDescribeds = vsep . map prettyDescribed . sort
-- | @Described@ is rendered to JSON and formatted in-template, so we don't want
-- to have a misleading 'Pretty' instance. So we use this instead.
prettyDescribed :: Pretty a => Described a -> Doc ann
prettyDescribed d = vsep $ catMaybes [Just $ ".It" <+> pretty d.item, pretty <$> d.help]