packages feed

dependency-1.2.0.3: test/Spec.hs

{-# LANGUAGE TupleSections #-}

import           Control.Arrow
import           Data.Dependency
import qualified Data.Map        as M
import qualified Data.Set        as S
import           Test.Hspec

free :: Dependency
free = Dependency "free" mempty defV

comonad :: Dependency
comonad = Dependency "comonad" mempty defV

newLens :: Dependency
newLens = Dependency "lens" ((,mempty) <$> ["free", "comonad"]) (Version [0,2,0])

lens :: Dependency
lens = Dependency "lens" ((,mempty) <$> ["free", "comonad"]) defV

defV :: Version
defV = Version [0,1,0]

specNew :: Dependency
specNew = Dependency "spec" mempty (Version [0,2,0])

specOld :: Dependency
specOld = Dependency "spec" ((,LessThanEq (Version [0,1,0])) <$> ["spec"]) (Version [0,1,0])

ghcMod :: Dependency
ghcMod = Dependency "ghc-mod" [("lens", LessThanEq defV)] defV

mapSingles :: [(d, b)] -> [(d, S.Set b)]
mapSingles = fmap (second S.singleton)

set' :: PackageSet Dependency
set' = PackageSet $
    M.singleton "spec" (S.fromList [specOld, specNew])

set :: PackageSet Dependency
set = PackageSet $
    M.fromList (("lens", S.fromList [lens, newLens]) :
        mapSingles [("ghc-mod", ghcMod), ("comonad", comonad), ("free", free)])

main :: IO ()
main = hspec $ parallel $
    describe "resolveDependencies" $ do
    it "correctly resolves dependencies in a package set" $
        resolveDependencies set [newLens] `shouldBe` Right [[free, comonad], [newLens]]
    it "correctly resolves dependencies in a package set" $
        resolveDependencies set [ghcMod] `shouldBe` Right [[free, comonad], [lens], [ghcMod]]
    it "correctly resolves dependencies in a package set" $
        resolveDependencies set' [specOld] `shouldBe` Right [[specOld]]