packages feed

cabal2nix-2.8.2: test/Main.hs

module Main ( main ) where

import Distribution.Nixpkgs.Haskell.FromCabal
import Distribution.Nixpkgs.Haskell.Derivation
import Distribution.Nixpkgs.Fetch

import Control.Lens
import Distribution.Compiler
import Distribution.PackageDescription
import Distribution.PackageDescription.Parse
import Distribution.System
import Distribution.Verbosity
import Distribution.Version
import Language.Nix
import System.FilePath
import Test.Tasty
import Test.Tasty.Golden
import Text.PrettyPrint.HughesPJClass

main :: IO ()
main = do
  testCases <- findByExtension [".cabal"] "test/golden-test-cases"
  defaultMain $ testGroup "regression-tests" (map regressionTest testCases)

regressionTest :: String -> TestTree
regressionTest cabalFile = do
  let nixFile = cabalFile `replaceExtension` "nix"
      goldenFile = nixFile `addExtension` "golden"

      cabal2nix :: GenericPackageDescription -> Derivation
      cabal2nix gpd = fromGenericPackageDescription
                        (const True)
                        (\i -> Just (binding # (i, path # [i])))
                        (Platform X86_64 Linux)
                        (unknownCompilerInfo (CompilerId GHC (mkVersion [8,2])) NoAbiTag)
                        []
                        []
                        gpd
                      & src .~ DerivationSource
                                 { derivKind     = "url"
                                 , derivUrl      = "http://example.org/"
                                 , derivRevision = ""
                                 , derivHash     = "abc"
                                 }
  goldenVsFileDiff
    nixFile
    (\ref new -> ["diff", "-u", ref, new])
    goldenFile
    nixFile
    (readGenericPackageDescription silent cabalFile >>= writeFile nixFile . prettyShow . cabal2nix)