packages feed

prune-juice-0.5: test/Data/Prune/CabalSpec.hs

module Data.Prune.CabalSpec where

import Prelude

import Control.Monad.Logger (runNoLoggingT)
import Data.Foldable (find)
import Data.List (isSuffixOf)
import System.FilePath.TH (fileRelativeToAbsolute)
import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
import qualified Data.Set as Set

import qualified Data.Prune.Types as T

-- the module being tested
import Data.Prune.Cabal

spec :: Spec
spec = describe "Data.Prune.Cabal" $ do
  let cabalProjectFile = $(fileRelativeToAbsolute "../../../cabal.project")
  it "parses .cabal files" $ do
    (_, cabalProject) <- parseCabalProjectFile cabalProjectFile
    [T.Package {..}] <- runNoLoggingT $ parseCabalFiles cabalProject mempty []
    packageName `shouldBe` "prune-juice"
    packageBaseDependencies `shouldSatisfy` Set.member (T.DependencyName "base")
    T.Compilable {..} <- maybe (fail "No compilable with the name \"test\"") pure $ find ((==) (T.CompilableName "test") . T.compilableName) packageCompilables
    compilableType `shouldBe` T.CompilableTypeTest
    compilableDependencies `shouldSatisfy` not . Set.null
    compilableFiles `shouldSatisfy` not . Set.null . Set.filter (isSuffixOf "CabalSpec.hs")