module GCTest where

import Test.Tasty
import GHCup.OptParse
import Utils


gcTests :: TestTree
gcTests = buildTestTree gcParseWith ("gc", gcCheckList)

defaultOptions :: GCOptions
defaultOptions =
  GCOptions
    False
    False
    False
    False
    False
    False

gcCheckList :: [(String, GCOptions)]
gcCheckList =
  [ ("gc", defaultOptions)
  , ("gc -o", defaultOptions{gcOldGHC = True})
  , ("gc --ghc-old", defaultOptions{gcOldGHC = True})
  , ("gc -p", defaultOptions{gcProfilingLibs = True})
  , ("gc --profiling-libs", defaultOptions{gcProfilingLibs = True})
  , ("gc -s", defaultOptions{gcShareDir = True})
  , ("gc --share-dir", defaultOptions{gcShareDir = True})
  , ("gc -h", defaultOptions{gcHLSNoGHC = True})
  , ("gc --hls-no-ghc", defaultOptions{gcHLSNoGHC = True})
  , ("gc -c", defaultOptions{gcCache = True})
  , ("gc --cache", defaultOptions{gcCache = True})
  , ("gc -t", defaultOptions{gcTmp = True})
  , ("gc --tmpdirs", defaultOptions{gcTmp = True})
  , ("gc -o -p -s -h -c -t", GCOptions True True True True True True)
  ]

gcParseWith :: [String] -> IO GCOptions
gcParseWith args = do
  GC a <- parseWith args
  pure a