packages feed

horizon-gen-nix-0.4.0: test/Spec.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell   #-}
module Main ( main ) where

import           Control.Exception       (bracket_)
import           Control.Monad           (forM_)
import           Horizon.Gen.Nix         (horizonGenNix)
import           Horizon.Gen.Nix.Options (HorizonOptions (MkHorizonOptions),
                                          InputFile (MkInputFile), optInputFile)
import           Path                    (File, Path, Rel, mkRelFile,
                                          parseRelFile, toFilePath)
import           System.Directory        (removeFile)
import           Test.Syd                (Spec, aroundAll_, describe,
                                          doNotRandomiseExecutionOrder,
                                          goldenStringFile, it, sequential,
                                          sydTest)

outputFilesOverlayRel :: [Path Rel File]
outputFilesOverlayRel =
  [ $(mkRelFile "overlay.nix")
  , $(mkRelFile "pkgs/lens.nix")
  , $(mkRelFile "pkgs/Cabal-syntax.nix")
  , $(mkRelFile "pkgs/network-mux.nix")
  , $(mkRelFile "pkgs/myPackage.nix")
  ]

outputFilesPackageSetRel :: [Path Rel File]
outputFilesPackageSetRel =
  [ $(mkRelFile "initial-packages.nix")
  , $(mkRelFile "pkgs/lens.nix")
  , $(mkRelFile "pkgs/Cabal-syntax.nix")
  , $(mkRelFile "pkgs/network-mux.nix")
  , $(mkRelFile "pkgs/myPackage.nix")
  ]

runHorizonGenNixFor :: FilePath -> IO ()
runHorizonGenNixFor s = do
    fp <- parseRelFile $ "test/data/" ++ s ++ "/input.dhall"
    let opts = MkHorizonOptions { optInputFile = MkInputFile fp }
    horizonGenNix opts

expectedOutputTest :: FilePath -> [Path Rel File] -> Spec
expectedOutputTest s xs = describe s $ sequential $
  aroundAll_ (bracket_ (runHorizonGenNixFor s) (mapM_ (removeFile . toFilePath) xs)) $ forM_ xs $ \x ->
    it (toFilePath x) $
      goldenStringFile
        ("test/data/" ++ s ++ "/output/" ++ toFilePath x ++ ".golden")
        (readFile $ toFilePath x)

main :: IO ()
main = sydTest $ doNotRandomiseExecutionOrder $ sequential $ do
  expectedOutputTest "sample-package-set" outputFilesPackageSetRel
  expectedOutputTest "modified-package-set" outputFilesPackageSetRel
  expectedOutputTest "sample-overlay" outputFilesOverlayRel
  expectedOutputTest "modified-overlay" outputFilesOverlayRel