From daaa648a04cf5543b61fb52b0263dc4b271a4271 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sat, 2 May 2020 21:42:32 +0200 Subject: [PATCH] Use NODE_PATH instead linking to wabt to improve test speed. --- .../inetsoftware/jwebassembly/WasmRule.java | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/test/de/inetsoftware/jwebassembly/WasmRule.java b/test/de/inetsoftware/jwebassembly/WasmRule.java index 9eeef20..5e896a9 100644 --- a/test/de/inetsoftware/jwebassembly/WasmRule.java +++ b/test/de/inetsoftware/jwebassembly/WasmRule.java @@ -61,6 +61,8 @@ public class WasmRule extends TemporaryFolder { private static boolean npmWabtNightly; + private static String nodeModulePath; + private final Class[] classes; private final JWebAssembly compiler; @@ -268,14 +270,30 @@ public class WasmRule extends TemporaryFolder { } execute( processBuilder ); } + } + } - ProcessBuilder processBuilder = new ProcessBuilder( "npm", "link", "wabt" ); + /** + * Get the path of the global installed module pathes. + * + * @return the path + * @throws Exception + * if any error occur. + */ + private static String getNodeModulePath() throws Exception { + if( nodeModulePath == null ) { + ProcessBuilder processBuilder = new ProcessBuilder( "npm", "root", "-g" ); if( IS_WINDOWS ) { processBuilder.command().add( 0, "cmd" ); processBuilder.command().add( 1, "/C" ); } - execute( processBuilder ); + Process process = processBuilder.start(); + int exitCode = process.waitFor(); + nodeModulePath = readStream( process.getInputStream() ).trim(); // module install path + System.out.println( "node global module path: " + nodeModulePath ); + } + return nodeModulePath; } /** @@ -456,7 +474,9 @@ public class WasmRule extends TemporaryFolder { return nodeJsCommand( nodeScript ); case NodeWat: prepareNodeWat(); - return nodeJsCommand( nodeWatScript ); + ProcessBuilder processBuilder = nodeJsCommand( nodeWatScript ); + processBuilder.environment().put( "NODE_PATH", getNodeModulePath() ); + return processBuilder; case Wat2Wasm: prepareWat2Wasm(); return nodeJsCommand( wat2WasmScript );