{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main ( main ) where
import Data.Proxy (Proxy (Proxy))
import Data.Text.Encoding (encodeUtf8)
import Dhall (FromDhall, ToDhall, auto, embed,
inject, inputFile)
import Dhall.Pretty (layout, prettyExpr)
import Horizon.Spec (Overlay, PackageSet)
import Prettyprinter.Render.Text (renderStrict)
import Test.Syd (Spec, describe,
doNotRandomiseExecutionOrder, it,
pureGoldenByteStringFile,
sequential, sydTest)
expectedOutputTest
:: forall a.
FromDhall a
=> ToDhall a
=> Proxy a
-> FilePath
-> Spec
expectedOutputTest _ n = describe n $ do
it "expands correctly" $ do
x <- inputFile @a auto $ "test/data/" ++ n ++ "/input.dhall"
let doc = prettyExpr $ embed inject x
let docstr = encodeUtf8 $ renderStrict $ layout doc
pure $ pureGoldenByteStringFile ("test/data/" ++ n ++ "/output.golden") docstr
main :: IO ()
main = sydTest $ doNotRandomiseExecutionOrder $ sequential $ do
expectedOutputTest (Proxy @PackageSet) "sample-package-set"
expectedOutputTest (Proxy @PackageSet) "modified-package-set"
expectedOutputTest (Proxy @Overlay) "sample-overlay"
expectedOutputTest (Proxy @Overlay) "modified-overlay"