{-# 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
  forall (f :: * -> *) a. Applicative f => a -> f a
pure 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
        forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall b a. b -> (a -> b) -> Maybe a -> b
maybe (forall a. String -> a
autocollectError forall a b. (a -> b) -> a -> b
$ String
"Could not get Name for " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show Name
name) forall (m :: * -> *) a. Monad m => a -> m a
return