{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module Main ( main ) where
import Control.Exception (bracket_)
import Horizon.Gen.Nix (horizonGenNix)
import Horizon.Gen.Nix.Options (HorizonCommand (MakePackageSetCommand, OverlayCommand),
HorizonOptions (MkHorizonOptions),
InputFile (MkInputFile),
defaultMakePackageSetOptions,
defaultOverlayOptions,
defaultPackagesDirectory,
optHorizonCommand, optInputFile,
optPackagesDirectory)
import Path (mkRelFile)
import System.Directory (removeFile)
import Test.Syd (Spec, aroundAll_, describe,
doNotRandomiseExecutionOrder,
goldenStringFile, it, sequential,
sydTest)
main :: IO ()
main = sydTest $ doNotRandomiseExecutionOrder $ sequential $ do
samplePackageSet
modifiedPackageSet
sampleOverlay
modifiedOverlay
withSamplePackageSet :: IO a -> IO a
withSamplePackageSet = bracket_ runSamplePackageSet cleanupPackageSet
withModifiedPackageSet :: IO a -> IO a
withModifiedPackageSet = bracket_ runModifiedPackageSet cleanupPackageSet
withSampleOverlay :: IO a -> IO a
withSampleOverlay = bracket_ runSampleOverlay cleanupOverlay
withModifiedOverlay :: IO a -> IO a
withModifiedOverlay = bracket_ runModifiedOverlay cleanupOverlay
runSamplePackageSet :: IO ()
runSamplePackageSet = do
let opts = MkHorizonOptions
{ optHorizonCommand = MakePackageSetCommand defaultMakePackageSetOptions
, optPackagesDirectory = defaultPackagesDirectory
, optInputFile = MkInputFile $(mkRelFile "test/data/sample-package-set/input.dhall")
}
horizonGenNix opts
runModifiedPackageSet :: IO ()
runModifiedPackageSet = do
let opts = MkHorizonOptions
{ optHorizonCommand = MakePackageSetCommand defaultMakePackageSetOptions
, optPackagesDirectory = defaultPackagesDirectory
, optInputFile = MkInputFile $(mkRelFile "test/data/modified-package-set/input.dhall")
}
horizonGenNix opts
runSampleOverlay :: IO ()
runSampleOverlay = do
let opts = MkHorizonOptions
{ optHorizonCommand = OverlayCommand defaultOverlayOptions
, optPackagesDirectory = defaultPackagesDirectory
, optInputFile = MkInputFile $(mkRelFile "test/data/sample-overlay/input.dhall")
}
horizonGenNix opts
runModifiedOverlay :: IO ()
runModifiedOverlay = do
let opts = MkHorizonOptions
{ optHorizonCommand = OverlayCommand defaultOverlayOptions
, optPackagesDirectory = defaultPackagesDirectory
, optInputFile = MkInputFile $(mkRelFile "test/data/modified-overlay/input.dhall")
}
horizonGenNix opts
cleanupPackageSet :: IO ()
cleanupPackageSet = mapM_ removeFile ["initial-packages.nix", "pkgs/lens.nix", "pkgs/Cabal-syntax.nix" ]
cleanupOverlay :: IO ()
cleanupOverlay = mapM_ removeFile ["overlay.nix", "pkgs/lens.nix", "pkgs/Cabal-syntax.nix" ]
samplePackageSet :: Spec
samplePackageSet = describe "sample package set" $ sequential $
aroundAll_ withSamplePackageSet $ do
it "initial-packages.nix" $ goldenStringFile "test/data/sample-package-set/output/initial-packages.nix.golden" (readFile "initial-packages.nix")
it "pkgs/lens.nix" $ goldenStringFile "test/data/sample-package-set/output/pkgs/lens.nix.golden" (readFile "pkgs/lens.nix")
it "pkgs/Cabal-syntax.nix" $ goldenStringFile "test/data/sample-package-set/output/pkgs/Cabal-syntax.nix.golden" (readFile "pkgs/Cabal-syntax.nix")
modifiedPackageSet :: Spec
modifiedPackageSet = describe "modified package set" $ sequential $
aroundAll_ withModifiedPackageSet $ do
it "initial-packages.nix" $ goldenStringFile "test/data/modified-package-set/output/initial-packages.nix.golden" (readFile "initial-packages.nix")
it "pkgs/lens.nix" $ goldenStringFile "test/data/modified-package-set/output/pkgs/lens.nix.golden" (readFile "pkgs/lens.nix")
it "pkgs/Cabal-syntax.nix" $ goldenStringFile "test/data/modified-package-set/output/pkgs/Cabal-syntax.nix.golden" (readFile "pkgs/Cabal-syntax.nix")
sampleOverlay :: Spec
sampleOverlay = describe "sample overlay" $ sequential $
aroundAll_ withSampleOverlay $ do
it "overlay.nix" $ goldenStringFile "test/data/sample-overlay/output/overlay.nix.golden" (readFile "overlay.nix")
it "pkgs/lens.nix" $ goldenStringFile "test/data/sample-overlay/output/pkgs/lens.nix.golden" (readFile "pkgs/lens.nix")
it "pkgs/Cabal-syntax.nix" $ goldenStringFile "test/data/sample-overlay/output/pkgs/Cabal-syntax.nix.golden" (readFile "pkgs/Cabal-syntax.nix")
modifiedOverlay :: Spec
modifiedOverlay = describe "modified overlay" $ sequential $
aroundAll_ withModifiedOverlay $ do
it "overlay.nix" $ goldenStringFile "test/data/modified-overlay/output/overlay.nix.golden" (readFile "overlay.nix")
it "pkgs/lens.nix" $ goldenStringFile "test/data/modified-overlay/output/pkgs/lens.nix.golden" (readFile "pkgs/lens.nix")
it "pkgs/Cabal-syntax.nix" $ goldenStringFile "test/data/modified-overlay/output/pkgs/Cabal-syntax.nix.golden" (readFile "pkgs/Cabal-syntax.nix")