-- | Test the high level library API
module Test.API(apiTests) where

import Test.Tasty
import Test.Tasty.HUnit
import System.FilePath
import System.IO.Extra
import System.Time.Extra
import Language.Haskell.Ghcid
import Language.Haskell.Ghcid.Util


apiTests :: TestTree
apiTests = testGroup "API test"
    [testCase "No files" $ withTempDir $ \dir -> do
        (ghci,load) <- startGhci "ghci" (Just dir) $ const putStrLn
        load @?= []
        showModules ghci >>= (@?= [])
        exec ghci "import Data.List"
        exec ghci "nub \"test\"" >>= (@?= ["\"tes\""])
        stopGhci ghci

    ,testCase "Load file" $ withTempDir $ \dir -> do
        writeFile (dir </> "File.hs") "module A where\na = 123"
        (ghci, load) <- startGhci "ghci File.hs" (Just dir) $ const putStrLn
        load @?= [Loading "A" "File.hs"]
        exec ghci "a + 1" >>= (@?= ["124"])
        reload ghci >>= (@?= [])

        sleep =<< getModTimeResolution
        writeFile (dir </> "File.hs") "module A where\na = 456"
        exec ghci "a + 1" >>= (@?= ["124"])
        reload ghci >>= (@?= [Loading "A" "File.hs"])
        exec ghci "a + 1" >>= (@?= ["457"])
        stopGhci ghci
    ]

-- | Test the high level library API
module Test.API(apiTests) where

import Test.Tasty
import Test.Tasty.HUnit
import System.FilePath
import System.IO.Extra
import System.Time.Extra
import Language.Haskell.Ghcid
import Language.Haskell.Ghcid.Util


apiTests :: TestTree
apiTests = testGroup "API test"
    [testCase "No files" $ withTempDir $ \dir -> do
        (ghci,load) <- startGhci "ghci -ignore-dot-ghci" (Just dir) $ const putStrLn
        load @?= []
        showModules ghci >>= (@?= [])
        exec ghci "import Data.List"
        exec ghci "nub \"test\"" >>= (@?= ["\"tes\""])
        stopGhci ghci

    ,testCase "Load file" $ withTempDir $ \dir -> do
        writeFile (dir </> "File.hs") "module A where\na = 123"
        (ghci, load) <- startGhci "ghci -ignore-dot-ghci File.hs" (Just dir) $ const putStrLn
        load @?= [Loading "A" "File.hs"]
        exec ghci "a + 1" >>= (@?= ["124"])
        reload ghci >>= (@?= [])

        sleep =<< getModTimeResolution
        writeFile (dir </> "File.hs") "module A where\na = 456"
        exec ghci "a + 1" >>= (@?= ["124"])
        reload ghci >>= (@?= [Loading "A" "File.hs"])
        exec ghci "a + 1" >>= (@?= ["457"])
        stopGhci ghci
    ]

Add -ignore-dot-ghci to tests, otherwise some fail with erroring .ghci
Add -ignore-dot-ghci to tests, otherwise some fail with erroring .ghci
