packages feed

ghcup-0.2.1.0: test/optparse-test/WhereisTest.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

module WhereisTest where

import Test.Tasty
import GHCup.OptParse
import Utils
import GHCup.Types
import Data.Versions (versionQ)

whereisTests :: TestTree
whereisTests = buildTestTree whereisParseWith ("whereis", whereisCheckList)

whereisCheckList :: [(String, (WhereisOptions, WhereisCommand))]
whereisCheckList = concatMap mk
  [ ("whereis ghc", WhereisTool ghc Nothing)
  , ("whereis ghc 9.2.8", WhereisTool ghc (Just $ GHCVersion $ toTargetVersionReq'' $(versionQ "9.2.8")))
  , ("whereis ghc latest", WhereisTool ghc (Just $ ToolTag Latest))
  , ("whereis cabal", WhereisTool cabal Nothing)
  , ("whereis hls", WhereisTool hls Nothing)
  , ("whereis stack", WhereisTool stack Nothing)
  , ("whereis ghcup", WhereisTool ghcup Nothing)
  , ("whereis basedir", WhereisBaseDir)
  , ("whereis bindir", WhereisBinDir)
  , ("whereis cachedir", WhereisCacheDir)
  , ("whereis logsdir", WhereisLogsDir)
  , ("whereis confdir", WhereisConfDir)
  ]
  where
    mk :: (String, WhereisCommand) -> [(String, (WhereisOptions, WhereisCommand))]
    mk (cmd', res) =
      [ (cmd', (WhereisOptions False, res))
      , (cmd' <> " -d", (WhereisOptions True, res))
      , (cmd' <> " --directory", (WhereisOptions True, res))
      ]

whereisParseWith :: [String] -> IO (WhereisOptions, WhereisCommand)
whereisParseWith args = do
  Whereis a b <- parseWith args
  pure (a, b)