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