| #!/usr/bin/env python3 |
| # |
| # Copyright 2016 WebAssembly Community Group participants |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import os |
| import subprocess |
| |
| from .support import run_command, node_has_webassembly, node_test_glue |
| from .shared import BINARYEN_JS, MOZJS, NODEJS, options, fail |
| |
| |
| def test_binaryen_js(): |
| if not (MOZJS or NODEJS): |
| print('no vm to run binaryen.js tests') |
| return |
| |
| node_has_wasm = NODEJS and node_has_webassembly(NODEJS) |
| |
| if not os.path.exists(BINARYEN_JS): |
| print('no binaryen.js build to test') |
| return |
| |
| print('\n[ checking binaryen.js testcases... ]\n') |
| |
| for s in sorted(os.listdir(os.path.join(options.binaryen_test, 'binaryen.js'))): |
| if not s.endswith('.js'): |
| continue |
| print(s) |
| 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) }; |
| ''') |
| binaryen_js = open(BINARYEN_JS).read() |
| f.write(binaryen_js) |
| if NODEJS: |
| f.write(node_test_glue()) |
| test_path = os.path.join(options.binaryen_test, 'binaryen.js', s) |
| test_src = open(test_path).read() |
| f.write(test_src) |
| f.close() |
| |
| def test(engine): |
| cmd = [engine, 'a.js'] |
| if 'fatal' not in s: |
| out = run_command(cmd, stderr=subprocess.STDOUT) |
| else: |
| # expect an error - the specific error code will depend on the vm |
| out = run_command(cmd, stderr=subprocess.STDOUT, expected_status=None) |
| expected = open(os.path.join(options.binaryen_test, 'binaryen.js', s + '.txt')).read() |
| if expected not in out: |
| fail(out, expected) |
| |
| # run in all possible shells |
| if MOZJS: |
| test(MOZJS) |
| if NODEJS: |
| if node_has_wasm or 'WebAssembly.' not in test_src: |
| test(NODEJS) |
| else: |
| print('Skipping ' + test_path + ' because WebAssembly might not be supported') |
| |
| |
| if __name__ == "__main__": |
| test_binaryen_js() |