packages feed

staversion-0.1.3.1: test/Staversion/Internal/CabalSpec.hs

module Staversion.Internal.CabalSpec (main,spec) where

import System.FilePath ((</>), (<.>))
import Test.Hspec

import Staversion.Internal.Cabal (loadCabalFile, BuildDepends(..), Target(..))

main :: IO ()
main = hspec spec

shouldBeParsedTo :: FilePath -> [BuildDepends] -> IO ()
shouldBeParsedTo cabal_file expectation = do
  got_deps <- either error return  =<< loadCabalFile ("test" </> "data" </> cabal_file)
  got_deps `shouldBe` expectation

spec :: Spec
spec = describe "loadCabalFile" $ do
  it "should load library, executable and test-suite targets" $ do
    "doctest.cabal_test" `shouldBeParsedTo`
      [ BuildDepends { depsTarget = TargetLibrary,
                       depsPackages = [ "base",
                                        "base-compat",
                                        "ghc",
                                        "syb",
                                        "deepseq",
                                        "directory",
                                        "filepath",
                                        "process",
                                        "ghc-paths",
                                        "transformers"
                                      ]
                     },
        BuildDepends { depsTarget = TargetExecutable "doctest",
                       depsPackages = [ "base",
                                        "doctest"
                                      ]
                     },
        BuildDepends { depsTarget = TargetTestSuite "spec",
                       depsPackages = [ "base",
                                        "ghc",
                                        "syb",
                                        "deepseq",
                                        "directory",
                                        "filepath",
                                        "process",
                                        "ghc-paths",
                                        "transformers",
                                        "base-compat",
                                        "HUnit",
                                        "hspec",
                                        "QuickCheck",
                                        "stringbuilder",
                                        "silently",
                                        "setenv",
                                        "with-location"
                                      ]
                     },
        BuildDepends { depsTarget = TargetTestSuite "doctests",
                       depsPackages = [ "base", "doctest"
                                      ]
                     }
      ]
  it "should merge conditional build-depends" $ do
    "conduit.cabal_test" `shouldBeParsedTo`
      [ BuildDepends { depsTarget = TargetLibrary,
                       depsPackages = [ "base",
                                        "resourcet",
                                        "exceptions",
                                        "lifted-base",
                                        "transformers-base",
                                        "transformers",
                                        "mtl",
                                        "mmorph",
                                        "monad-control",
                                        "void"
                                      ]
                     },
        BuildDepends { depsTarget = TargetTestSuite "test",
                       depsPackages = [ "conduit",
                                        "base",
                                        "hspec",
                                        "QuickCheck",
                                        "transformers",
                                        "mtl",
                                        "resourcet",
                                        "containers",
                                        "exceptions",
                                        "safe",
                                        "void"
                                      ]
                     },
        BuildDepends { depsTarget = TargetBenchmark "optimize-201408",
                       depsPackages = [ "base",
                                        "conduit",
                                        "vector",
                                        "deepseq",
                                        "containers",
                                        "transformers",
                                        "hspec",
                                        "mwc-random",
                                        "criterion",
                                        "kan-extensions"
                                      ]
                     },
        BuildDepends { depsTarget = TargetBenchmark "unfused",
                       depsPackages = [ "base",
                                        "conduit",
                                        "criterion",
                                        "transformers"
                                      ]
                     }
      ]

  it ( "should handle format with curly-braces."
       ++ "For now, open braces should be at line ends (except for trailing white spaces),"
       ++ " and close braces should be in their own lines (except for leading white spaces"
       ++ " and trailing else block)"
     ) $ do
    "braces.cabal_test" `shouldBeParsedTo`
      [ BuildDepends { depsTarget = TargetLibrary,
                       depsPackages = [ "pack-a", "pack-b", "pack-c", "pack-d", "pack-e"
                                      ]
                     },
        BuildDepends { depsTarget = TargetExecutable "braces-else",
                       depsPackages = [ "base", "pack-a", "pack-b", "pack-c", "pack-d"
                                      ]
                     },
        BuildDepends { depsTarget = TargetTestSuite "braces-nest",
                       depsPackages = [ "base", "pack-a", "pack-b", "pack-c"
                                      ]
                     }
      ]