packages feed

cabal2nix-2.9: 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.Parsec
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
  -- TODO: run this test with all kinds of setLocaleEncoding values to ensure we don't
  -- depend on the system environment: https://github.com/NixOS/cabal2nix/issues/333
  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)
                        mempty
                        []
                        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)