import Test.Cabal.Prelude

import Control.Monad
import Distribution.Version
import Distribution.Simple.LocalBuildInfo
import Distribution.Package
import Distribution.Types.Dependency
import Distribution.PackageDescription
import Language.Haskell.Extension (Language(..))
import Distribution.Utils.Path

-- Test that setup parses '^>=' operator correctly.
-- Don't bother with the cabal-install test as the build-depends
-- is updated by this point so that we lost the caret parsing.
main = setupTest $ do
    -- Don't run this for GHC 7.0/7.2, which doesn't have a recent
    -- enough version of pretty. (But this is pretty dumb.)
    skipUnlessGhcVersion ">= 7.3"
    assertOutputDoesNotContain "Parse of field 'build-depends' failed"
        =<< setup' "configure" []
    lbi <- getLocalBuildInfoM

    let Just gotLib = library (localPkgDescr lbi)
        bi = libBuildInfo gotLib
    assertEqual "defaultLanguage" (Just Haskell2010) (defaultLanguage bi)
    forM_ (targetBuildDepends bi) $ \(Dependency pn vr _) ->
        when (pn == mkPackageName "pretty") $
            assertEqual "targetBuildDepends/pretty"
                         vr (majorBoundVersion (mkVersion [1,1,1,0]))
    assertEqual "hsSourceDirs" [sameDirectory] (hsSourceDirs bi)
    return ()
