refactor: use upstream TH constructors

This commit is contained in:
Colin Woodbury 2023-10-13 17:35:39 +09:00 committed by Julian Ospald
parent eae197ccb3
commit 1981a12e67
No known key found for this signature in database
GPG Key ID: 4275CDA6A29BED43
8 changed files with 91 additions and 101 deletions

View File

@ -9,6 +9,7 @@ import Utils
import Test.Tasty.HUnit import Test.Tasty.HUnit
import Control.Monad.IO.Class import Control.Monad.IO.Class
import GHCup.Types import GHCup.Types
import Data.Versions (versionQ)
changeLogTests :: TestTree changeLogTests :: TestTree
changeLogTests = testGroup "changelog" $ map (uncurry check) checkList changeLogTests = testGroup "changelog" $ map (uncurry check) checkList
@ -31,7 +32,7 @@ checkList =
(Just $ GHCVersion (Just $ GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "9.2")) $(versionQ "9.2"))
) )
, ("changelog recommended", ChangeLogOptions False Nothing (Just $ ToolTag Recommended)) , ("changelog recommended", ChangeLogOptions False Nothing (Just $ ToolTag Recommended))
, ("changelog -t cabal recommended", ChangeLogOptions False (Just Cabal) (Just $ ToolTag Recommended)) , ("changelog -t cabal recommended", ChangeLogOptions False (Just Cabal) (Just $ ToolTag Recommended))
@ -39,7 +40,7 @@ checkList =
(Just $ GHCVersion (Just $ GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "3.10.1.0")) $(versionQ "3.10.1.0"))
) )
, ("changelog 2023-07-22", ChangeLogOptions False Nothing (Just (ToolDay (read "2023-07-22")))) , ("changelog 2023-07-22", ChangeLogOptions False Nothing (Just (ToolDay (read "2023-07-22"))))
] ]

View File

