From 748eae93c6c27087113c22f43c9690ee573162d1 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Mon, 20 Jan 2020 13:39:57 -0500 Subject: [PATCH] test: add tests for main() argument handling This test provides missing coverage for __wasi_args_get() and __wasi_args_sizes_get(), which translate to argc and argv in WASI applications. PR-URL: https://github.com/nodejs/node/pull/31426 Reviewed-By: Rich Trott Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- test/wasi/c/main_args.c | 10 ++++++++++ test/wasi/test-wasi.js | 3 ++- test/wasi/wasm/main_args.wasm | Bin 0 -> 30432 bytes 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 test/wasi/c/main_args.c create mode 100755 test/wasi/wasm/main_args.wasm diff --git a/test/wasi/c/main_args.c b/test/wasi/c/main_args.c new file mode 100644 index 00000000000000..48fbfa33ea523e --- /dev/null +++ b/test/wasi/c/main_args.c @@ -0,0 +1,10 @@ +#include +#include + +int main(int argc, char** argv) { + assert(argc == 3); + assert(0 == strcmp(argv[0], "foo")); + assert(0 == strcmp(argv[1], "-bar")); + assert(0 == strcmp(argv[2], "--baz=value")); + return 0; +} diff --git a/test/wasi/test-wasi.js b/test/wasi/test-wasi.js index 01d5aa8fe5cc28..fbd51148cde41f 100644 --- a/test/wasi/test-wasi.js +++ b/test/wasi/test-wasi.js @@ -15,7 +15,7 @@ if (process.argv[2] === 'wasi-child') { tmpdir.refresh(); const wasmDir = path.join(__dirname, 'wasm'); const wasi = new WASI({ - args: [], + args: ['foo', '-bar', '--baz=value'], env: process.env, preopens: { '/sandbox': fixtures.path('wasi'), @@ -64,6 +64,7 @@ if (process.argv[2] === 'wasi-child') { runWASI({ test: 'getentropy' }); runWASI({ test: 'getrusage' }); runWASI({ test: 'gettimeofday' }); + runWASI({ test: 'main_args' }); runWASI({ test: 'notdir' }); // runWASI({ test: 'poll' }); runWASI({ test: 'preopen_populates' }); diff --git a/test/wasi/wasm/main_args.wasm b/test/wasi/wasm/main_args.wasm new file mode 100755 index 0000000000000000000000000000000000000000..60cb69defe2d32422dbe354325a27f499fc8cf78 GIT binary patch literal 30432 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

XWn`B48*f9+Rm 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 literal 0 HcmV?d00001