From 1199947f7fcd7786bc2d0ee7699d715200b3f82e Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Wed, 18 Jun 2014 16:01:21 -0400 Subject: [PATCH] tests.sh: new engine `emscripten` for `nitg -m emscripten` The produced .js files are then executed by nodejs. All base tests that do not import kernel are skipped because since the module lib/emscripten.nit imports the kernel module, an automatic double definition of classes `Object` and `Sys` occurs. nodejs cannot perform correctly synchronized input, thus `stdin` and all file reading does not work although they work in a browser. As a workaround, a special module `emscripten_nodejs.nit` is added that just print "NOT_YET_IMPLEMENTED" on unsupported services on synchronized input, thus marking the test as skipped. Currently, 99 (7% of the 1390 tests) still cause some other kind of failures; they will be investigated later. The whole testing of all the tests takes 68m on my machine. ccache in unusable and the option --jcache of emcc does not bring any boost. So it is unlikely that `testall.sh` will include this engine. Signed-off-by: Jean Privat --- tests/emscripten.skip | 2 ++ tests/emscripten_nodejs.nit | 13 +++++++++++++ tests/sav/emscripten/fixme/base_attr_gen_alt1.res | 1 + .../fixme/base_conflict_submodule_name.res | 1 + .../fixme/base_conflict_submodule_name_alt1.res | 1 + .../fixme/base_conflict_submodule_name_alt2.res | 1 + tests/sav/emscripten_nodejs.res | 1 + tests/tests.sh | 17 +++++++++++++++++ 8 files changed, 37 insertions(+) create mode 100644 tests/emscripten.skip create mode 100644 tests/emscripten_nodejs.nit create mode 100644 tests/sav/emscripten/emscripten_nodejs.res create mode 100644 tests/sav/emscripten/fixme/base_attr_gen_alt1.res create mode 100644 tests/sav/emscripten/fixme/base_conflict_submodule_name.res create mode 100644 tests/sav/emscripten/fixme/base_conflict_submodule_name_alt1.res create mode 100644 tests/sav/emscripten/fixme/base_conflict_submodule_name_alt2.res create mode 100644 tests/sav/emscripten_nodejs.res diff --git a/tests/emscripten.skip b/tests/emscripten.skip new file mode 100644 index 0000000..c782ec0 --- /dev/null +++ b/tests/emscripten.skip @@ -0,0 +1,2 @@ +init_inherit +init_linext diff --git a/tests/emscripten_nodejs.nit b/tests/emscripten_nodejs.nit new file mode 100644 index 0000000..5ada70d --- /dev/null +++ b/tests/emscripten_nodejs.nit @@ -0,0 +1,13 @@ +import emscripten +redef class IFStream + redef fun fill_buffer + do + print "NOT YET IMPLEMENTED" + abort + end + redef init open(f) + do + print "NOT YET IMPLEMENTED" + abort + end +end diff --git a/tests/sav/emscripten/emscripten_nodejs.res b/tests/sav/emscripten/emscripten_nodejs.res new file mode 100644 index 0000000..e69de29 diff --git a/tests/sav/emscripten/fixme/base_attr_gen_alt1.res b/tests/sav/emscripten/fixme/base_attr_gen_alt1.res new file mode 100644 index 0000000..b4de394 --- /dev/null +++ b/tests/sav/emscripten/fixme/base_attr_gen_alt1.res @@ -0,0 +1 @@ +11 diff --git a/tests/sav/emscripten/fixme/base_conflict_submodule_name.res b/tests/sav/emscripten/fixme/base_conflict_submodule_name.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/emscripten/fixme/base_conflict_submodule_name.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/emscripten/fixme/base_conflict_submodule_name_alt1.res b/tests/sav/emscripten/fixme/base_conflict_submodule_name_alt1.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/emscripten/fixme/base_conflict_submodule_name_alt1.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/emscripten/fixme/base_conflict_submodule_name_alt2.res b/tests/sav/emscripten/fixme/base_conflict_submodule_name_alt2.res new file mode 100644 index 0000000..4ad3dc3 --- /dev/null +++ b/tests/sav/emscripten/fixme/base_conflict_submodule_name_alt2.res @@ -0,0 +1 @@ +UNDEFINED diff --git a/tests/sav/emscripten_nodejs.res b/tests/sav/emscripten_nodejs.res new file mode 100644 index 0000000..174d681 --- /dev/null +++ b/tests/sav/emscripten_nodejs.res @@ -0,0 +1 @@ +Not executable (platform?) diff --git a/tests/tests.sh b/tests/tests.sh index 8e2c65f..5672bc1 100755 --- a/tests/tests.sh +++ b/tests/tests.sh @@ -318,6 +318,11 @@ case $engine in niti) enginebinname=nit ;; + emscripten) + enginebinname=nitg + OPT="-m emscripten_nodejs.nit --semi-global $OPT" + savdirs="sav/nitg-sg/" + ;; nitc) echo "disabled engine $engine" exit 0 @@ -410,6 +415,9 @@ for ii in "$@"; do fi ffout="$ff.bin" + if [ "$engine" = "emscripten" ]; then + ffout="$ff.bin.js" + fi if [ "$engine" = "niti" ]; then cat > "./$ff.bin" <&2 "$ff.cmp.err" fi fi + if [ "$engine" = "emscripten" ]; then + echo > "./$ff.bin" "nodejs $ffout \"\$@\"" + chmod +x "$ff.bin" + if grep "Fatal Error: more than one primitive class" "$ff.compile.log" > /dev/null; then + echo " [skip] do no not imports kernel" + echo >>$xml "" + continue + fi + fi if [ "$ERR" != 0 ]; then echo -n "! " cat "$ff.compile.log" "$ff.cmp.err" > "$ff.res" -- 1.7.9.5