staversion-0.2.4.0: test/Staversion/Internal/BuildPlan/PantrySpec.hs
module Staversion.Internal.BuildPlan.PantrySpec (main,spec) where
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BSL
import Data.Monoid ((<>))
import Data.Text (unpack)
import System.FilePath ((</>), (<.>))
import Test.Hspec
import Staversion.Internal.BuildPlan.BuildPlanMap
(HasVersions(..), BuildPlanMap)
import qualified Staversion.Internal.BuildPlan.BuildPlanMap as BuildPlanMap
import Staversion.Internal.BuildPlan.Core
( Compiler(..),
mkCompilerVersion,
CoreBuildPlanMap,
parseGHCPkgVersions
)
import Staversion.Internal.BuildPlan.Pantry
( PantryBuildPlanMap,
parseBuildPlanMapYAML,
pantryCompiler, pantryName,
coresToBuildPlanMap
)
import qualified Staversion.Internal.BuildPlan.V1 as V1
import Staversion.Internal.Query (PackageName)
import Staversion.Internal.Version (mkVersion)
import Staversion.Internal.TestUtil (specPackage, stablePList)
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "parseBuildPlanMapYAML" $ do
before (loadBuildPlan ("lts" </> "4" </> "2.yaml")) $ describe "PantryBP lts-4.2" $ do
specify "pantryCompiler" $ \pbp -> do
pantryCompiler pbp `shouldBe` (Compiler "ghc" $ mkCompilerVersion [7,10,3])
specify "pantryName" $ \pbp -> do
pantryName pbp `shouldBe` Just "lts-4.2"
specPackage "wrap" (Just [0,0,0])
specPackage "x509" (Just [1,6,3])
specPackage "type-level-numbers" (Just [0,1,1,1])
specPackage "fooooobar" (Nothing)
specPackage "base" (Nothing)
specPackage "ghc" (Nothing)
before (loadBuildPlan ("lts" </> "15" </> "3.yaml")) $ describe "PantryBP lts-15.3" $ do
specify "pantryCompiler" $ \pbp -> do
pantryCompiler pbp `shouldBe` (Compiler "ghc" $ mkCompilerVersion [8,8,2])
specify "pantryName" $ \pbp -> do
pantryName pbp `shouldBe` Nothing
specPackage "x509" (Just [1,7,5])
specPackage "type-level-numbers" (Just [0,1,1,1])
specPackage "base" (Nothing)
specPackage "ghc" (Nothing)
before (loadCompleteBuildPlan ("lts" </> "4" </> "2.yaml")) $ describe "PantryBP lts-4.2 + Core" $ do
specPackage "wrap" (Just [0,0,0])
specPackage "x509" (Just [1,6,3])
specPackage "type-level-numbers" (Just [0,1,1,1])
specPackage "fooooobar" (Nothing)
specPackage "base" (Just [4,8,2,0])
specPackage "ghc" (Just [7,10,3])
specV1Compatibility "lts-4.2"
loadBuildPlan :: FilePath -> IO PantryBuildPlanMap
loadBuildPlan file_subpath = parseIO =<< BS.readFile filepath
where
filepath = "test" </> "data" </> "build_plan_pantry" </> file_subpath
parseIO content = either fail return $ parseBuildPlanMapYAML content
loadCompleteBuildPlan :: FilePath -> IO BuildPlanMap
loadCompleteBuildPlan filename = do
pbp <- loadBuildPlan filename
cores <- loadCores
either fail return $ coresToBuildPlanMap cores pbp
where
pkg_versions = "test" </> "data" </> "build_plan_ghc" </> "pkg_versions.txt"
loadCores = parseCoresIO =<< BSL.readFile pkg_versions
parseCoresIO = either fail return . parseGHCPkgVersions
specV1Compatibility :: FilePath -> SpecWith BuildPlanMap
specV1Compatibility exp_v1_resolver = do
specify spec_name $ \pantry_bp -> do
v1_bp <- either fail return =<< V1.loadBuildPlanMapYAML ("test" </> "data" </> "build_plan_v1" </> exp_v1_resolver <.> "yaml")
stablePList pantry_bp `shouldMatchList` stablePList v1_bp
where
spec_name = exp_v1_resolver ++ ": V1 and Pantry should return the same BuildPlanMap"