mirror of
https://github.com/commercialhaskell/stackage.git
synced 2026-01-11 23:08:30 +01:00
37 lines
1.2 KiB
Haskell
37 lines
1.2 KiB
Haskell
{-# LANGUAGE OverloadedStrings, NoImplicitPrelude #-}
|
|
module Stackage.BuildPlanSpec (spec) where
|
|
|
|
import Stackage.BuildPlan
|
|
import Stackage.Prelude
|
|
import Stackage.BuildConstraints
|
|
import Stackage.UpdateBuildPlan
|
|
import Test.Hspec
|
|
import qualified Data.Yaml as Y
|
|
import Distribution.Version (anyVersion)
|
|
import qualified Data.Map as Map
|
|
|
|
spec :: Spec
|
|
spec = it "works" $ do
|
|
bc <- defaultBuildConstraints (error "manager should not be used")
|
|
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))
|
|
|
|
bpGithubUsers bp' `shouldBe` bpGithubUsers bp
|
|
when (bp' /= bp) $ error "bp' /= bp"
|
|
bp2 <- updateBuildPlan bp
|
|
when (dropVersionRanges bp2 /= dropVersionRanges bp) $ error "bp2 /= bp"
|
|
where
|
|
dropVersionRanges bp =
|
|
bp { bpPackages = map go $ bpPackages bp }
|
|
where
|
|
go pb = pb { ppConstraints = go' $ ppConstraints pb }
|
|
go' pc = pc { pcVersionRange = anyVersion }
|