{-# 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
  { ExternalNames -> Name
name_String :: Name
  , ExternalNames -> Name
name_concat :: Name
  , ExternalNames -> Name
name_map :: Name
  , ExternalNames -> Name
name_TestTree :: Name
  , ExternalNames -> Name
name_testTreeTodo :: Name
  , ExternalNames -> Name
name_expectFail :: Name
  , ExternalNames -> Name
name_expectFailBecause :: Name
  , ExternalNames -> Name
name_ignoreTest :: Name
  , ExternalNames -> Name
name_ignoreTestBecause :: Name
  }

loadExternalNames :: HscEnv -> IO ExternalNames
loadExternalNames :: HscEnv -> IO ExternalNames
loadExternalNames HscEnv
env = do
  Name
name_String <- Name -> IO Name
loadName ''String
  Name
name_concat <- Name -> IO Name
loadName 'concat
  Name
name_map <- Name -> IO Name
loadName 'map
  Name
name_TestTree <- Name -> IO Name
loadName ''TestTree
  Name
name_testTreeTodo <- Name -> IO Name
loadName 'testTreeTodo
  Name
name_expectFail <- Name -> IO Name
loadName 'expectFail
  Name
name_expectFailBecause <- Name -> IO Name
loadName 'expectFailBecause
  Name
name_ignoreTest <- Name -> IO Name
loadName 'ignoreTest
  Name
name_ignoreTestBecause <- Name -> IO Name
loadName 'ignoreTestBecause
  ExternalNames -> IO ExternalNames
forall (f :: * -> *) a. Applicative f => a -> f a
pure ExternalNames :: Name
-> Name
-> Name
-> Name
-> Name
-> Name
-> Name
-> Name
-> Name
-> ExternalNames
ExternalNames{Name
name_ignoreTestBecause :: Name
name_ignoreTest :: Name
name_expectFailBecause :: Name
name_expectFail :: Name
name_testTreeTodo :: Name
name_TestTree :: Name
name_map :: Name
name_concat :: Name
name_String :: Name
name_ignoreTestBecause :: Name
name_ignoreTest :: Name
name_expectFailBecause :: Name
name_expectFail :: Name
name_testTreeTodo :: Name
name_TestTree :: Name
name_map :: Name
name_concat :: Name
name_String :: Name
..}
  where
    loadName :: Name -> IO Name
loadName Name
name =
      HscEnv -> IORef NameCache -> Name -> IO (Maybe Name)
thNameToGhcNameIO HscEnv
env (HscEnv -> IORef NameCache
hsc_NC HscEnv
env) Name
name
        IO (Maybe Name) -> (Maybe Name -> IO Name) -> IO Name
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= IO Name -> (Name -> IO Name) -> Maybe Name -> IO Name
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> IO Name
forall a. String -> a
autocollectError (String -> IO Name) -> String -> IO Name
forall a b. (a -> b) -> a -> b
$ String
"Could not get Name for " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Name -> String
forall a. Show a => a -> String
show Name
name) Name -> IO Name
forall (m :: * -> *) a. Monad m => a -> m a
return