{-# LANGUAGE QuasiQuotes #-} module ConfigTest where import Test.Tasty import Test.Tasty.HUnit import GHCup.OptParse import GHCup.Types (NewURLSource(..)) import Utils import Control.Monad.IO.Class import URI.ByteString.QQ configTests :: TestTree configTests = testGroup "config" $ map (uncurry check) checkList where check :: String -> ConfigCommand -> TestTree check args expected = testCase args $ do res <- configParseWith (words args) liftIO $ res @?= expected checkList :: [(String, ConfigCommand)] checkList = [ ("config", ShowConfig) , ("config init", InitConfig) , ("config show", ShowConfig) , ("config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml" , AddReleaseChannel False (NewURI [uri|https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml|]) ) , ("config add-release-channel GHCupURL" , AddReleaseChannel False NewGHCupURL ) , ("config add-release-channel StackSetupURL" , AddReleaseChannel False NewStackSetupURL ) , ("config set cache true", SetConfig "cache" (Just "true")) ] configParseWith :: [String] -> IO ConfigCommand configParseWith args = do Config a <- parseWith args pure a