From c92875882ae86e409c32460c90c2fa39df45de6b Mon Sep 17 00:00:00 2001 From: Lei Zhu Date: Sun, 23 Jul 2023 16:30:25 +0800 Subject: [PATCH] rm test --- app/ghcup/GHCup/OptParse/Rm.hs | 3 +- ghcup.cabal | 1 + test/optparse-test/Main.hs | 2 + test/optparse-test/RmTest.hs | 80 ++++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 test/optparse-test/RmTest.hs diff --git a/app/ghcup/GHCup/OptParse/Rm.hs b/app/ghcup/GHCup/OptParse/Rm.hs index bfacb40..39344ba 100644 --- a/app/ghcup/GHCup/OptParse/Rm.hs +++ b/app/ghcup/GHCup/OptParse/Rm.hs @@ -50,6 +50,7 @@ data RmCommand = RmGHC RmOptions | RmCabal Version | RmHLS Version | RmStack Version + deriving (Eq, Show) @@ -61,7 +62,7 @@ data RmCommand = RmGHC RmOptions data RmOptions = RmOptions { ghcVer :: GHCTargetVersion - } + } deriving (Eq, Show) diff --git a/ghcup.cabal b/ghcup.cabal index 04a4d9b..03d0b47 100644 --- a/ghcup.cabal +++ b/ghcup.cabal @@ -423,6 +423,7 @@ test-suite ghcup-optparse-test ConfigTest InstallTest UnsetTest + RmTest default-language: Haskell2010 ghc-options: -Wall build-depends: base, ghcup, ghcup-optparse, tasty, tasty-hunit, optparse-applicative, versions, text, uri-bytestring diff --git a/test/optparse-test/Main.hs b/test/optparse-test/Main.hs index 51eb318..9e26b0d 100644 --- a/test/optparse-test/Main.hs +++ b/test/optparse-test/Main.hs @@ -7,6 +7,7 @@ import qualified ChangeLogTest import qualified ConfigTest import qualified InstallTest import qualified UnsetTest +import qualified RmTest main :: IO () main = defaultMain $ testGroup "ghcup" @@ -16,4 +17,5 @@ main = defaultMain $ testGroup "ghcup" , ConfigTest.configTests , InstallTest.installTests , UnsetTest.unsetTests + , RmTest.rmTests ] diff --git a/test/optparse-test/RmTest.hs b/test/optparse-test/RmTest.hs new file mode 100644 index 0000000..4ef25e2 --- /dev/null +++ b/test/optparse-test/RmTest.hs @@ -0,0 +1,80 @@ +{-# LANGUAGE OverloadedStrings #-} + +module RmTest where + +import Test.Tasty +import GHCup.OptParse +import Utils +import GHCup.Types +import Data.List.NonEmpty (NonEmpty ((:|))) +import Data.Versions + + +rmTests :: TestTree +rmTests = + testGroup "rm" + $ map (buildTestTree rmParseWith) + [ ("old-style", oldStyleCheckList) + , ("ghc", rmGhcCheckList) + , ("cabal", rmCabalCheckList) + , ("hls", rmHlsCheckList) + , ("stack", rmStackCheckList) + ] + +oldStyleCheckList :: [(String, Either RmCommand RmOptions)] +oldStyleCheckList = mapSecond (Right . RmOptions) + [ -- failed with ("rm", xxx) + ("rm 9.2.8", mkTVer (mkVersion $ (Digits 9 :| []) :| [Digits 2 :| [], Digits 8 :| []])) + , ("rm ghc-9.2.8", GHCTargetVersion (Just "ghc") (mkVersion $ (Digits 9 :| []) :| [Digits 2 :| [], Digits 8 :| []])) + ] + +rmGhcCheckList :: [(String, Either RmCommand RmOptions)] +rmGhcCheckList = mapSecond (Left . RmGHC . RmOptions) + [ -- failed with ("rm ghc", xxx) + ("rm ghc 9.2.8", mkTVer (mkVersion $ (Digits 9 :| []) :| [Digits 2 :| [], Digits 8 :| []])) + , ("rm ghc ghc-9.2.8", GHCTargetVersion (Just "ghc") (mkVersion $ (Digits 9 :| []) :| [Digits 2 :| [], Digits 8 :| []])) + ] + +rmCabalCheckList :: [(String, Either RmCommand RmOptions)] +rmCabalCheckList = mapSecond (Left . RmCabal) + [ -- failed with ("rm cabal", xxx) + ("rm cabal 3.10", mkVersion $ (Digits 3 :| []) :| [Digits 10 :| []]) + , ("rm cabal cabal-3.10", Version + { _vEpoch = Nothing + , _vChunks = (Str "cabal" :| []) :| [] + , _vRel = [Digits 3 :| [], Digits 10 :| []] + , _vMeta = Nothing + } + ) + ] + +rmHlsCheckList :: [(String, Either RmCommand RmOptions)] +rmHlsCheckList = mapSecond (Left . RmHLS) + [ -- failed with ("rm hls", xxx) + ("rm hls 2.0", mkVersion $ (Digits 2 :| []) :| [Digits 0 :| []]) + , ("rm hls hls-2.0", Version + { _vEpoch = Nothing + , _vChunks = (Str "hls" :| []) :| [] + , _vRel = [Digits 2 :| [], Digits 0 :| []] + , _vMeta = Nothing + } + ) + ] + +rmStackCheckList :: [(String, Either RmCommand RmOptions)] +rmStackCheckList = mapSecond (Left . RmStack) + [ -- failed with ("rm stack", xxx) + ("rm stack 2.9.1", mkVersion $ (Digits 2 :| []) :| [Digits 9 :| [], Digits 1 :| []]) + , ("rm stack stack-2.9.1", Version + { _vEpoch = Nothing + , _vChunks = (Str "stack" :| []) :| [] + , _vRel = [Digits 2 :| [], Digits 9 :| [], Digits 1 :| []] + , _vMeta = Nothing + } + ) + ] + +rmParseWith :: [String] -> IO (Either RmCommand RmOptions) +rmParseWith args = do + Rm a <- parseWith args + pure a