on master help sign in
Add nix files and use phantomjs for tests
commit77919a76ccb1404b1001d86389c8511399582808 authorHamish Mackenzie <Hamish.K.Mackenzie@googlemail.com> dateWed 18 Jan 2017, 19:05 (10 years ago) parent90cff2c
14 files changed+181−73
.travis.yml+1 default.nix+7 jsaddle-warp/default.nix+23 jsaddle-warp/jsaddle-warp.cabal+13−1 jsaddle-warp/tests/DocTest.hs+68−65 jsaddle-webkit2gtk/default.nix+16 jsaddle-webkitgtk/default.nix+16 jsaddle-wkwebview/default.nix+14 jsaddle/default.nix+17 travis/build.sh+2−3 travis/trusty.Dockerfile+1−1 travis/vivid.Dockerfile+1−1 travis/wily.Dockerfile+1−1 travis/xenial.Dockerfile+1−1
.travis.yml+1
@@ -10,6 +10,7 @@ cache:
1010env:
1111# - CABALVER=1.24 GHCVER=7.10.3 OSVER=xenial
1212 - CABALVER=1.24 GHCVER=8.0.1 OSVER=xenial
13+ - CABALVER=1.24 GHCVER=8.0.2 OSVER=xenial
1314 - CABALVER=1.24 GHCVER=7.10.3 OSVER=trusty
1415 - CABALVER=1.24 GHCVER=8.0.1 OSVER=trusty
1516 - 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
5151
5252 build-depends:
5353 QuickCheck -any,
54+ aeson -any,
5455 bytestring -any,
56+ containers -any,
5557 deepseq -any,
5658 doctest >=0.10.1 && <0.12,
5759 filepath >=1.4.0.0 && <1.5,
5860 ghc-prim -any,
61+ http-types -any,
5962 jsaddle -any,
6063 jsaddle-warp -any,
6164 lens -any,
6265 ref-tf -any,
6366 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
6577 type: exitcode-stdio-1.0
6678 main-is: DocTest.hs
6779 build-depends:
jsaddle-warp/tests/DocTest.hs+68−65
@@ -13,13 +13,16 @@ import System.Exit (exitFailure, exitWith, ExitCode(..))
1313import System.Process (readProcess, system)
1414import Control.Concurrent (forkIO)
1515import Control.Monad (void)
16+import Control.Monad.IO.Class (MonadIO(..))
1617import Data.Monoid ((<>))
1718import System.Environment (getArgs)
1819import Language.Javascript.JSaddle.Run.Files (jsaddleJs)
1920import qualified Data.ByteString.Lazy.Char8 as BS (unpack)
21+import Test.WebDriver (runSession, defaultConfig, openPage, closeSession)
2022
2123main :: IO ()
2224main = do
25+ putStrLn "Hello"
2326 jsaddlePath <- getArgs >>= \case
2427 [arg] -> return arg
2528 _ -> do
@@ -27,70 +30,70 @@ main = do
2730 exitFailure
2831 hSetBuffering stdout LineBuffering
2932 hSetBuffering stderr LineBuffering
30− node <- system "nodejs --version" >>= \case
31− ExitSuccess -> return "nodejs"
32− _ -> return "node"
33− system (node <> " --version") >>= \case
34− ExitSuccess -> putStrLn "Node.js found"
33+ node <- system "phantomjs --version" >>= \case
34+ ExitSuccess -> return ()
3535 e -> do
36− putStrLn "Node.js not found"
36+ putStrLn "phantomjs not found"
3737 exitWith e
38− forkIO . void $ readProcess node ["--harmony"] (BS.unpack jsaddleJs) >>= putStr
39− doctest [
40− "-hide-all-packages",
41− "-package=base-" ++ VERSION_base,
42− "-package=lens-" ++ VERSION_lens,
43− "-package=text-" ++ VERSION_text,
44− "-package=bytestring-" ++ VERSION_bytestring,
45− "-package=transformers-" ++ VERSION_transformers,
46− "-package=websockets-" ++ VERSION_websockets,
47− "-package=primitive-" ++ VERSION_primitive,
48− "-package=aeson-" ++ VERSION_aeson,
49− "-package=websockets-" ++ VERSION_websockets,
50− "-package=wai-" ++ VERSION_wai,
51− "-package=wai-websockets-" ++ VERSION_wai_websockets,
52− "-package=warp-" ++ VERSION_warp,
53− "-package=http-types-" ++ VERSION_http_types,
54− "-package=stm-" ++ VERSION_stm,
55− "-package=time-" ++ VERSION_time,
56− "-package=containers-" ++ VERSION_containers,
57− "-package=process-" ++ VERSION_process,
58− "-package=filepath-" ++ VERSION_filepath,
59− "-package=ref-tf-" ++ VERSION_ref_tf,
60− "-package=deepseq-" ++ VERSION_deepseq,
61− "-package=ghc-prim-" ++ VERSION_ghc_prim,
62− "-i" <> jsaddlePath </> "jsaddle-warp/src",
63− "-i" <> jsaddlePath </> "jsaddle-warp/src-ghc",
64− jsaddlePath </> "jsaddle-warp/src/Language/Javascript/JSaddle/Test.hs",
65− "-i" <> jsaddlePath </> "jsaddle",
66− jsaddlePath </> "jsaddle/src-ghc/Data/JSString/Text.hs",
67− jsaddlePath </> "jsaddle/src-ghc/Data/JSString/Internal/Type.hs",
68− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Foreign.hs",
69− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Foreign/Internal.hs",
70− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Internal/Types.hs",
71− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Marshal.hs",
72− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Marshal/Pure.hs",
73− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Marshal/Internal.hs",
74− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Prim.hs",
75− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Prim/Internal.hs",
76− jsaddlePath </> "jsaddle/src-ghc/GHCJS/Types.hs",
77− jsaddlePath </> "jsaddle/src-ghc/JavaScript/Array.hs",
78− jsaddlePath </> "jsaddle/src-ghc/JavaScript/Array/Internal.hs",
79− jsaddlePath </> "jsaddle/src-ghc/JavaScript/Object/Internal.hs",
80− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle.hs",
81− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Arguments.hs",
82− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Classes.hs",
83− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Classes/Internal.hs",
84− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Evaluate.hs",
85− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Exception.hs",
86− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Monad.hs",
87− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Marshal/String.hs",
88− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Native.hs",
89− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Native/Internal.hs",
90− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Object.hs",
91− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Properties.hs",
92− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Run.hs",
93− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Run/Files.hs",
94− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/String.hs",
95− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Types.hs",
96− jsaddlePath </> "jsaddle/src/Language/Javascript/JSaddle/Value.hs" ]
38+ forkIO . void $ readProcess "phantomjs" ["--webdriver=4444"] (BS.unpack jsaddleJs) >>= putStr
39+ runSession defaultConfig $ do
40+ openPage "http://localhost:3709"
41+ liftIO $ doctest [
42+ "-hide-all-packages",
43+ "-package=base-" ++ VERSION_base,
44+ "-package=lens-" ++ VERSION_lens,
45+ "-package=text-" ++ VERSION_text,
46+ "-package=bytestring-" ++ VERSION_bytestring,
47+ "-package=transformers-" ++ VERSION_transformers,
48+ "-package=websockets-" ++ VERSION_websockets,
49+ "-package=primitive-" ++ VERSION_primitive,
50+ "-package=aeson-" ++ VERSION_aeson,
51+ "-package=websockets-" ++ VERSION_websockets,
52+ "-package=wai-" ++ VERSION_wai,
53+ "-package=wai-websockets-" ++ VERSION_wai_websockets,
54+ "-package=warp-" ++ VERSION_warp,
55+ "-package=http-types-" ++ VERSION_http_types,
56+ "-package=stm-" ++ VERSION_stm,
57+ "-package=time-" ++ VERSION_time,
58+ "-package=containers-" ++ VERSION_containers,
59+ "-package=process-" ++ VERSION_process,
60+ "-package=filepath-" ++ VERSION_filepath,
61+ "-package=ref-tf-" ++ VERSION_ref_tf,
62+ "-package=deepseq-" ++ VERSION_deepseq,
63+ "-package=ghc-prim-" ++ VERSION_ghc_prim,
64+ "-i" <> "src",
65+ "-i" <> "src-ghc",
66+ "src/Language/Javascript/JSaddle/Test.hs",
67+ "-i" <> jsaddlePath,
68+ jsaddlePath </> "src-ghc/Data/JSString/Text.hs",
69+ jsaddlePath </> "src-ghc/Data/JSString/Internal/Type.hs",
70+ jsaddlePath </> "src-ghc/GHCJS/Foreign.hs",
71+ jsaddlePath </> "src-ghc/GHCJS/Foreign/Internal.hs",
72+ jsaddlePath </> "src-ghc/GHCJS/Internal/Types.hs",
73+ jsaddlePath </> "src-ghc/GHCJS/Marshal.hs",
74+ jsaddlePath </> "src-ghc/GHCJS/Marshal/Pure.hs",
75+ jsaddlePath </> "src-ghc/GHCJS/Marshal/Internal.hs",
76+ jsaddlePath </> "src-ghc/GHCJS/Prim.hs",
77+ jsaddlePath </> "src-ghc/GHCJS/Prim/Internal.hs",
78+ jsaddlePath </> "src-ghc/GHCJS/Types.hs",
79+ jsaddlePath </> "src-ghc/JavaScript/Array.hs",
80+ jsaddlePath </> "src-ghc/JavaScript/Array/Internal.hs",
81+ jsaddlePath </> "src-ghc/JavaScript/Object/Internal.hs",
82+ jsaddlePath </> "src/Language/Javascript/JSaddle.hs",
83+ jsaddlePath </> "src/Language/Javascript/JSaddle/Arguments.hs",
84+ jsaddlePath </> "src/Language/Javascript/JSaddle/Classes.hs",
85+ jsaddlePath </> "src/Language/Javascript/JSaddle/Classes/Internal.hs",
86+ jsaddlePath </> "src/Language/Javascript/JSaddle/Evaluate.hs",
87+ jsaddlePath </> "src/Language/Javascript/JSaddle/Exception.hs",
88+ jsaddlePath </> "src/Language/Javascript/JSaddle/Monad.hs",
89+ jsaddlePath </> "src/Language/Javascript/JSaddle/Marshal/String.hs",
90+ jsaddlePath </> "src/Language/Javascript/JSaddle/Native.hs",
91+ jsaddlePath </> "src/Language/Javascript/JSaddle/Native/Internal.hs",
92+ jsaddlePath </> "src/Language/Javascript/JSaddle/Object.hs",
93+ jsaddlePath </> "src/Language/Javascript/JSaddle/Properties.hs",
94+ jsaddlePath </> "src/Language/Javascript/JSaddle/Run.hs",
95+ jsaddlePath </> "src/Language/Javascript/JSaddle/Run/Files.hs",
96+ jsaddlePath </> "src/Language/Javascript/JSaddle/String.hs",
97+ jsaddlePath </> "src/Language/Javascript/JSaddle/Types.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
1010 cp -a .cabal .ghc /root
1111fi
1212
13−npm install ws
14−
1513cabal update
1614cabal new-build --constraint='Cabal>=1.24.2.0' 'jsaddle-warp:lib:jsaddle-warp' 'jsaddle-warp:test:test-tool'
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 .
15+cd jsaddle-warp
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
1817
1918# update the cache
2019rm -rf .cabal
travis/trusty.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
44 apt-get -y install software-properties-common && \
55 add-apt-repository -y ppa:hvr/ghc && \
66 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
88
99RUN mkdir /build
1010WORKDIR /build
travis/vivid.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
44 apt-get -y install software-properties-common && \
55 add-apt-repository -y ppa:hvr/ghc && \
66 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
88
99RUN mkdir /build
1010WORKDIR /build
travis/wily.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
44 apt-get -y install software-properties-common && \
55 add-apt-repository -y ppa:hvr/ghc && \
66 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
88
99RUN mkdir /build
1010WORKDIR /build
travis/xenial.Dockerfile+1−1
@@ -4,7 +4,7 @@ RUN apt-get update && \
44 apt-get -y install software-properties-common && \
55 add-apt-repository -y ppa:hvr/ghc && \
66 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
88
99RUN mkdir /build
1010WORKDIR /build