summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/test/binaryenjs.py37
-rw-r--r--scripts/test/shared.py3
-rw-r--r--scripts/test/support.py16
3 files changed, 38 insertions, 18 deletions
diff --git a/scripts/test/binaryenjs.py b/scripts/test/binaryenjs.py
index 4f97ce889..43d039542 100755
--- a/scripts/test/binaryenjs.py
+++ b/scripts/test/binaryenjs.py
@@ -16,23 +16,24 @@
import os
import subprocess
+import sys
from . import shared
from . import support
-def test_binaryen_js():
+def do_test_binaryen_js_with(which):
if not (shared.MOZJS or shared.NODEJS):
print('no vm to run binaryen.js tests')
return
node_has_wasm = shared.NODEJS and support.node_has_webassembly(shared.NODEJS)
- if not os.path.exists(shared.BINARYEN_JS):
- print('no binaryen.js build to test')
+ if not os.path.exists(which):
+ print('no ' + which + ' build to test')
return
- print('\n[ checking binaryen.js testcases... ]\n')
+ print('\n[ checking binaryen.js testcases (' + which + ')... ]\n')
for s in sorted(os.listdir(os.path.join(shared.options.binaryen_test, 'binaryen.js'))):
if not s.endswith('.js'):
@@ -41,15 +42,13 @@ def test_binaryen_js():
f = open('a.js', 'w')
# avoid stdout/stderr ordering issues in some js shells - use just stdout
f.write('''
- console.warn = function(x) { console.log(x) };
+ console.warn = console.error = console.log;
''')
- binaryen_js = open(shared.BINARYEN_JS).read()
+ binaryen_js = open(which).read()
f.write(binaryen_js)
- if shared.NODEJS:
- f.write(support.node_test_glue())
test_path = os.path.join(shared.options.binaryen_test, 'binaryen.js', s)
test_src = open(test_path).read()
- f.write(test_src)
+ f.write(support.js_test_wrap().replace('%TEST%', test_src))
f.close()
def test(engine):
@@ -73,5 +72,23 @@ def test_binaryen_js():
print('Skipping ' + test_path + ' because WebAssembly might not be supported')
-if __name__ == "__main__":
+def test_binaryen_js():
+ do_test_binaryen_js_with(shared.BINARYEN_JS)
+
+
+def test_binaryen_wasm():
+ do_test_binaryen_js_with(shared.BINARYEN_WASM)
+
+
+def test_binaryen_js_and_wasm():
test_binaryen_js()
+ test_binaryen_wasm()
+
+
+if __name__ == "__main__":
+ if sys.argv[1] == "js":
+ test_binaryen_js()
+ elif sys.argv[1] == "wasm":
+ test_binaryen_wasm()
+ else:
+ test_binaryen_js_and_wasm()
diff --git a/scripts/test/shared.py b/scripts/test/shared.py
index 7bf944097..f15424885 100644
--- a/scripts/test/shared.py
+++ b/scripts/test/shared.py
@@ -184,7 +184,8 @@ WASM_REDUCE = [os.path.join(options.binaryen_bin, 'wasm-reduce')]
WASM_METADCE = [os.path.join(options.binaryen_bin, 'wasm-metadce')]
WASM_EMSCRIPTEN_FINALIZE = [os.path.join(options.binaryen_bin,
'wasm-emscripten-finalize')]
-BINARYEN_JS = os.path.join(options.binaryen_bin, 'binaryen.js')
+BINARYEN_JS = os.path.join(options.binaryen_bin, 'binaryen_js.js')
+BINARYEN_WASM = os.path.join(options.binaryen_bin, 'binaryen_wasm.js')
def wrap_with_valgrind(cmd):
diff --git a/scripts/test/support.py b/scripts/test/support.py
index 8f48a7af9..6eee79910 100644
--- a/scripts/test/support.py
+++ b/scripts/test/support.py
@@ -189,10 +189,12 @@ def node_has_webassembly(cmd):
return run_command(cmd) == 'object'
-def node_test_glue():
- # running concatenated files (a.js) in node interferes with module loading
- # because the concatenated file expects a 'var Binaryen' but binaryen.js
- # assigned to module.exports. this is correct behavior but tests then need
- # a workaround:
- return ('if (typeof module === "object" && typeof exports === "object")\n'
- ' Binaryen = module.exports;\n')
+def js_test_wrap():
+ # common wrapper code for JS tests, waiting for binaryen.js to become ready
+ # and providing common utility used by all tests:
+ return '''
+ binaryen.ready.then(function() {
+ function assert(x) { if (!x) throw Error('Test assertion failed'); }
+ %TEST%
+ });
+ '''