packages feed

reflex-dom-th-0.1.0.0: tests/test.hs

import Test.Tasty (defaultMain, TestTree, testGroup)
import Test.Tasty.Golden (goldenVsString, findByExtension)
import System.IO (readFile)
import Reflex.Dom.TH.Parser
import System.FilePath (takeBaseName, replaceExtension)
import qualified Data.ByteString.Lazy as LBS
import qualified Data.ByteString.Lazy.Char8 as L
import Text.Megaparsec

main :: IO ()
main = defaultMain =<< goldenTests


templateToAst :: String -> LBS.ByteString -> LBS.ByteString
templateToAst  path = L.pack . render . parseTemplate path .  L.unpack
  where render (Right x) = show x
        render (Left err) = errorBundlePretty err
  

goldenTests :: IO TestTree
goldenTests = do
  htmlFiles <- findByExtension [".html"] "."
  return $ testGroup "Html Template Parser golden tests"
    [ goldenVsString
        (takeBaseName htmlFile) 
        astFile
        (templateToAst htmlFile  <$> LBS.readFile htmlFile) 
    | htmlFile <- htmlFiles
    , let astFile  = replaceExtension htmlFile ".ast"
    ]