From f71bdfd5ab8f63b82989b3a6ebf47c61787581e3 Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Tue, 4 Jun 2019 12:55:45 +0200 Subject: [PATCH] purescript: add test that compiles & runs a minimal module This ensures the compiler actually works. `console.log` is wrapped in a purescript function and everything is run with nodejs. --- .../compilers/purescript/purescript/default.nix | 7 ++++++- .../purescript/purescript/test-minimal-module/Main.js | 8 ++++++++ .../purescript/test-minimal-module/Main.purs | 9 +++++++++ .../purescript/test-minimal-module/default.nix | 11 +++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.js create mode 100644 pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.purs create mode 100644 pkgs/development/compilers/purescript/purescript/test-minimal-module/default.nix diff --git a/pkgs/development/compilers/purescript/purescript/default.nix b/pkgs/development/compilers/purescript/purescript/default.nix index 8f017e0e2ce..d25cd9fee77 100644 --- a/pkgs/development/compilers/purescript/purescript/default.nix +++ b/pkgs/development/compilers/purescript/purescript/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, zlib, gmp, ncurses5, lib }: +{ stdenv, pkgs, fetchurl, zlib, gmp, ncurses5, lib }: # from justinwoo/easy-purescript-nix # https://github.com/justinwoo/easy-purescript-nix/blob/d383972c82620a712ead4033db14110497bc2c9c/purs.nix @@ -50,6 +50,11 @@ in stdenv.mkDerivation rec { mkdir -p $out/etc/bash_completion.d/ $PURS --bash-completion-script $PURS > $out/etc/bash_completion.d/purs-completion.bash ''; + + passthru.tests = { + minimal-module = pkgs.callPackage ./test-minimal-module {}; + }; + meta = with stdenv.lib; { description = "A strongly-typed functional programming language that compiles to JavaScript"; homepage = http://www.purescript.org/; diff --git a/pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.js b/pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.js new file mode 100644 index 00000000000..a3547e206b7 --- /dev/null +++ b/pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.js @@ -0,0 +1,8 @@ +"use strict" + +exports.log = function (s) { + return function () { + console.log(s); + return {}; + }; +}; diff --git a/pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.purs b/pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.purs new file mode 100644 index 00000000000..8bf5a23f346 --- /dev/null +++ b/pkgs/development/compilers/purescript/purescript/test-minimal-module/Main.purs @@ -0,0 +1,9 @@ +module Main where + +foreign import data Effect :: Type -> Type +data Unit = Unit + +foreign import log :: String -> Effect Unit + +main :: Effect Unit +main = log "hello world" diff --git a/pkgs/development/compilers/purescript/purescript/test-minimal-module/default.nix b/pkgs/development/compilers/purescript/purescript/test-minimal-module/default.nix new file mode 100644 index 00000000000..5f01298960c --- /dev/null +++ b/pkgs/development/compilers/purescript/purescript/test-minimal-module/default.nix @@ -0,0 +1,11 @@ +{ runCommand, purescript, nodejs }: + +runCommand "purescript-test-minimal-module" {} '' + ${purescript}/bin/purs compile -o ./output ${./.}/Main.purs + + echo 'require("./output/Main/index.js").main()' > node.js + + ${nodejs}/bin/node node.js | grep "hello world" || echo "did not output hello world" + + touch $out +''