@ -60,12 +60,12 @@ compileGhcCheckList = mapSecond CompileGHC
[ ("compile ghc -v 9.4.5 -b 9.2.8", baseOptions) [ ("compile ghc -v 9.4.5 -b 9.2.8", baseOptions)
, ("compile ghc -g a32db0b -b 9.2.8", mkDefaultGHCCompileOptions , ("compile ghc -g a32db0b -b 9.2.8", mkDefaultGHCCompileOptions
(GHC.GitDist $ GitBranch "a32db0b" Nothing) (GHC.GitDist $ GitBranch "a32db0b" Nothing)
(Left $(verQ "9.2.8")) (Left $(versionQ "9.2.8"))
) )
, ("compile ghc -g a32db0b -b 9.2.8 -r https://gitlab.haskell.org/ghc/ghc.git", , ("compile ghc -g a32db0b -b 9.2.8 -r https://gitlab.haskell.org/ghc/ghc.git",
mkDefaultGHCCompileOptions mkDefaultGHCCompileOptions
(GHC.GitDist $ GitBranch "a32db0b" (Just "https://gitlab.haskell.org/ghc/ghc.git")) (GHC.GitDist $ GitBranch "a32db0b" (Just "https://gitlab.haskell.org/ghc/ghc.git"))
(Left $(verQ "9.2.8")) (Left $(versionQ "9.2.8"))
) )
, ("compile ghc -g a32db0b -r https://gitlab.haskell.org/ghc/ghc.git -b /usr/bin/ghc-9.2.2", , ("compile ghc -g a32db0b -r https://gitlab.haskell.org/ghc/ghc.git -b /usr/bin/ghc-9.2.2",
mkDefaultGHCCompileOptions mkDefaultGHCCompileOptions
@ -74,7 +74,7 @@ compileGhcCheckList = mapSecond CompileGHC
) )
, ("compile ghc --remote-source-dist https://gitlab.haskell.org/ghc/ghc.git -b 9.2.8", mkDefaultGHCCompileOptions , ("compile ghc --remote-source-dist https://gitlab.haskell.org/ghc/ghc.git -b 9.2.8", mkDefaultGHCCompileOptions
(GHC.RemoteDist [uri|https://gitlab.haskell.org/ghc/ghc.git|]) (GHC.RemoteDist [uri|https://gitlab.haskell.org/ghc/ghc.git|])
(Left $(verQ "9.2.8")) (Left $(versionQ "9.2.8"))
) )
, (baseCmd <> "-j20", baseOptions{GHC.jobs = Just 20}) , (baseCmd <> "-j20", baseOptions{GHC.jobs = Just 20})
, (baseCmd <> "--jobs 10", baseOptions{GHC.jobs = Just 10}) , (baseCmd <> "--jobs 10", baseOptions{GHC.jobs = Just 10})
@ -87,8 +87,8 @@ compileGhcCheckList = mapSecond CompileGHC
, (baseCmd <> "--cross-target armv7-unknown-linux-gnueabihf", baseOptions{GHC.crossTarget = Just "armv7-unknown-linux-gnueabihf"}) , (baseCmd <> "--cross-target armv7-unknown-linux-gnueabihf", baseOptions{GHC.crossTarget = Just "armv7-unknown-linux-gnueabihf"})
, (baseCmd <> "-- --enable-unregisterised", baseOptions{GHC.addConfArgs = ["--enable-unregisterised"]}) , (baseCmd <> "-- --enable-unregisterised", baseOptions{GHC.addConfArgs = ["--enable-unregisterised"]})
, (baseCmd <> "--set", baseOptions{GHC.setCompile = True}) , (baseCmd <> "--set", baseOptions{GHC.setCompile = True})
, (baseCmd <> "-o 9.4.5-p1", baseOptions{GHC.ovewrwiteVer = Just $(verQ "9.4.5-p1")}) , (baseCmd <> "-o 9.4.5-p1", baseOptions{GHC.ovewrwiteVer = Just $(versionQ "9.4.5-p1")})
, (baseCmd <> "--overwrite-version 9.4.5-p1", baseOptions{GHC.ovewrwiteVer = Just $(verQ "9.4.5-p1")}) , (baseCmd <> "--overwrite-version 9.4.5-p1", baseOptions{GHC.ovewrwiteVer = Just $(versionQ "9.4.5-p1")})
, (baseCmd <> "-f make", baseOptions{GHC.buildFlavour = Just "make"}) , (baseCmd <> "-f make", baseOptions{GHC.buildFlavour = Just "make"})
, (baseCmd <> "--flavour make", baseOptions{GHC.buildFlavour = Just "make"}) , (baseCmd <> "--flavour make", baseOptions{GHC.buildFlavour = Just "make"})
, (baseCmd <> "--hadrian", baseOptions{GHC.buildSystem = Just Hadrian}) , (baseCmd <> "--hadrian", baseOptions{GHC.buildSystem = Just Hadrian})
@ -108,8 +108,8 @@ compileGhcCheckList = mapSecond CompileGHC
baseOptions :: GHCCompileOptions baseOptions :: GHCCompileOptions
baseOptions = baseOptions =
mkDefaultGHCCompileOptions mkDefaultGHCCompileOptions
(GHC.SourceDist $(verQ "9.4.5")) (GHC.SourceDist $(versionQ "9.4.5"))
(Left $(verQ "9.2.8")) (Left $(versionQ "9.2.8"))
compileHlsCheckList :: [(String, CompileCommand)] compileHlsCheckList :: [(String, CompileCommand)]
compileHlsCheckList = mapSecond CompileHLS compileHlsCheckList = mapSecond CompileHLS
@ -137,7 +137,7 @@ compileHlsCheckList = mapSecond CompileHLS
) )
, ("compile hls --source-dist 2.0.0.0 --ghc 9.2.8", , ("compile hls --source-dist 2.0.0.0 --ghc 9.2.8",
mkDefaultHLSCompileOptions mkDefaultHLSCompileOptions
(HLS.SourceDist $(verQ "2.0.0.0")) (HLS.SourceDist $(versionQ "2.0.0.0"))
[ghc928] [ghc928]
) )
, ("compile hls --remote-source-dist https://github.com/haskell/haskell-language-server/archive/refs/tags/2.0.0.1.tar.gz --ghc 9.2.8", , ("compile hls --remote-source-dist https://github.com/haskell/haskell-language-server/archive/refs/tags/2.0.0.1.tar.gz --ghc 9.2.8",
@ -147,15 +147,15 @@ compileHlsCheckList = mapSecond CompileHLS
) )
, ("compile hls -v 2.0.0.0 --ghc latest", , ("compile hls -v 2.0.0.0 --ghc latest",
mkDefaultHLSCompileOptions mkDefaultHLSCompileOptions
(HLS.HackageDist $(verQ "2.0.0.0")) (HLS.HackageDist $(versionQ "2.0.0.0"))
[ToolTag Latest] [ToolTag Latest]
) )
, (baseCmd <> "-j20", baseOptions{HLS.jobs = Just 20}) , (baseCmd <> "-j20", baseOptions{HLS.jobs = Just 20})
, (baseCmd <> "--jobs 10", baseOptions{HLS.jobs = Just 10}) , (baseCmd <> "--jobs 10", baseOptions{HLS.jobs = Just 10})
, (baseCmd <> "--no-set", baseOptions{HLS.setCompile = False}) , (baseCmd <> "--no-set", baseOptions{HLS.setCompile = False})
, (baseCmd <> "--cabal-update", baseOptions{HLS.updateCabal = True}) , (baseCmd <> "--cabal-update", baseOptions{HLS.updateCabal = True})
, (baseCmd <> "-o 2.0.0.0-p1", baseOptions{HLS.ovewrwiteVer = Right $(verQ "2.0.0.0-p1")}) , (baseCmd <> "-o 2.0.0.0-p1", baseOptions{HLS.ovewrwiteVer = Right $(versionQ "2.0.0.0-p1")})
, (baseCmd <> "--overwrite-version 2.0.0.0-p1", baseOptions{HLS.ovewrwiteVer = Right $(verQ "2.0.0.0-p1")}) , (baseCmd <> "--overwrite-version 2.0.0.0-p1", baseOptions{HLS.ovewrwiteVer = Right $(versionQ "2.0.0.0-p1")})
, (baseCmd <> "--git-describe-version", baseOptions{HLS.ovewrwiteVer = Left True}) , (baseCmd <> "--git-describe-version", baseOptions{HLS.ovewrwiteVer = Left True})
#ifdef IS_WINDOWS #ifdef IS_WINDOWS
, (baseCmd <> "-i C:\\\\tmp\\out_dir", baseOptions{HLS.isolateDir = Just "C:\\\\tmp\\out_dir"}) , (baseCmd <> "-i C:\\\\tmp\\out_dir", baseOptions{HLS.isolateDir = Just "C:\\\\tmp\\out_dir"})
@ -179,11 +179,11 @@ compileHlsCheckList = mapSecond CompileHLS
baseOptions :: HLSCompileOptions baseOptions :: HLSCompileOptions
baseOptions = baseOptions =
mkDefaultHLSCompileOptions mkDefaultHLSCompileOptions
(HLS.HackageDist $(verQ "2.0.0.0")) (HLS.HackageDist $(versionQ "2.0.0.0"))
[ghc928] [ghc928]
ghc928 :: ToolVersion ghc928 :: ToolVersion
ghc928 = GHCVersion $ GHCTargetVersion Nothing $(verQ "9.2.8") ghc928 = GHCVersion $ GHCTargetVersion Nothing $(versionQ "9.2.8")
compileParseWith :: [String] -> IO CompileCommand compileParseWith :: [String] -> IO CompileCommand
compileParseWith args = do compileParseWith args = do

View File

@ -55,7 +55,7 @@ oldStyleCheckList =
: ("install -u https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-fedora33-release.tar.xz head" : ("install -u https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-fedora33-release.tar.xz head"
, Right defaultOptions , Right defaultOptions
{ instBindist = Just [uri|https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-fedora33-release.tar.xz|] { instBindist = Just [uri|https://gitlab.haskell.org/ghc/ghc/-/jobs/artifacts/master/raw/ghc-x86_64-linux-fedora33-release.tar.xz|]
, instVer = Just $ GHCVersion $ GHCTargetVersion Nothing $(verQ "head") , instVer = Just $ GHCVersion $ GHCTargetVersion Nothing $(versionQ "head")
} }
) )
: mapSecond : mapSecond
@ -63,48 +63,48 @@ oldStyleCheckList =
[ ("install ghc-9.2", GHCVersion [ ("install ghc-9.2", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "ghc") (Just "ghc")
$(verQ "9.2") $(versionQ "9.2")
) )
-- invalid -- invalid
, ("install next", GHCVersion , ("install next", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "next") $(versionQ "next")
) )
, ("install latest", ToolTag Latest) , ("install latest", ToolTag Latest)
, ("install nightly", GHCVersion , ("install nightly", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "nightly") $(versionQ "nightly")
) )
, ("install recommended", ToolTag Recommended) , ("install recommended", ToolTag Recommended)
, ("install prerelease", GHCVersion , ("install prerelease", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "prerelease") $(versionQ "prerelease")
) )
, ("install latest-prerelease", ToolTag LatestPrerelease) , ("install latest-prerelease", ToolTag LatestPrerelease)
, ("install latest-nightly", ToolTag LatestNightly) , ("install latest-nightly", ToolTag LatestNightly)
, ("install ghc-javascript-unknown-ghcjs-9.6", GHCVersion , ("install ghc-javascript-unknown-ghcjs-9.6", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "ghc-javascript-unknown-ghcjs") (Just "ghc-javascript-unknown-ghcjs")
$(verQ "9.6") $(versionQ "9.6")
) )
, ("install base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("install base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("install cabal-3.10", GHCVersion , ("install cabal-3.10", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "cabal") (Just "cabal")
$(verQ "3.10") $(versionQ "3.10")
) )
, ("install hls-2.0.0.0", GHCVersion , ("install hls-2.0.0.0", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "hls") (Just "hls")
$(verQ "2.0.0.0") $(versionQ "2.0.0.0")
) )
, ("install stack-2.9.3", GHCVersion , ("install stack-2.9.3", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "stack") (Just "stack")
$(verQ "2.9.3") $(versionQ "2.9.3")
) )
] ]
@ -115,37 +115,37 @@ installGhcCheckList =
[ ("install ghc 9.2", GHCVersion [ ("install ghc 9.2", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "9.2") $(versionQ "9.2")
) )
, ("install ghc next", GHCVersion , ("install ghc next", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "next") $(versionQ "next")
) )
, ("install ghc latest", ToolTag Latest) , ("install ghc latest", ToolTag Latest)
, ("install ghc nightly", GHCVersion , ("install ghc nightly", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "nightly") $(versionQ "nightly")
) )
, ("install ghc recommended", ToolTag Recommended) , ("install ghc recommended", ToolTag Recommended)
, ("install ghc prerelease", GHCVersion , ("install ghc prerelease", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "prerelease") $(versionQ "prerelease")
) )
, ("install ghc latest-prerelease", ToolTag LatestPrerelease) , ("install ghc latest-prerelease", ToolTag LatestPrerelease)
, ("install ghc latest-nightly", ToolTag LatestNightly) , ("install ghc latest-nightly", ToolTag LatestNightly)
, ("install ghc javascript-unknown-ghcjs-9.6", GHCVersion , ("install ghc javascript-unknown-ghcjs-9.6", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "javascript-unknown-ghcjs") (Just "javascript-unknown-ghcjs")
$(verQ "9.6") $(versionQ "9.6")
) )
, ("install ghc base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("install ghc base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("install ghc ghc-9.2", GHCVersion , ("install ghc ghc-9.2", GHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "ghc") (Just "ghc")
$(verQ "9.2") $(versionQ "9.2")
) )
] ]
@ -153,48 +153,48 @@ installCabalCheckList :: [(String, Either InstallCommand InstallOptions)]
installCabalCheckList = installCabalCheckList =
("install cabal", Left $ InstallCabal defaultOptions{instSet = True}) ("install cabal", Left $ InstallCabal defaultOptions{instSet = True})
: mapSecond (Left . InstallCabal . mkInstallOptions') : mapSecond (Left . InstallCabal . mkInstallOptions')
[ ("install cabal 3.10", ToolVersion $(verQ "3.10")) [ ("install cabal 3.10", ToolVersion $(versionQ "3.10"))
, ("install cabal next", ToolVersion $(verQ "next")) , ("install cabal next", ToolVersion $(versionQ "next"))
, ("install cabal latest", ToolTag Latest) , ("install cabal latest", ToolTag Latest)
, ("install cabal nightly", ToolVersion $(verQ "nightly")) , ("install cabal nightly", ToolVersion $(versionQ "nightly"))
, ("install cabal recommended", ToolTag Recommended) , ("install cabal recommended", ToolTag Recommended)
, ("install cabal prerelease", ToolVersion $(verQ "prerelease")) , ("install cabal prerelease", ToolVersion $(versionQ "prerelease"))
, ("install cabal latest-prerelease", ToolTag LatestPrerelease) , ("install cabal latest-prerelease", ToolTag LatestPrerelease)
, ("install cabal latest-nightly", ToolTag LatestNightly) , ("install cabal latest-nightly", ToolTag LatestNightly)
, ("install cabal base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("install cabal base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("install cabal cabal-3.10", ToolVersion $(verQ "cabal-3.10")) , ("install cabal cabal-3.10", ToolVersion $(versionQ "cabal-3.10"))
] ]
installHlsCheckList :: [(String, Either InstallCommand InstallOptions)] installHlsCheckList :: [(String, Either InstallCommand InstallOptions)]
installHlsCheckList = installHlsCheckList =
("install hls", Left $ InstallHLS defaultOptions{instSet = True}) ("install hls", Left $ InstallHLS defaultOptions{instSet = True})
: mapSecond (Left . InstallHLS . mkInstallOptions') : mapSecond (Left . InstallHLS . mkInstallOptions')
[ ("install hls 3.10", ToolVersion $(verQ "3.10")) [ ("install hls 3.10", ToolVersion $(versionQ "3.10"))
, ("install hls next", ToolVersion $(verQ "next")) , ("install hls next", ToolVersion $(versionQ "next"))
, ("install hls latest", ToolTag Latest) , ("install hls latest", ToolTag Latest)
, ("install hls nightly", ToolVersion $(verQ "nightly")) , ("install hls nightly", ToolVersion $(versionQ "nightly"))
, ("install hls recommended", ToolTag Recommended) , ("install hls recommended", ToolTag Recommended)
, ("install hls prerelease", ToolVersion $(verQ "prerelease")) , ("install hls prerelease", ToolVersion $(versionQ "prerelease"))
, ("install hls latest-prerelease", ToolTag LatestPrerelease) , ("install hls latest-prerelease", ToolTag LatestPrerelease)
, ("install hls latest-nightly", ToolTag LatestNightly) , ("install hls latest-nightly", ToolTag LatestNightly)
, ("install hls base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("install hls base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("install hls hls-2.0", ToolVersion $(verQ "hls-2.0")) , ("install hls hls-2.0", ToolVersion $(versionQ "hls-2.0"))
] ]
installStackCheckList :: [(String, Either InstallCommand InstallOptions)] installStackCheckList :: [(String, Either InstallCommand InstallOptions)]
installStackCheckList = installStackCheckList =
("install stack", Left $ InstallStack defaultOptions{instSet = True}) ("install stack", Left $ InstallStack defaultOptions{instSet = True})
: mapSecond (Left . InstallStack . mkInstallOptions') : mapSecond (Left . InstallStack . mkInstallOptions')
[ ("install stack 3.10", ToolVersion $(verQ "3.10")) [ ("install stack 3.10", ToolVersion $(versionQ "3.10"))
, ("install stack next", ToolVersion $(verQ "next")) , ("install stack next", ToolVersion $(versionQ "next"))
, ("install stack latest", ToolTag Latest) , ("install stack latest", ToolTag Latest)
, ("install stack nightly", ToolVersion $(verQ "nightly")) , ("install stack nightly", ToolVersion $(versionQ "nightly"))
, ("install stack recommended", ToolTag Recommended) , ("install stack recommended", ToolTag Recommended)
, ("install stack prerelease", ToolVersion $(verQ "prerelease")) , ("install stack prerelease", ToolVersion $(versionQ "prerelease"))
, ("install stack latest-prerelease", ToolTag LatestPrerelease) , ("install stack latest-prerelease", ToolTag LatestPrerelease)
, ("install stack latest-nightly", ToolTag LatestNightly) , ("install stack latest-nightly", ToolTag LatestNightly)
, ("install stack base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("install stack base-4.18", ToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("install stack stack-2.9", ToolVersion $(verQ "stack-2.9")) , ("install stack stack-2.9", ToolVersion $(versionQ "stack-2.9"))
] ]
installParseWith :: [String] -> IO (Either InstallCommand InstallOptions) installParseWith :: [String] -> IO (Either InstallCommand InstallOptions)

View File

@ -7,7 +7,6 @@ import Test.Tasty
import GHCup.OptParse import GHCup.OptParse
import Utils import Utils
import GHCup.Types import GHCup.Types
import Data.List.NonEmpty (NonEmpty ((:|)))
import Data.Versions import Data.Versions
@ -25,36 +24,36 @@ rmTests =
oldStyleCheckList :: [(String, Either RmCommand RmOptions)] oldStyleCheckList :: [(String, Either RmCommand RmOptions)]
oldStyleCheckList = mapSecond (Right . RmOptions) oldStyleCheckList = mapSecond (Right . RmOptions)
[ -- failed with ("rm", xxx) [ -- failed with ("rm", xxx)
("rm 9.2.8", mkTVer $(verQ "9.2.8")) ("rm 9.2.8", mkTVer $(versionQ "9.2.8"))
, ("rm ghc-9.2.8", GHCTargetVersion (Just "ghc") $(verQ "9.2.8")) , ("rm ghc-9.2.8", GHCTargetVersion (Just "ghc") $(versionQ "9.2.8"))
] ]
rmGhcCheckList :: [(String, Either RmCommand RmOptions)] rmGhcCheckList :: [(String, Either RmCommand RmOptions)]
rmGhcCheckList = mapSecond (Left . RmGHC . RmOptions) rmGhcCheckList = mapSecond (Left . RmGHC . RmOptions)
[ -- failed with ("rm ghc", xxx) [ -- failed with ("rm ghc", xxx)
("rm ghc 9.2.8", mkTVer $(verQ "9.2.8")) ("rm ghc 9.2.8", mkTVer $(versionQ "9.2.8"))
, ("rm ghc ghc-9.2.8", GHCTargetVersion (Just "ghc") $(verQ "9.2.8")) , ("rm ghc ghc-9.2.8", GHCTargetVersion (Just "ghc") $(versionQ "9.2.8"))
] ]
rmCabalCheckList :: [(String, Either RmCommand RmOptions)] rmCabalCheckList :: [(String, Either RmCommand RmOptions)]
rmCabalCheckList = mapSecond (Left . RmCabal) rmCabalCheckList = mapSecond (Left . RmCabal)
[ -- failed with ("rm cabal", xxx) [ -- failed with ("rm cabal", xxx)
("rm cabal 3.10", $(verQ "3.10")) ("rm cabal 3.10", $(versionQ "3.10"))
, ("rm cabal cabal-3.10", $(verQ "cabal-3.10")) , ("rm cabal cabal-3.10", $(versionQ "cabal-3.10"))
] ]
rmHlsCheckList :: [(String, Either RmCommand RmOptions)] rmHlsCheckList :: [(String, Either RmCommand RmOptions)]
rmHlsCheckList = mapSecond (Left . RmHLS) rmHlsCheckList = mapSecond (Left . RmHLS)
[ -- failed with ("rm hls", xxx) [ -- failed with ("rm hls", xxx)
("rm hls 2.0", $(verQ "2.0")) ("rm hls 2.0", $(versionQ "2.0"))
, ("rm hls hls-2.0", $(verQ "hls-2.0")) , ("rm hls hls-2.0", $(versionQ "hls-2.0"))
] ]
rmStackCheckList :: [(String, Either RmCommand RmOptions)] rmStackCheckList :: [(String, Either RmCommand RmOptions)]
rmStackCheckList = mapSecond (Left . RmStack) rmStackCheckList = mapSecond (Left . RmStack)
[ -- failed with ("rm stack", xxx) [ -- failed with ("rm stack", xxx)
("rm stack 2.9.1", $(verQ "2.9.1")) ("rm stack 2.9.1", $(versionQ "2.9.1"))
, ("rm stack stack-2.9.1", $(verQ "stack-2.9.1")) , ("rm stack stack-2.9.1", $(versionQ "stack-2.9.1"))
] ]
rmParseWith :: [String] -> IO (Either RmCommand RmOptions) rmParseWith :: [String] -> IO (Either RmCommand RmOptions)

View File

@ -8,6 +8,7 @@ import Test.Tasty
import GHCup.OptParse import GHCup.OptParse
import Utils import Utils
import GHCup.Types import GHCup.Types
import Data.Versions (versionQ)
runTests :: TestTree runTests :: TestTree
@ -36,11 +37,11 @@ runCheckList =
, ("run --install", defaultOptions{runInstTool' = True}) , ("run --install", defaultOptions{runInstTool' = True})
, ("run -m", defaultOptions{runMinGWPath = True}) , ("run -m", defaultOptions{runMinGWPath = True})
, ("run --mingw-path", defaultOptions{runMinGWPath = True}) , ("run --mingw-path", defaultOptions{runMinGWPath = True})
, ("run --ghc 9.2.8", defaultOptions{runGHCVer = Just $ GHCVersion $ mkTVer $(verQ "9.2.8")}) , ("run --ghc 9.2.8", defaultOptions{runGHCVer = Just $ GHCVersion $ mkTVer $(versionQ "9.2.8")})
, ("run --ghc latest", defaultOptions{runGHCVer = Just $ ToolTag Latest}) , ("run --ghc latest", defaultOptions{runGHCVer = Just $ ToolTag Latest})
, ("run --cabal 3.10", defaultOptions{runCabalVer = Just $ ToolVersion $(verQ "3.10")}) , ("run --cabal 3.10", defaultOptions{runCabalVer = Just $ ToolVersion $(versionQ "3.10")})
, ("run --hls 2.0", defaultOptions{runHLSVer = Just $ ToolVersion $(verQ "2.0")}) , ("run --hls 2.0", defaultOptions{runHLSVer = Just $ ToolVersion $(versionQ "2.0")})
, ("run --stack 2.9", defaultOptions{runStackVer = Just $ ToolVersion $(verQ "2.9") }) , ("run --stack 2.9", defaultOptions{runStackVer = Just $ ToolVersion $(versionQ "2.9") })
#ifdef IS_WINDOWS #ifdef IS_WINDOWS
, ("run -b C:\\\\tmp\\dir", defaultOptions{runBinDir = Just "C:\\\\tmp\\dir"}) , ("run -b C:\\\\tmp\\dir", defaultOptions{runBinDir = Just "C:\\\\tmp\\dir"})
, ("run --bindir C:\\\\tmp\\dir", defaultOptions{runBinDir = Just "C:\\\\tmp\\dir"}) , ("run --bindir C:\\\\tmp\\dir", defaultOptions{runBinDir = Just "C:\\\\tmp\\dir"})
@ -53,9 +54,9 @@ runCheckList =
, ("run --ghc latest --cabal 3.10 --stack 2.9 --hls 2.0 --install", , ("run --ghc latest --cabal 3.10 --stack 2.9 --hls 2.0 --install",
defaultOptions defaultOptions
{ runGHCVer = Just $ ToolTag Latest { runGHCVer = Just $ ToolTag Latest
, runCabalVer = Just $ ToolVersion $(verQ "3.10") , runCabalVer = Just $ ToolVersion $(versionQ "3.10")
, runHLSVer = Just $ ToolVersion $(verQ "2.0") , runHLSVer = Just $ ToolVersion $(versionQ "2.0")
, runStackVer = Just $ ToolVersion $(verQ "2.9") , runStackVer = Just $ ToolVersion $(versionQ "2.9")
, runInstTool' = True , runInstTool' = True
} }
) )

View File

@ -28,44 +28,44 @@ oldStyleCheckList = mapSecond (Right . SetOptions)
, ("set ghc-9.2", SetGHCVersion , ("set ghc-9.2", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "ghc") (Just "ghc")
$(verQ "9.2") $(versionQ "9.2")
) )
, ("set next", SetNext) , ("set next", SetNext)
, ("set latest", SetToolTag Latest) , ("set latest", SetToolTag Latest)
, ("set nightly", SetGHCVersion , ("set nightly", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "nightly") $(versionQ "nightly")
) )
-- different from `set` -- different from `set`
, ("set recommended", SetToolTag Recommended) , ("set recommended", SetToolTag Recommended)
, ("set prerelease", SetGHCVersion , ("set prerelease", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "prerelease") $(versionQ "prerelease")
) )
, ("set latest-prerelease", SetToolTag LatestPrerelease) , ("set latest-prerelease", SetToolTag LatestPrerelease)
, ("set latest-nightly", SetToolTag LatestNightly) , ("set latest-nightly", SetToolTag LatestNightly)
, ("set ghc-javascript-unknown-ghcjs-9.6", SetGHCVersion , ("set ghc-javascript-unknown-ghcjs-9.6", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "ghc-javascript-unknown-ghcjs") (Just "ghc-javascript-unknown-ghcjs")
$(verQ "9.6") $(versionQ "9.6")
) )
, ("set base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("set base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set cabal-3.10", SetGHCVersion , ("set cabal-3.10", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "cabal") (Just "cabal")
$(verQ "3.10") $(versionQ "3.10")
) )
, ("set hls-2.0.0.0", SetGHCVersion , ("set hls-2.0.0.0", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "hls") (Just "hls")
$(verQ "2.0.0.0") $(versionQ "2.0.0.0")
) )
, ("set stack-2.9.3", SetGHCVersion , ("set stack-2.9.3", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "stack") (Just "stack")
$(verQ "2.9.3") $(versionQ "2.9.3")
) )
] ]
@ -75,79 +75,79 @@ setGhcCheckList = mapSecond (Left . SetGHC . SetOptions)
, ("set ghc 9.2", SetGHCVersion , ("set ghc 9.2", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "9.2") $(versionQ "9.2")
) )
, ("set ghc next", SetNext) , ("set ghc next", SetNext)
, ("set ghc latest", SetToolTag Latest) , ("set ghc latest", SetToolTag Latest)
, ("set ghc nightly", SetGHCVersion , ("set ghc nightly", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "nightly") $(versionQ "nightly")
) )
, ("set ghc recommended", SetToolTag Recommended) , ("set ghc recommended", SetToolTag Recommended)
, ("set ghc prerelease", SetGHCVersion , ("set ghc prerelease", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
Nothing Nothing
$(verQ "prerelease") $(versionQ "prerelease")
) )
, ("set ghc latest-prerelease", SetToolTag LatestPrerelease) , ("set ghc latest-prerelease", SetToolTag LatestPrerelease)
, ("set ghc latest-nightly", SetToolTag LatestNightly) , ("set ghc latest-nightly", SetToolTag LatestNightly)
, ("set ghc javascript-unknown-ghcjs-9.6", SetGHCVersion , ("set ghc javascript-unknown-ghcjs-9.6", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "javascript-unknown-ghcjs") (Just "javascript-unknown-ghcjs")
$(verQ "9.6") $(versionQ "9.6")
) )
, ("set ghc base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("set ghc base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set ghc ghc-9.2", SetGHCVersion , ("set ghc ghc-9.2", SetGHCVersion
$ GHCTargetVersion $ GHCTargetVersion
(Just "ghc") (Just "ghc")
$(verQ "9.2") $(versionQ "9.2")
) )
] ]
setCabalCheckList :: [(String, Either SetCommand SetOptions)] setCabalCheckList :: [(String, Either SetCommand SetOptions)]
setCabalCheckList = mapSecond (Left . SetCabal . SetOptions) setCabalCheckList = mapSecond (Left . SetCabal . SetOptions)
[ ("set cabal", SetRecommended) [ ("set cabal", SetRecommended)
, ("set cabal 3.10", SetToolVersion $(verQ "3.10")) , ("set cabal 3.10", SetToolVersion $(versionQ "3.10"))
, ("set cabal next", SetNext) , ("set cabal next", SetNext)
, ("set cabal latest", SetToolTag Latest) , ("set cabal latest", SetToolTag Latest)
, ("set cabal nightly", SetToolVersion $(verQ "nightly")) , ("set cabal nightly", SetToolVersion $(versionQ "nightly"))
, ("set cabal recommended", SetToolTag Recommended) , ("set cabal recommended", SetToolTag Recommended)
, ("set cabal prerelease", SetToolVersion $(verQ "prerelease")) , ("set cabal prerelease", SetToolVersion $(versionQ "prerelease"))
, ("set cabal latest-prerelease", SetToolTag LatestPrerelease) , ("set cabal latest-prerelease", SetToolTag LatestPrerelease)
, ("set cabal latest-nightly", SetToolTag LatestNightly) , ("set cabal latest-nightly", SetToolTag LatestNightly)
, ("set cabal base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("set cabal base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set cabal cabal-3.10", SetToolVersion $(verQ "cabal-3.10")) , ("set cabal cabal-3.10", SetToolVersion $(versionQ "cabal-3.10"))
] ]
setHlsCheckList :: [(String, Either SetCommand SetOptions)] setHlsCheckList :: [(String, Either SetCommand SetOptions)]
setHlsCheckList = mapSecond (Left . SetHLS . SetOptions) setHlsCheckList = mapSecond (Left . SetHLS . SetOptions)
[ ("set hls", SetRecommended) [ ("set hls", SetRecommended)
, ("set hls 2.0", SetToolVersion $(verQ "2.0")) , ("set hls 2.0", SetToolVersion $(versionQ "2.0"))
, ("set hls next", SetNext) , ("set hls next", SetNext)
, ("set hls latest", SetToolTag Latest) , ("set hls latest", SetToolTag Latest)
, ("set hls nightly", SetToolVersion $(verQ "nightly")) , ("set hls nightly", SetToolVersion $(versionQ "nightly"))
, ("set hls recommended", SetToolTag Recommended) , ("set hls recommended", SetToolTag Recommended)
, ("set hls prerelease", SetToolVersion $(verQ "prerelease")) , ("set hls prerelease", SetToolVersion $(versionQ "prerelease"))
, ("set hls latest-prerelease", SetToolTag LatestPrerelease) , ("set hls latest-prerelease", SetToolTag LatestPrerelease)
, ("set hls latest-nightly", SetToolTag LatestNightly) , ("set hls latest-nightly", SetToolTag LatestNightly)
, ("set hls base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("set hls base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set hls hls-2.0", SetToolVersion $(verQ "hls-2.0")) , ("set hls hls-2.0", SetToolVersion $(versionQ "hls-2.0"))
] ]
setStackCheckList :: [(String, Either SetCommand SetOptions)] setStackCheckList :: [(String, Either SetCommand SetOptions)]
setStackCheckList = mapSecond (Left . SetStack . SetOptions) setStackCheckList = mapSecond (Left . SetStack . SetOptions)
[ ("set stack", SetRecommended) [ ("set stack", SetRecommended)
, ("set stack 2.9", SetToolVersion $(verQ "2.9")) , ("set stack 2.9", SetToolVersion $(versionQ "2.9"))
, ("set stack next", SetNext) , ("set stack next", SetNext)
, ("set stack latest", SetToolTag Latest) , ("set stack latest", SetToolTag Latest)
, ("set stack nightly", SetToolVersion $(verQ "nightly")) , ("set stack nightly", SetToolVersion $(versionQ "nightly"))
, ("set stack recommended", SetToolTag Recommended) , ("set stack recommended", SetToolTag Recommended)
, ("set stack prerelease", SetToolVersion $(verQ "prerelease")) , ("set stack prerelease", SetToolVersion $(versionQ "prerelease"))
, ("set stack latest-prerelease", SetToolTag LatestPrerelease) , ("set stack latest-prerelease", SetToolTag LatestPrerelease)
, ("set stack latest-nightly", SetToolTag LatestNightly) , ("set stack latest-nightly", SetToolTag LatestNightly)
, ("set stack base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]}))) , ("set stack base-4.18", SetToolTag (Base (PVP {_pComponents = 4 :| [18]})))
, ("set stack stack-2.9", SetToolVersion $(verQ "stack-2.9")) , ("set stack stack-2.9", SetToolVersion $(versionQ "stack-2.9"))
] ]
setParseWith :: [String] -> IO (Either SetCommand SetOptions) setParseWith :: [String] -> IO (Either SetCommand SetOptions)

View File

@ -4,14 +4,9 @@ module Utils where
import GHCup.OptParse as GHCup import GHCup.OptParse as GHCup
import Options.Applicative import Options.Applicative
import Data.Bifunctor import Data.Bifunctor
import Data.Versions
import Data.List.NonEmpty (NonEmpty)
import Test.Tasty import Test.Tasty
import Test.Tasty.HUnit import Test.Tasty.HUnit
import Control.Monad.IO.Class import Control.Monad.IO.Class
import qualified Data.Text as T
import Language.Haskell.TH (Exp, Q)
import Language.Haskell.TH.Syntax (lift)
parseWith :: [String] -> IO Command parseWith :: [String] -> IO Command
parseWith args = parseWith args =
@ -25,13 +20,6 @@ padLeft desiredLength s = padding ++ s
mapSecond :: (b -> c) -> [(a,b)] -> [(a,c)] mapSecond :: (b -> c) -> [(a,b)] -> [(a,c)]
mapSecond = map . second mapSecond = map . second
-- | Parse a `Version` at compile time.
verQ :: T.Text -> Q Exp
verQ nm =
case version nm of
Left err -> fail (errorBundlePretty err)
Right v -> lift v
buildTestTree buildTestTree
:: (Eq a, Show a) :: (Eq a, Show a)
=> ([String] -> IO a) -- ^ The parse function => ([String] -> IO a) -- ^ The parse function

View File

@ -7,6 +7,7 @@ import Test.Tasty
import GHCup.OptParse import GHCup.OptParse
import Utils import Utils
import GHCup.Types import GHCup.Types
import Data.Versions (versionQ)
whereisTests :: TestTree whereisTests :: TestTree
whereisTests = buildTestTree whereisParseWith ("whereis", whereisCheckList) whereisTests = buildTestTree whereisParseWith ("whereis", whereisCheckList)
@ -14,8 +15,8 @@ whereisTests = buildTestTree whereisParseWith ("whereis", whereisCheckList)
whereisCheckList :: [(String, (WhereisOptions, WhereisCommand))] whereisCheckList :: [(String, (WhereisOptions, WhereisCommand))]
whereisCheckList = concatMap mk whereisCheckList = concatMap mk
[ ("whereis ghc", WhereisTool GHC Nothing) [ ("whereis ghc", WhereisTool GHC Nothing)
, ("whereis ghc 9.2.8", WhereisTool GHC (Just $ GHCVersion $ mkTVer $(verQ "9.2.8"))) , ("whereis ghc 9.2.8", WhereisTool GHC (Just $ GHCVersion $ mkTVer $(versionQ "9.2.8")))
, ("whereis ghc ghc-9.2.8", WhereisTool GHC (Just $ GHCVersion $ GHCTargetVersion (Just "ghc") $(verQ "9.2.8"))) , ("whereis ghc ghc-9.2.8", WhereisTool GHC (Just $ GHCVersion $ GHCTargetVersion (Just "ghc") $(versionQ "9.2.8")))
, ("whereis ghc latest", WhereisTool GHC (Just $ ToolTag Latest)) , ("whereis ghc latest", WhereisTool GHC (Just $ ToolTag Latest))
, ("whereis cabal", WhereisTool Cabal Nothing) , ("whereis cabal", WhereisTool Cabal Nothing)
, ("whereis hls", WhereisTool HLS Nothing) , ("whereis hls", WhereisTool HLS Nothing)