on 89ba043 help sign in
elk/tests/libraries/LibraryTest.hs
55 lines 1.6 kB history raw
1module Main where
3import Control.Monad (unless)
4import Data.List (isInfixOf)
5import System.Directory
6import System.Exit
7import System.FilePath
8import System.Process
10import Elm.Internal.Paths as Elm
12main :: IO ()
13main = do
14 top <- getCurrentDirectory
16 -- setup submodules and npm
17 runCmd "git" ["submodule", "update", "--init"]
18 out <- readProcess "npm" ["ls", "--parseable"] ""
19 unless ("jsdom" `isInfixOf` out) $ runCmd "npm" ["install","jsdom"]
21 -- setup actual library tests
22 let localCompiler = joinPath [ "dist", "build", "elm", "elm" ]
23 runCmd localCompiler [ "--make"
24 , "--only-js"
25 , "--src-dir=IO"
26 , "--src-dir=Elm-Test"
27 , "--src-dir=" ++ "tests" </> "libraries"
28 , testFile <.> "elm"
29 ]
31 -- run tests
32 let files = [ "IO" </> "share" </> "prescript.js"
33 , Elm.runtime
34 , "build" </> testFile <.> "js"
35 , "IO" </> "share" </> "handler.js"
36 ]
37 testRunner = "build" </> "TestRunner.js"
38 exe <- readProcess "cat" files ""
39 writeFile testRunner exe
40 exitCode <- rawSystem "node" [testRunner]
41 removeDirectoryRecursive "cache"
42 removeDirectoryRecursive "build"
43 exitWith exitCode
44 where
45 testFile = "tests" </> "libraries" </> "Test"
47runCmd :: String -> [String] -> IO ()
48runCmd cmd args = do
49 putStrLn (cmd ++ " " ++ unwords args)
50 (exitCode, stdout, stderr) <- readProcessWithExitCode cmd args ""
51 putStr stdout
52 putStr stderr
53 case exitCode of
54 ExitSuccess -> return ()
55 ExitFailure _ -> exitWith exitCode