dhall-docs-0.0.1: tasty/Main.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -Wno-unused-imports #-}
module Main (main) where
import Data.Map.Strict (Map)
import Data.Text (Text)
import Dhall.Docs.Core
import Path (Dir, File, Path, Rel, (</>))
import Test.Tasty (TestTree)
import qualified Control.Monad
import qualified Data.Map.Strict as Map
import qualified Data.Text
import qualified Data.Text.IO as Text.IO
import qualified GHC.IO.Encoding
import qualified Path
import qualified Path.IO
import qualified Test.Tasty
import qualified Test.Tasty.Silver as Silver
import qualified Test.Tasty.Silver.Interactive as Silver
import qualified Text.PrettyPrint as Pretty
import qualified Text.XML.HaXml.Html.Parse as HaXml
import qualified Text.XML.HaXml.Pretty as HaXml
main :: IO ()
main = do
GHC.IO.Encoding.setLocaleEncoding GHC.IO.Encoding.utf8
input <- getPackageContents
let GeneratedDocs _ docs = generateDocsPure "test-package" input
let docsMap = Map.fromList docs
Silver.defaultMain $ testTree docsMap
getDirContents :: Path Rel Dir -> IO [(Path Rel File, Text)]
getDirContents dataDir = do
files <- snd <$> Path.IO.listDirRecurRel dataDir
Control.Monad.forM files $ \file -> do
contents <- Text.IO.readFile $ Path.fromRelFile $ dataDir </> file
return (file, contents)
goldenDir :: Path Rel Dir
goldenDir = $(Path.mkRelDir "./tasty/data/golden")
getPackageContents :: IO [(Path Rel File, Text)]
getPackageContents = getDirContents $(Path.mkRelDir "./tasty/data/package")
testTree :: Map (Path Rel File) Text -> TestTree
testTree docsMap =
Test.Tasty.testGroup "dhall-docs"
$ map makeTest $ Map.assocs docsMap
where
makeTest :: (Path Rel File, Text) -> TestTree
makeTest (testFile, text) =
Silver.goldenVsAction testName goldenFilePath action converter
where
goldenFilePath = Path.fromRelFile $ goldenDir </> testFile
testName = Path.fromRelFile testFile
action = return prettyHtmlDoc
converter = Data.Text.pack
prettyHtmlDoc = Pretty.render
$ HaXml.document
$ HaXml.htmlParse testName (Data.Text.unpack text)