{-# LANGUAGE OverloadedStrings #-} module Main ( main ) where import Data.ByteString (fromStrict) import Data.Text.Encoding (encodeUtf8) import Dhall (auto, embed, inject, input) import Dhall.Pretty (layout, prettyExpr) import Horizon.Spec (Overlay, PackageSet) import Prettyprinter.Render.Text (renderStrict) import Test.Tasty (TestTree, defaultMain, testGroup) import Test.Tasty.Golden (goldenVsString) main :: IO () main = defaultMain tests tests :: TestTree tests = testGroup "Tests" [ samplePackageSet , modifiedPackageSet , sampleOverlay , modifiedOverlay ] samplePackageSet :: TestTree samplePackageSet = goldenVsString "sample package set" "./test/data/sample-package-set/output.golden" $ do x <- input @PackageSet auto "./test/data/sample-package-set/input.dhall" let doc = prettyExpr $ embed inject x pure $ fromStrict $ encodeUtf8 $ renderStrict (layout doc) modifiedPackageSet :: TestTree modifiedPackageSet = goldenVsString "modified package set" "./test/data/modified-package-set/output.golden" $ do x <- input @PackageSet auto "./test/data/modified-package-set/input.dhall" let doc = prettyExpr $ embed inject x pure $ fromStrict $ encodeUtf8 $ renderStrict (layout doc) sampleOverlay :: TestTree sampleOverlay = goldenVsString "sample overlay" "./test/data/sample-overlay/output.golden" $ do x <- input @Overlay auto "./test/data/sample-overlay/input.dhall" let doc = prettyExpr $ embed inject x pure $ fromStrict $ encodeUtf8 $ renderStrict (layout doc) modifiedOverlay :: TestTree modifiedOverlay = goldenVsString "modified overlay" "./test/data/modified-overlay/output.golden" $ do x <- input @Overlay auto "./test/data/modified-overlay/input.dhall" let doc = prettyExpr $ embed inject x pure $ fromStrict $ encodeUtf8 $ renderStrict (layout doc)