packages feed

tasty-autocollect-0.4.2: src/Test/Tasty/AutoCollect/ExternalNames.hs

{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskellQuotes #-}

module Test.Tasty.AutoCollect.ExternalNames (
  ExternalNames (..),
  loadExternalNames,
) where

import Test.Tasty (TestTree)
import Test.Tasty.ExpectedFailure (expectFail, expectFailBecause, ignoreTest, ignoreTestBecause)

import Test.Tasty.AutoCollect.Error
import Test.Tasty.AutoCollect.GHC
import Test.Tasty.Ext.Todo (testTreeTodo)

data ExternalNames = ExternalNames
  { name_String :: Name
  , name_concat :: Name
  , name_map :: Name
  , name_TestTree :: Name
  , name_testTreeTodo :: Name
  , name_expectFail :: Name
  , name_expectFailBecause :: Name
  , name_ignoreTest :: Name
  , name_ignoreTestBecause :: Name
  }

loadExternalNames :: HscEnv -> IO ExternalNames
loadExternalNames env = do
  name_String <- loadName ''String
  name_concat <- loadName 'concat
  name_map <- loadName 'map
  name_TestTree <- loadName ''TestTree
  name_testTreeTodo <- loadName 'testTreeTodo
  name_expectFail <- loadName 'expectFail
  name_expectFailBecause <- loadName 'expectFailBecause
  name_ignoreTest <- loadName 'ignoreTest
  name_ignoreTestBecause <- loadName 'ignoreTestBecause
  pure ExternalNames{..}
  where
    loadName name =
      thNameToGhcNameIO (hsc_NC env) name
        >>= maybe (autocollectError $ "Could not get Name for " ++ show name) pure