on master help sign in
Add nix files and use phantomjs for tests
77919a7Hamish Mackenzie
.travis.yml+1
@@ -10,6 +10,7 @@ cache:
10env:
10env:
11# - CABALVER=1.24 GHCVER=7.10.3 OSVER=xenial
11# - CABALVER=1.24 GHCVER=7.10.3 OSVER=xenial
12 - CABALVER=1.24 GHCVER=8.0.1 OSVER=xenial
12 - CABALVER=1.24 GHCVER=8.0.1 OSVER=xenial
13+ - CABALVER=1.24 GHCVER=8.0.2 OSVER=xenial
13 - CABALVER=1.24 GHCVER=7.10.3 OSVER=trusty
14 - CABALVER=1.24 GHCVER=7.10.3 OSVER=trusty
14 - CABALVER=1.24 GHCVER=8.0.1 OSVER=trusty
15 - CABALVER=1.24 GHCVER=8.0.1 OSVER=trusty
15 - CABALVER=1.24 GHCVER=8.0.2 OSVER=trusty
16 - CABALVER=1.24 GHCVER=8.0.2 OSVER=trusty
default.nixnew file+7
@@ -0,0 +1,7 @@
1+haskellPackages: {
2+ jsaddle = haskellPackages.callPackage ./jsaddle {};
3+ jsaddle-warp = haskellPackages.callPackage ./jsaddle-warp {};
4+ jsaddle-wkwebview = haskellPackages.callPackage ./jsaddle-wkwebview {};
5+ jsaddle-webkit2gtk = haskellPackages.callPackage ./jsaddle-webkit2gtk {};
6+ jsaddle-webkitgtk = haskellPackages.callPackage ./jsaddle-webkitgtk {};
7+}
jsaddle-warp/default.nixnew file+23
@@ -0,0 +1,23 @@
1+{ mkDerivation, aeson, base, bytestring, containers, deepseq
2+, doctest, filepath, ghc-prim, http-types, jsaddle, lens, primitive
3+, process, QuickCheck, ref-tf, stdenv, stm, text, time
4+, transformers, wai, wai-websockets, warp, websockets, osx_sdk
5+, darwin, webdriver, phantomjs
6+}:
7+mkDerivation {
8+ pname = "jsaddle-warp";
9+ version = "0.8.2.0";
10+ src = ./.;
11+ libraryHaskellDepends = [
12+ aeson base containers http-types jsaddle stm text time transformers
13+ wai wai-websockets warp websockets osx_sdk darwin.libobjc
14+ darwin.apple_sdk.libs.xpc
15+ ];
16+ testHaskellDepends = [
17+ base bytestring deepseq doctest filepath ghc-prim jsaddle lens
18+ primitive process QuickCheck ref-tf webdriver phantomjs
19+ ];
20+ testTarget = "--test-option=${jsaddle.src}";
21+ description = "Interface for JavaScript that works with GHCJS and GHC";
22+ license = stdenv.lib.licenses.mit;
23+}
jsaddle-warp/jsaddle-warp.cabal+13−1
@@ -51,17 +51,29 @@ test-suite test-tool
51
51
52 build-depends:
52 build-depends:
53 QuickCheck -any,
53 QuickCheck -any,
54+ aeson -any,
54 bytestring -any,
55 bytestring -any,
56+ containers -any,
55 deepseq -any,
57 deepseq -any,
56 doctest >=0.10.1 && <0.12,
58 doctest >=0.10.1 && <0.12,
57 filepath >=1.4.0.0 && <1.5,
59 filepath >=1.4.0.0 && <1.5,
58 ghc-prim -any,
60 ghc-prim -any,
61+ http-types -any,
59 jsaddle -any,
62 jsaddle -any,
60 jsaddle-warp -any,
63 jsaddle-warp -any,
61 lens -any,
64 lens -any,
62 ref-tf -any,
65 ref-tf -any,
63 primitive -any,
66 primitive -any,
64− process >=1.2.3.0 && <1.5
67+ process >=1.2.3.0 && <1.5,
68+ stm -any,
69+ text -any,
70+ time -any,
71+ transformers -any,
72+ wai -any,
73+ wai-websockets -any,
74+ warp -any,
75+ webdriver >=0.8.4 && <0.9,
76+ websockets -any
65 type: exitcode-stdio-1.0
77 type: exitcode-stdio-1.0
66 main-is: DocTest.hs
78 main-is: DocTest.hs
67 build-depends:
79 build-depends:
jsaddle-warp/tests/DocTest.hs+68−65
@@ -13,13 +13,16 @@ import System.Exit (exitFailure, exitWith, ExitCode(..))
13import System.Process (readProcess, system)
13import System.Process (readProcess, system)
14import Control.Concurrent (forkIO)
14import Control.Concurrent (forkIO)
15import Control.Monad (void)
15import Control.Monad (void)
16+import Control.Monad.IO.Class (MonadIO(..))
16import Data.Monoid ((<>))
17import Data.Monoid ((<>))
17import System.Environment (getArgs)
18import System.Environment (getArgs)
18import Language.Javascript.JSaddle.Run.Files (jsaddleJs)
19import Language.Javascript.JSaddle.Run.Files (jsaddleJs)
19import qualified Data.ByteString.Lazy.Char8 as BS (unpack)
20import qualified Data.ByteString.Lazy.Char8 as BS (unpack)
21+import Test.WebDriver (runSession, defaultConfig, openPage, closeSession)
20
22
21main :: IO ()
23main :: IO ()
22main = do
24main = do
25+ putStrLn "Hello"
23 jsaddlePath <- getArgs >>= \case
26 jsaddlePath <- getArgs >>= \case
24 [arg] -> return arg
27 [arg] -> return arg
25 _ -> do
28 _ -> do
@@ -27,70 +30,70 @@ main = do
27 exitFailure
30 exitFailure
28 hSetBuffering stdout LineBuffering
31 hSetBuffering stdout LineBuffering
29 hSetBuffering stderr LineBuffering
32 hSetBuffering stderr LineBuffering
30− node <- system "nodejs --version" >>= \case
33+ node <- system "phantomjs --version" >>= \case
31− ExitSuccess -> return "nodejs"
34+ ExitSuccess -> return ()
32− _ -> return "node"
33− system (node <> " --version") >>= \case
34− ExitSuccess -> putStrLn "Node.js found"
35 e -> do
35 e -> do
36− putStrLn "Node.js not found"
36+ putStrLn "phantomjs not found"
37 exitWith e
37 exitWith e
38− forkIO . void $ readProcess node ["--harmony"] (BS.unpack jsaddleJs) >>= putStr
38+ forkIO . void $ readProcess "phantomjs" ["--webdriver=4444"] (BS.unpack jsaddleJs) >>= putStr
39+ runSession defaultConfig $ do
40+ openPage "http://localhost:3709"
39− doctest [
41+ liftIO $ doctest [
40− "-hide-all-packages",
42+ "-hide-all-packages",
41− "-package=base-" ++ VERSION_base,
43+ "-package=base-" ++ VERSION_base,
42− "-package=lens-" ++ VERSION_lens,
44+ "-package=lens-" ++ VERSION_lens,
43− "-package=text-" ++ VERSION_text,
45+ "-package=text-" ++ VERSION_text,
44− "-package=bytestring-" ++ VERSION_bytestring,
46+ "-package=bytestring-" ++ VERSION_bytestring,
45− "-package=transformers-" ++ VERSION_transformers,
47+ "-package=transformers-" ++ VERSION_transformers,
46− "-package=websockets-" ++ VERSION_websockets,
48+ "-package=websockets-" ++ VERSION_websockets,
47− "-package=primitive-" ++ VERSION_primitive,
49+ "-package=primitive-" ++ VERSION_primitive,
48− "-package=aeson-" ++ VERSION_aeson,
50+ "-package=aeson-" ++ VERSION_aeson,
49− "-package=websockets-" ++ VERSION_websockets,
51+ "-package=websockets-" ++ VERSION_websockets,
50− "-package=wai-" ++ VERSION_wai,
52+ "-package=wai-" ++ VERSION_wai,
51− "-package=wai-websockets-" ++ VERSION_wai_websockets,
53+ "-package=wai-websockets-" ++ VERSION_wai_websockets,
52− "-package=warp-" ++ VERSION_warp,
54+ "-package=warp-" ++ VERSION_warp,
53− "-package=http-types-" ++ VERSION_http_types,
55+ "-package=http-types-" ++ VERSION_http_types,
54− "-package=stm-" ++ VERSION_stm,
56+ "-package=stm-" ++ VERSION_stm,
55− "-package=time-" ++ VERSION_time,
57+ "-package=time-" ++ VERSION_time,
56− "-package=containers-" ++ VERSION_containers,
58+ "-package=containers-" ++ VERSION_containers,
57− "-package=process-" ++ VERSION_process,
59+ "-package=process-" ++ VERSION_process,
58− "-package=filepath-" ++ VERSION_filepath,
60+ "-package=filepath-" ++ VERSION_filepath,
59− "-package=ref-tf-" ++ VERSION_ref_tf,
61+ "-package=ref-tf-" ++ VERSION_ref_tf,
60− "-package=deepseq-" ++ VERSION_deepseq,
62+ "-package=deepseq-" ++ VERSION_deepseq,
61− "-package=ghc-prim-" ++ VERSION_ghc_prim,
63+ "-package=ghc-prim-" ++ VERSION_ghc_prim,
62− "-i" <> jsaddlePath </> "jsaddle-warp/src",
64+ "-i" <> "src",
63− "-i" <> jsaddlePath </> "jsaddle-warp/src-ghc",
65+ "-i" <> "src-ghc",
64− jsaddlePath </> "jsaddle-warp/src/Language/Javascript/JSaddle/Test.hs",
66+ "src/Language/Javascript/JSaddle/Test.hs",
65− "-i" <> jsaddlePath </> "jsaddle",
67+ "-i" <> jsaddlePath,
66− jsaddlePath </> "jsaddle/src-ghc/Data/JSString/Text.hs",
68+ jsaddlePath </> "src-ghc/Data/JSString/Text.hs",
67− jsaddlePath </> "jsaddle/src-ghc/Data/JSString/Internal/Type.hs",
69+ jsaddlePath </> "src-ghc/Data/JSString/Internal/Type.hs",
68− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Foreign.hs",
70+ jsaddlePath </> "src-ghc/GHCJS/Foreign.hs",
69− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Foreign/Internal.hs",
71+ jsaddlePath </> "src-ghc/GHCJS/Foreign/Internal.hs",
70− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Internal/Types.hs",
72+ jsaddlePath </> "src-ghc/GHCJS/Internal/Types.hs",
71− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Marshal.hs",
73+ jsaddlePath </> "src-ghc/GHCJS/Marshal.hs",
72− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Marshal/Pure.hs",
74+ jsaddlePath </> "src-ghc/GHCJS/Marshal/Pure.hs",
73− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Marshal/Internal.hs",
75+ jsaddlePath </> "src-ghc/GHCJS/Marshal/Internal.hs",
74− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Prim.hs",
76+ jsaddlePath </> "src-ghc/GHCJS/Prim.hs",
75− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Prim/Internal.hs",
77+ jsaddlePath </> "src-ghc/GHCJS/Prim/Internal.hs",
76− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Types.hs",
78+ jsaddlePath </> "src-ghc/GHCJS/Types.hs",
77− jsaddlePath </> "jsaddle/src-ghc/JavaScript/Array.hs",
79+ jsaddlePath </> "src-ghc/JavaScript/Array.hs",
78− jsaddlePath </> "jsaddle/src-ghc/JavaScript/Array/Internal.hs",
80+ jsaddlePath </> "src-ghc/JavaScript/Array/Internal.hs",
79− jsaddlePath </> "jsaddle/src-ghc/JavaScript/Object/Internal.hs",
81+ jsaddlePath </> "src-ghc/JavaScript/Object/Internal.hs",
80− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle.hs",
82+ jsaddlePath </> "src/Language/Javascript/JSaddle.hs",
81− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Arguments.hs",
83+ jsaddlePath </> "src/Language/Javascript/JSaddle/Arguments.hs",
82− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Classes.hs",
84+ jsaddlePath </> "src/Language/Javascript/JSaddle/Classes.hs",
83− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Classes/Internal.hs",
85+ jsaddlePath </> "src/Language/Javascript/JSaddle/Classes/Internal.hs",
84− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Evaluate.hs",
86+ jsaddlePath </> "src/Language/Javascript/JSaddle/Evaluate.hs",
85− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Exception.hs",
87+ jsaddlePath </> "src/Language/Javascript/JSaddle/Exception.hs",
86− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Monad.hs",
88+ jsaddlePath </> "src/Language/Javascript/JSaddle/Monad.hs",
87− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Marshal/String.hs",
89+ jsaddlePath </> "src/Language/Javascript/JSaddle/Marshal/String.hs",
88− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Native.hs",
90+ jsaddlePath </> "src/Language/Javascript/JSaddle/Native.hs",
89− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Native/Internal.hs",
91+ jsaddlePath </> "src/Language/Javascript/JSaddle/Native/Internal.hs",
90− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Object.hs",
92+ jsaddlePath </> "src/Language/Javascript/JSaddle/Object.hs",
91− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Properties.hs",
93+ jsaddlePath </> "src/Language/Javascript/JSaddle/Properties.hs",
92− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Run.hs",
94+ jsaddlePath </> "src/Language/Javascript/JSaddle/Run.hs",
93− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Run/Files.hs",
95+ jsaddlePath </> "src/Language/Javascript/JSaddle/Run/Files.hs",
94− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/String.hs",
96+ jsaddlePath </> "src/Language/Javascript/JSaddle/String.hs",
95− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Types.hs",
97+ jsaddlePath </> "src/Language/Javascript/JSaddle/Types.hs",
96− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Value.hs" ]
98+ jsaddlePath </> "src/Language/Javascript/JSaddle/Value.hs" ]
99+ closeSession
jsaddle-webkit2gtk/default.nixnew file+16
@@ -0,0 +1,16 @@
1+{ mkDerivation, aeson, base, bytestring, directory, gi-gio, gi-glib
2+, gi-gtk, gi-javascriptcore, gi-webkit2, haskell-gi-base, jsaddle
3+, stdenv, text, unix, webkit2gtk3-javascriptcore
4+}:
5+mkDerivation {
6+ pname = "jsaddle-webkit2gtk";
7+ version = "0.8.2.2";
8+ src = ./.;
9+ libraryHaskellDepends = [
10+ aeson base bytestring directory gi-gio gi-glib gi-gtk
11+ gi-javascriptcore gi-webkit2 haskell-gi-base jsaddle text unix
12+ webkit2gtk3-javascriptcore
13+ ];
14+ description = "Interface for JavaScript that works with GHCJS and GHC";
15+ license = stdenv.lib.licenses.mit;
16+}
jsaddle-webkitgtk/default.nixnew file+16
@@ -0,0 +1,16 @@
1+{ mkDerivation, aeson, base, bytestring, directory, gi-glib, gi-gtk
2+, gi-javascriptcore, gi-webkit, haskell-gi-base, jsaddle, stdenv
3+, text, unix, webkitgtk3-javascriptcore
4+}:
5+mkDerivation {
6+ pname = "jsaddle-webkitgtk";
7+ version = "0.8.2.2";
8+ src = ./.;
9+ libraryHaskellDepends = [
10+ aeson base bytestring directory gi-glib gi-gtk gi-javascriptcore
11+ gi-webkit haskell-gi-base jsaddle text unix
12+ webkitgtk3-javascriptcore
13+ ];
14+ description = "Interface for JavaScript that works with GHCJS and GHC";
15+ license = stdenv.lib.licenses.mit;
16+}
jsaddle-wkwebview/default.nixnew file+14
@@ -0,0 +1,14 @@
1+{ mkDerivation, aeson, base, bytestring, jsaddle, stdenv
2+, osx_sdk, darwin }:
3+mkDerivation {
4+ pname = "jsaddle-wkwebview";
5+ version = "0.8.2.0";
6+ src = ./.;
7+ libraryHaskellDepends = [ aeson base bytestring jsaddle
8+ osx_sdk darwin.libobjc darwin.apple_sdk.libs.xpc ];
9+ description = "Interface for JavaScript that works with GHCJS and GHC";
10+ license = stdenv.lib.licenses.mit;
11+ preBuild = ''
12+ sed -i 's/\(windowStyleMask =\).*;/\1 0xf;/g' cbits-cocoa/AppDelegate.m
13+ '';
14+}
jsaddle/default.nixnew file+17
@@ -0,0 +1,17 @@
1+{ mkDerivation, aeson, attoparsec, base, base64-bytestring
2+, bytestring, containers, deepseq, filepath, ghc-prim, http-types
3+, lens, primitive, process, ref-tf, scientific, stdenv, stm, text
4+, time, transformers, unordered-containers, vector
5+}:
6+mkDerivation {
7+ pname = "jsaddle";
8+ version = "0.8.0.1";
9+ src = ./.;
10+ libraryHaskellDepends = [
11+ aeson attoparsec base base64-bytestring bytestring containers
12+ deepseq filepath ghc-prim http-types lens primitive process ref-tf
13+ scientific stm text time transformers unordered-containers vector
14+ ];
15+ description = "Interface for JavaScript that works with GHCJS and GHC";
16+ license = stdenv.lib.licenses.mit;
17+}
travis/build.sh+2−3
@@ -10,11 +10,10 @@ if [[ -d .cabal && -d .ghc ]]; then
10 cp -a .cabal .ghc /root
10 cp -a .cabal .ghc /root
11fi
11fi
12
12
13−npm install ws
14−
15cabal update
13cabal update
16cabal new-build --constraint='Cabal>=1.24.2.0' 'jsaddle-warp:lib:jsaddle-warp' 'jsaddle-warp:test:test-tool'
14cabal new-build --constraint='Cabal>=1.24.2.0' 'jsaddle-warp:lib:jsaddle-warp' 'jsaddle-warp:test:test-tool'
15+cd jsaddle-warp
17−GHC_PACKAGE_PATH=/opt/ghc/$GHCVER/lib/ghc-$GHCVER/package.conf.d:~/.cabal/store/ghc-$GHCVER/package.db:./dist-newstyle/packagedb/ghc-$GHCVER jsaddle_datadir=`pwd` ./dist-newstyle/build/jsaddle-warp-$JSADDLE_WARP_VERSION/build/test-tool/test-tool .
16+GHC_PACKAGE_PATH=/opt/ghc/$GHCVER/lib/ghc-$GHCVER/package.conf.d:~/.cabal/store/ghc-$GHCVER/package.db:./dist-newstyle/packagedb/ghc-$GHCVER jsaddle_datadir=`pwd` ../dist-newstyle/build/jsaddle-warp-$JSADDLE_WARP_VERSION/build/test-tool/test-tool ../jsaddle-warp
18
17
19# update the cache
18# update the cache
20rm -rf .cabal
19rm -rf .cabal
travis/trusty.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
4 apt-get -y install software-properties-common && \
4 apt-get -y install software-properties-common && \
5 add-apt-repository -y ppa:hvr/ghc && \
5 add-apt-repository -y ppa:hvr/ghc && \
6 apt-get update && \
6 apt-get update && \
7− apt-get -y install happy-1.19.5 alex-3.1.7 nodejs npm
7+ apt-get -y install happy-1.19.5 alex-3.1.7 phantomjs
8
8
9RUN mkdir /build
9RUN mkdir /build
10WORKDIR /build
10WORKDIR /build
travis/vivid.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
4 apt-get -y install software-properties-common && \
4 apt-get -y install software-properties-common && \
5 add-apt-repository -y ppa:hvr/ghc && \
5 add-apt-repository -y ppa:hvr/ghc && \
6 apt-get update && \
6 apt-get update && \
7− apt-get -y install happy-1.19.5 alex-3.1.7 nodejs npm
7+ apt-get -y install happy-1.19.5 alex-3.1.7 phantomjs
8
8
9RUN mkdir /build
9RUN mkdir /build
10WORKDIR /build
10WORKDIR /build
travis/wily.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
4 apt-get -y install software-properties-common && \
4 apt-get -y install software-properties-common && \
5 add-apt-repository -y ppa:hvr/ghc && \
5 add-apt-repository -y ppa:hvr/ghc && \
6 apt-get update && \
6 apt-get update && \
7− apt-get -y install happy-1.19.5 alex-3.1.7 nodejs npm
7+ apt-get -y install happy-1.19.5 alex-3.1.7 phantomjs
8
8
9RUN mkdir /build
9RUN mkdir /build
10WORKDIR /build
10WORKDIR /build
travis/xenial.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
4 apt-get -y install software-properties-common && \
4 apt-get -y install software-properties-common && \
5 add-apt-repository -y ppa:hvr/ghc && \
5 add-apt-repository -y ppa:hvr/ghc && \
6 apt-get update && \
6 apt-get update && \
7− apt-get -y install happy-1.19.5 alex-3.1.7 nodejs npm
7+ apt-get -y install happy-1.19.5 alex-3.1.7 phantomjs
8
8
9RUN mkdir /build
9RUN mkdir /build
10WORKDIR /build
10WORKDIR /build