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)