@@ -19,6 +19,7 @@ import Data.Bool (bool)
1919import qualified Data.ByteString.Lazy as LBS
2020import Data.Foldable (for_)
2121import Data.Function (fix)
22+import Data.List (isInfixOf)
2223import qualified Data.Map as Map
2324import Data.Semigroup ((<>))
2425import qualified Data.Set as Set
@@ -205,6 +206,22 @@ main' isVerbose httpManager obeliskRepoReadOnly = withInitCache $ \initCache ->
205206 it "works in root directory" $ inTmpObInit $ \_ -> testObRunInDir' Nothing httpManager
206207 it "works in sub directory" $ inTmpObInit $ \_ -> testObRunInDir' (Just "frontend") httpManager
207208
209+ describe "ob repl" $ do
210+ it "accepts stdin commands" $ inTmpObInit $ \_ -> do
211+ setStdin "print 3\n:q"
212+ output <- runOb ["repl"]
213+ liftIO $ assertBool "" $
214+ [ "*Obelisk.Run Obelisk.Run Frontend Backend> 3"
215+ , "*Obelisk.Run Obelisk.Run Frontend Backend> Leaving GHCi."
216+ ] `isInfixOf` T.lines (T.strip output)
217+ it "works with custom Prelude" $ inTmpObInit $ \_ -> do
218+ writefile "common/src/Prelude.hs"
219+ "{-# LANGUAGE PackageImports #-} module Prelude (module X) where import \"base\" Prelude as X"
220+ setStdin ":q"
221+ output <- runOb ["repl"]
222+ liftIO $ assertBool "" $
223+ "*Obelisk.Run Obelisk.Run Frontend Backend> Leaving GHCi." `T.isInfixOf` output
224+
208225 describe "obelisk project" $ parallel $ do
209226 it "can build obelisk command" $ inTmpObInit $ \_ -> nixBuild ["-A", "command" , toTextIgnore obeliskRepoReadOnly]
210227 it "can build obelisk skeleton" $ inTmpObInit $ \_ -> nixBuild ["-A", "skeleton", toTextIgnore obeliskRepoReadOnly]