{-# LANGUAGE TupleSections #-} module UpgradeTest where import Test.Tasty import GHCup.OptParse import Utils upgradeTests :: TestTree upgradeTests = buildTestTree upgradeParseWith ("upgrade", upgradeCheckList) type FullUpgradeOpts = ( UpgradeOpts , Bool -- ^Force update , Bool -- ^Fails after upgrading if the upgraded ghcup binary is shadowed by something else in PATH (useful for CI) ) mkDefaultOptions :: UpgradeOpts -> FullUpgradeOpts mkDefaultOptions = (, False, False) upgradeCheckList :: [(String, FullUpgradeOpts)] upgradeCheckList = [ ("upgrade", mkDefaultOptions UpgradeGHCupDir) , ("upgrade -f", (UpgradeGHCupDir, True, False)) , ("upgrade --force", (UpgradeGHCupDir, True, False)) , ("upgrade --fail-if-shadowed", (UpgradeGHCupDir, False, True)) , ("upgrade -i", mkDefaultOptions UpgradeInplace) , ("upgrade --inplace", mkDefaultOptions UpgradeInplace) , ("upgrade -t ~", mkDefaultOptions $ UpgradeAt "~") , ("upgrade --target ~", mkDefaultOptions $ UpgradeAt "~") , ("upgrade -t ~ -f", (UpgradeAt "~", True, False)) ] upgradeParseWith :: [String] -> IO FullUpgradeOpts upgradeParseWith args = do Upgrade a b c <- parseWith args pure (a, b, c)