git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Lookup node executable
7fc75b3Brian McKenna
tests/Main.hs+13−5
@@ -19,12 +19,14 @@ module Main (main) where
19import qualified Language.PureScript as P
19import qualified Language.PureScript as P
20
20
21import Data.List (isSuffixOf)
21import Data.List (isSuffixOf)
22+import Data.Traversable (traverse)
22import Control.Applicative
23import Control.Applicative
23import Control.Monad
24import Control.Monad
25+import Control.Monad.Trans.Maybe (MaybeT(..), runMaybeT)
24import System.Exit
26import System.Exit
25import System.Process
27import System.Process
26import System.FilePath (pathSeparator)
28import System.FilePath (pathSeparator)
27−import System.Directory (getCurrentDirectory, getDirectoryContents)
29+import System.Directory (getCurrentDirectory, getDirectoryContents, findExecutable)
28import System.Environment (getArgs)
30import System.Environment (getArgs)
29import Text.Parsec (ParseError)
31import Text.Parsec (ParseError)
30import qualified Paths_purescript as Paths
32import qualified Paths_purescript as Paths
@@ -68,12 +70,18 @@ assertCompiles inputFile = do
68 args <- getArgs
70 args <- getArgs
69 if "--run-js" `elem` args
71 if "--run-js" `elem` args
70 then do
72 then do
73+ process <- findNodeProcess
71− (exitCode, out, err) <- readProcessWithExitCode "nodejs" [] js
74+ result <- traverse (\node -> readProcessWithExitCode node [] js) process
72− case exitCode of
75+ case result of
73− ExitSuccess -> putStrLn out >> return Nothing
76+ Just (ExitSuccess, out, _) -> putStrLn out >> return Nothing
74− ExitFailure code -> return $ Just err
77+ Just (ExitFailure _, _, err) -> return $ Just err
78+ Nothing -> return $ Just "Couldn't find node.js executable"
75 else return Nothing
79 else return Nothing
76
80
81+findNodeProcess :: IO (Maybe String)
82+findNodeProcess = runMaybeT . msum $ map (MaybeT . findExecutable) names
83+ where names = ["nodejs", "node"]
84+
77assertDoesNotCompile :: FilePath -> IO ()
85assertDoesNotCompile :: FilePath -> IO ()
78assertDoesNotCompile inputFile = do
86assertDoesNotCompile inputFile = do
79 putStrLn $ "assert " ++ inputFile ++ " does not compile"
87 putStrLn $ "assert " ++ inputFile ++ " does not compile"