• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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