packages feed

horizon-spec-0.3.0: test/Spec.hs

{-# 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"