1'use strict'; 2const common = require('../common'); 3const tmpdir = require('../common/tmpdir'); 4const { strictEqual } = require('assert'); 5const { closeSync, openSync, readFileSync, writeFileSync } = require('fs'); 6const { join } = require('path'); 7const { WASI } = require('wasi'); 8const modulePath = join(__dirname, 'wasm', 'stdin.wasm'); 9const buffer = readFileSync(modulePath); 10const stdinFile = join(tmpdir.path, 'stdin.txt'); 11const stdoutFile = join(tmpdir.path, 'stdout.txt'); 12const stderrFile = join(tmpdir.path, 'stderr.txt'); 13 14tmpdir.refresh(); 15// Write 33 x's. The test's buffer only holds 31 x's + a terminator. 16writeFileSync(stdinFile, 'x'.repeat(33)); 17 18const stdin = openSync(stdinFile, 'r'); 19const stdout = openSync(stdoutFile, 'a'); 20const stderr = openSync(stderrFile, 'a'); 21const wasi = new WASI({ stdin, stdout, stderr, returnOnExit: true }); 22const importObject = { wasi_snapshot_preview1: wasi.wasiImport }; 23 24(async () => { 25 const { instance } = await WebAssembly.instantiate(buffer, importObject); 26 27 strictEqual(wasi.start(instance), 0); 28 closeSync(stdin); 29 closeSync(stdout); 30 closeSync(stderr); 31 strictEqual(readFileSync(stdoutFile, 'utf8').trim(), 'x'.repeat(31)); 32 strictEqual(readFileSync(stderrFile, 'utf8').trim(), ''); 33})().then(common.mustCall()); 34