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