From 392b3ef66f007442b7a5ba6ba5fd979bd1c11768 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sat, 1 Dec 2018 18:32:18 +0100 Subject: [PATCH] prepare wat test via SpiderMonkey --- .../jwebassembly/ScriptEngine.java | 13 +++++++-- .../jwebassembly/SpiderMonkeyWatTest.js | 28 +++++++++++++++++++ .../inetsoftware/jwebassembly/WasmRule.java | 20 ++++++++----- 3 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 test/de/inetsoftware/jwebassembly/SpiderMonkeyWatTest.js diff --git a/test/de/inetsoftware/jwebassembly/ScriptEngine.java b/test/de/inetsoftware/jwebassembly/ScriptEngine.java index def393d..adec9ad 100644 --- a/test/de/inetsoftware/jwebassembly/ScriptEngine.java +++ b/test/de/inetsoftware/jwebassembly/ScriptEngine.java @@ -1,5 +1,5 @@ /* - * Copyright 2017 Volker Berlin (i-net software) + * Copyright 2017 - 2018 Volker Berlin (i-net software) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,10 +24,17 @@ import java.util.Collection; public enum ScriptEngine { NodeJS, SpiderMonkey, - NodeWast; + NodeWat, + SpiderMonkeyWat, + ; public static Collection testParams() { - ScriptEngine[][] val = {{ScriptEngine.SpiderMonkey},{ScriptEngine.NodeJS},{ScriptEngine.NodeWast}}; + ScriptEngine[][] val = { // + { ScriptEngine.SpiderMonkey }, // + { ScriptEngine.NodeJS }, // + { ScriptEngine.NodeWat }, // +// { ScriptEngine.SpiderMonkeyWat },// + }; return Arrays.asList(val); } } diff --git a/test/de/inetsoftware/jwebassembly/SpiderMonkeyWatTest.js b/test/de/inetsoftware/jwebassembly/SpiderMonkeyWatTest.js new file mode 100644 index 0000000..b921e17 --- /dev/null +++ b/test/de/inetsoftware/jwebassembly/SpiderMonkeyWatTest.js @@ -0,0 +1,28 @@ +#!/usr/bin/env node + +var filename = '{test.wat}'; +var ret = wasmTextToBinary(read(filename)); + +function instantiate(bytes, imports) { + return WebAssembly.compile(bytes).then( + m => new WebAssembly.Instance(m, imports), reason => console.log(reason) ); +} + +var dependencies = { + "global": {}, + "env": {} +}; +dependencies["global.Math"] = Math; + +function callExport(instance) { + try{ + console.log( instance.exports[scriptArgs[0]]( ...scriptArgs.slice(1) ) ); + }catch(err){ + console.log(err) + } +} + +instantiate( ret, dependencies ).then( + instance => callExport(instance), + reason => console.log(reason) +); diff --git a/test/de/inetsoftware/jwebassembly/WasmRule.java b/test/de/inetsoftware/jwebassembly/WasmRule.java index 6966a91..1b9c84f 100644 --- a/test/de/inetsoftware/jwebassembly/WasmRule.java +++ b/test/de/inetsoftware/jwebassembly/WasmRule.java @@ -54,7 +54,9 @@ public class WasmRule extends TemporaryFolder { private File spiderMonkeyScript; - private File nodeWastScript; + private File nodeWatScript; + + private File spiderMonkeyWatScript; private boolean failed; @@ -113,7 +115,8 @@ public class WasmRule extends TemporaryFolder { nodeScript = createScript( "nodetest.js" ); spiderMonkeyScript = createScript( "SpiderMonkeyTest.js" ); - nodeWastScript = createScript( "WatTest.js" ); + nodeWatScript = createScript( "WatTest.js" ); + spiderMonkeyWatScript = createScript( "SpiderMonkeyWatTest.js" ); //create dummy files to prevent error messages FileOutputStream jsonPackage = new FileOutputStream( new File( getRoot(), "package.json" ) ); @@ -253,13 +256,16 @@ public class WasmRule extends TemporaryFolder { try { switch( script ) { case SpiderMonkey: - processBuilder = spiderMonkeyCommand(); + processBuilder = spiderMonkeyCommand( spiderMonkeyScript ); + break; + case SpiderMonkeyWat: + processBuilder = spiderMonkeyCommand( spiderMonkeyWatScript ); break; case NodeJS: processBuilder = nodeJsCommand( nodeScript ); break; - case NodeWast: - processBuilder = nodeJsCommand( nodeWastScript ); + case NodeWat: + processBuilder = nodeJsCommand( nodeWatScript ); break; default: throw new IllegalStateException( script.toString() ); @@ -304,8 +310,8 @@ public class WasmRule extends TemporaryFolder { * @throws IOException * if the download failed */ - private ProcessBuilder spiderMonkeyCommand() throws IOException { - return new ProcessBuilder( spiderMonkey.getCommand(), "--wasm-gc", spiderMonkeyScript.getAbsolutePath() ); + private ProcessBuilder spiderMonkeyCommand( File script ) throws IOException { + return new ProcessBuilder( spiderMonkey.getCommand(), "--wasm-gc", script.getAbsolutePath() ); } /**