mdoc-0.1.0.0: test/Mdoc/GenSpec.hs
{-# OPTIONS_GHC -Wno-ambiguous-fields #-}
-- |
--
-- Module : Mdoc.GenSpec
-- Copyright : (c) 2026 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Mdoc.GenSpec
( spec
) where
import Mdoc.Prelude
import Data.ByteString.Lazy qualified as BSL
import Data.Text.IO qualified as T
import Data.Time (fromGregorian)
import Env.Mdoc qualified as Env
import Mdoc
import Mdoc.Gen
import Mdoc.Gen.Man1
import Mdoc.Gen.Man5
import Mdoc.Gen.Name
import Mdoc.Input (parseMdocBytes)
import Mdoc.Parse (exitParseError)
import Mdoc.Pretty (renderPlain)
import Mdoc.Test.Fixtures
import Mdoc.UpdateMdocdate (updateMdocdateTo)
import OptEnvConf.Mdoc qualified as OptEnvConf
import Options.Applicative.Mdoc qualified as OA
import System.FilePath ((<.>), (</>))
import Test.Hspec
import Test.Hspec.Golden
spec :: Spec
spec = do
describe "genMan1" $ do
it "grep.1"
$ goldenMan1
$ grepBase
& OA.addToMan1 grepOpt
& Env.addToMan1 grepEnv
it "example.1"
$ goldenMan1
$ exampleBase1
& OptEnvConf.addToMan1 exampleOptEnvConf
describe "genMan5" $ do
it "examplerc.5"
$ goldenMan5
$ exampleBase5
& OptEnvConf.addToMan5 exampleOptEnvConf
it "conf.5"
$ goldenMan5
$ confBase
& OptEnvConf.addToMan5 confConf
goldenMan1 :: Man1 -> IO (Golden Mdoc)
goldenMan1 man1 = goldenMan (man1.name.primary <.> "1") <$> genMan1 man1
goldenMan5 :: Man5 -> IO (Golden Mdoc)
goldenMan5 man5 = goldenMan (man5.name.primary <.> "5") <$> genMan5 man5
goldenMan :: FilePath -> Mdoc -> Golden Mdoc
goldenMan path mdoc =
Golden
{ output
, encodePretty = unpack . renderPlain . prettyMdoc
, writeToFile = \fp -> T.writeFile fp . renderPlain . prettyMdoc
, readFromFile = \fp -> either exitParseError pure . parseMdocBytes fp =<< BSL.readFile fp
, goldenFile = "examples" </> path
, actualFile = Nothing
, failFirstTime = False
}
where
output = fixMdocDate mdoc
fixMdocDate :: Mdoc -> Mdoc
fixMdocDate = updateMdocdateTo $ fromGregorian 2026 9 20