packages feed

hix-0.7.0: test/Hix/Test/CabalTest.hs

module Hix.Test.CabalTest where

import Control.Monad.Trans.Except (runExceptT)
import qualified Data.ByteString as ByteString
import Distribution.Package (Dependency)
import qualified Distribution.PackageDescription
import Hedgehog ((===))
import Language.Haskell.Extension (
  Extension (DisableExtension, EnableExtension),
  KnownExtension (AllowAmbiguousTypes, ApplicativeDo),
  )
import Path (relfile, toFilePath, (</>))
import Path.IO (withSystemTempDir)

import Hix.Cabal (parseCabal)
import qualified Hix.Data.Dep as Dep
import Hix.Test.CabalFile (testCabal)
import Hix.Test.Utils (UnitTest)

target :: [Extension]
target =
  [EnableExtension AllowAmbiguousTypes, DisableExtension ApplicativeDo]

deps :: [Dependency]
deps =
  Dep.toCabal <$> ["Cabal", "base >=4.12 && <5", "semigroups >=1"]

test_cabal :: UnitTest
test_cabal = do
  Right pkg <- liftIO $ withSystemTempDir "hix-unit" \ tmp -> do
    let cabalFile = tmp </> [relfile|test.cabal|]
    ByteString.writeFile (toFilePath cabalFile) testCabal
    runExceptT (parseCabal cabalFile)
  let lib = fold pkg.condLibrary
  deps === lib.condTreeData.libBuildInfo.targetBuildDepends
  deps === lib.condTreeConstraints
  target === lib.condTreeData.libBuildInfo.defaultExtensions