stackage/test/Stackage2/BuildPlanSpec.hs
2014-12-08 11:27:46 +02:00

37 lines
1.1 KiB
Haskell

{-# LANGUAGE OverloadedStrings, NoImplicitPrelude #-}
module Stackage2.BuildPlanSpec (spec) where
import Stackage2.BuildPlan
import Stackage2.Prelude
import Stackage2.BuildConstraints
import Stackage2.UpdateBuildPlan
import Test.Hspec
import qualified Data.Yaml as Y
import Control.Exception (evaluate)
import Distribution.Version (anyVersion)
import qualified Data.Map as Map
spec :: Spec
spec = it "works" $ do
bc <- defaultBuildConstraints
bp <- newBuildPlan bc
let bs = Y.encode bp
ebp' = Y.decodeEither bs
bp' <- either error return ebp'
let allPackages = Map.keysSet (bpPackages bp) ++ Map.keysSet (bpPackages bp')
forM_ allPackages $ \name ->
(name, lookup name (bpPackages bp')) `shouldBe`
(name, lookup name (bpPackages (() <$ bp)))
bp' `shouldBe` (() <$ bp)
bp2 <- updateBuildPlan bp
dropVersionRanges bp2 `shouldBe` dropVersionRanges bp
where
dropVersionRanges bp =
bp { bpPackages = map go $ bpPackages bp }
where
go pb = pb { pbPackageConstraints = go' $ pbPackageConstraints pb }
go' pc = pc { pcVersionRange = anyVersion }