{-# 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 (HorizonExport, 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" expectedOutputTest (Proxy @HorizonExport) "sample-package-set-export" expectedOutputTest (Proxy @HorizonExport) "sample-overlay-export"