ghcup-0.2.6.2: test/optparse-test/SetTest.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
module SetTest where
import GHCup.OptParse
import GHCup.Input.Parsers (SetToolVersion(..))
import Test.Tasty
import GHCup.Types
import Data.Versions
import Data.List.NonEmpty (NonEmpty ((:|)))
import Utils
setTests :: TestTree
setTests =
testGroup "set"
$ map
(buildTestTree setParseWith)
[ ("ghc", setGhcCheckList)
, ("cabal", setCabalCheckList)
, ("hls", setHlsCheckList)
, ("stack", setStackCheckList)
]
setGhcCheckList :: [(String, SetCommand)]
setGhcCheckList = mapSecond (SetGHC . SetOptions)
[ ("set ghc", SetRecommended)
, ("set ghc 9.2", SetGHCVersion
$ (`TargetVersionReq` Nothing) $ TargetVersion
Nothing
$(versionQ "9.2")
)
, ("set ghc next", SetNext)
, ("set ghc latest", SetToolTag Latest)
, ("set ghc nightly", SetGHCVersion
$ (`TargetVersionReq` Nothing) $ TargetVersion
Nothing
$(versionQ "nightly")
)
, ("set ghc recommended", SetToolTag Recommended)
, ("set ghc prerelease", SetToolTag Prerelease)
, ("set ghc latest-prerelease", SetToolTag LatestPrerelease)
, ("set ghc latest-nightly", SetToolTag LatestNightly)
, ("set ghc javascript-unknown-ghcjs-9.6", SetGHCVersion
$ (`TargetVersionReq` Nothing) $ TargetVersion
(Just "javascript-unknown-ghcjs")
$(versionQ "9.6")
)
, ("set ghc base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
]
setCabalCheckList :: [(String, SetCommand)]
setCabalCheckList = mapSecond (SetCabal . SetOptions)
[ ("set cabal", SetRecommended)
, ("set cabal 3.10", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "3.10"))
, ("set cabal next", SetNext)
, ("set cabal latest", SetToolTag Latest)
, ("set cabal nightly", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly"))
, ("set cabal recommended", SetToolTag Recommended)
, ("set cabal prerelease", SetToolTag Prerelease)
, ("set cabal latest-prerelease", SetToolTag LatestPrerelease)
, ("set cabal latest-nightly", SetToolTag LatestNightly)
, ("set cabal base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set cabal cabal-3.10", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "cabal-3.10"))
]
setHlsCheckList :: [(String, SetCommand)]
setHlsCheckList = mapSecond (SetHLS . SetOptions)
[ ("set hls", SetRecommended)
, ("set hls 2.0", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "2.0"))
, ("set hls next", SetNext)
, ("set hls latest", SetToolTag Latest)
, ("set hls nightly", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly"))
, ("set hls recommended", SetToolTag Recommended)
, ("set hls prerelease", SetToolTag Prerelease)
, ("set hls latest-prerelease", SetToolTag LatestPrerelease)
, ("set hls latest-nightly", SetToolTag LatestNightly)
, ("set hls base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set hls hls-2.0", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "hls-2.0"))
]
setStackCheckList :: [(String, SetCommand)]
setStackCheckList = mapSecond (SetStack . SetOptions)
[ ("set stack", SetRecommended)
, ("set stack 2.9", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "2.9"))
, ("set stack next", SetNext)
, ("set stack latest", SetToolTag Latest)
, ("set stack nightly", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "nightly"))
, ("set stack recommended", SetToolTag Recommended)
, ("set stack prerelease", SetToolTag Prerelease)
, ("set stack latest-prerelease", SetToolTag LatestPrerelease)
, ("set stack latest-nightly", SetToolTag LatestNightly)
, ("set stack base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set stack stack-2.9", SetToolVersion $ (`VersionReq` Nothing) $(versionQ "stack-2.9"))
]
setParseWith :: [String] -> IO SetCommand
setParseWith args = do
Set a <- parseWith args
pure a