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"
]