content: {-# LANGUAGE OverloadedStrings #-}
  module TargetSpec where
  
  import GhcMod.Target
  import GhcMod.LightGhc
  import GhcMod.Gap
  import Test.Hspec
  
  import TestUtils
  
  import GHC
  import Data.List
  import Data.Maybe
  import System.Directory
  import System.FilePath
  
  spec :: Spec
  spec = do
      describe "runLightGhc" $ do
          it "works at all" $ do
              withLightHscEnv [] $ \env ->
                runLightGhc env (return ()) `shouldReturn` ()
  
          it "has modules in scope" $ do
              (withLightHscEnv [] $ \env ->
                runLightGhc env $ do
                 dflags <- getSessionDynFlags
                 let i = intersect (listVisibleModuleNames dflags)
                                   ["Control.Applicative", "Control.Arrow"
                                   ,"Control.Exception", "GHC.Exts", "GHC.Float"]
                 liftIO $ i `shouldSatisfy` not . null) :: IO ()
  
          it "can get module info" $ do
              (withLightHscEnv [] $ \env ->
                runLightGhc env $ do
                  mdl <- findModule "Data.List" Nothing
                  mmi <- getModuleInfo mdl
                  liftIO $ isJust mmi `shouldBe` True) :: IO ()
  
  
      describe "resolveModule" $ do
          it "Works when a module given as path uses CPP" $ do
              dir <- getCurrentDirectory
              let srcDirs = [dir </> "test/data/target/src"]
              x <- withLightHscEnv [] $ \env -> runD $ do
                  resolveModule env srcDirs (Left $ dir </> "test/data/target/Cpp.hs")
              liftIO $ x `shouldBe` Just (ModulePath "Cpp" $ dir </> "test/data/target/Cpp.hs")
  