packages feed

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

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