packages feed

stache-2.1.1: tests/Text/Mustache/Compile/THSpec.hs

{-# LANGUAGE CPP               #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}
{-# LANGUAGE TemplateHaskell   #-}

module Text.Mustache.Compile.THSpec
  ( main
  , spec )
where

import Test.Hspec

import Text.Mustache.Type
import qualified Data.Map                 as M
import qualified Text.Mustache.Compile.TH as TH

#if !MIN_VERSION_base(4,13,0)
import Data.Semigroup ((<>))
#endif

main :: IO ()
main = hspec spec

spec :: Spec
spec = do
  describe "mustache" $
    it "compiles template using QuasiQuotes at compile time" $
      [TH.mustache|From Quasi-Quote!
|]
        `shouldBe` qqTemplate
  describe "compileMustacheText" $
    it "compiles template from text at compile time" $
      $(TH.compileMustacheText "foo" "This is the ‘foo’.\n")
        `shouldBe` fooTemplate
  describe "compileMustacheFile" $
    it "compiles template from file at compile time" $
      $(TH.compileMustacheFile "templates/foo.mustache")
        `shouldBe` fooTemplate
  describe "compileMustacheDir" $
    it "compiles templates from directory at compile time" $
      $(TH.compileMustacheDir "foo" "templates/")
        `shouldBe` (fooTemplate <> barTemplate)

qqTemplate :: Template
qqTemplate = Template "quasi-quoted" $
  M.singleton "quasi-quoted" [TextBlock "From Quasi-Quote!\n"]

fooTemplate :: Template
fooTemplate = Template "foo" $
  M.singleton "foo" [TextBlock "This is the ‘foo’.\n"]

barTemplate :: Template
barTemplate = Template "bar" $
  M.singleton "bar" [TextBlock "And this is the ‘bar’.\n"]