Add ability to replay from exe
[lsp-test.git] / lsp-test / Main.hs
index 6dc0690daa268a0262f4fa4c3819de12e6b21cbf..ec9cfa4175bac343a3cce7a0bbb7635c16c9391e 100644 (file)
@@ -9,20 +9,29 @@ import           Language.Haskell.LSP.Test.Script
 import           System.Environment
 import           System.FilePath
 import           System.Directory
+import           System.Exit
 import           Language.Haskell.LSP.Test.Machine
-import           Language.Haskell.LSP.Test.Parsing ( toJSONMsg )
+import           Language.Haskell.LSP.Test.Parsing
+                                                ( toJSONMsg )
+import           Language.Haskell.LSP.Test.Replay
 import           Language.Haskell.LSP.Messages
 import qualified Language.Haskell.LSP.Types    as LSP
 
 main = do
-  fileName <- head <$> getArgs
-  blocks <- parseScript <$> readFile fileName
-  print blocks
-  rootDir <- getCurrentDirectory
-  runBlocks rootDir blocks
-
-runBlocks :: FilePath -> [Block] -> IO ()
-runBlocks rootDir blocks = runMachine rootDir (map convertBlock blocks) >>= putStrLn
+  args <- getArgs
+  curDir <- getCurrentDirectory
+  case args of
+    ["replay", cmd] -> replaySession cmd curDir
+    [file, cmd] -> do
+      blocks <- parseScript <$> readFile file
+      success <- runBlocks cmd curDir blocks
+      if success
+        then putStrLn "Success ✅"
+        else putStrLn "Failed ❌" >> exitFailure
+    _ -> putStrLn "usage: lsp-test (replay <cmd>)|(<file> <cmd>)"
+
+runBlocks :: String -> FilePath -> [Block] -> IO Bool
+runBlocks cmd rootDir blocks = runMachine cmd rootDir (map convertBlock blocks)
   where
     convertBlock :: Block -> (String, FromServerMessage -> Bool, [Session ()])
     convertBlock (Block name w actions) = (name, mkWait w, map mkAction actions)