Implement a few more WASI APIs Followup to #12704.
diff --git a/src/library_wasi.js b/src/library_wasi.js index c506cbb..bfd2917 100644 --- a/src/library_wasi.js +++ b/src/library_wasi.js
@@ -381,6 +381,31 @@ #endif }, + fd_tell: function(fd, offset_addr) { +#if SYSCALLS_REQUIRE_FILESYSTEM + var stream = SYSCALLS.getStreamFromFD(fd); + var offset = FS.llseek(stream, 0, {{{ cDefs.SEEK_CUR }}}); + {{{ makeSetValue('offset_addr', '0', 'offset', 'i64') }}}; + return 0; +#else + return {{{ cDefs.ESPIPE }}}; +#endif + }, + + fd_renumber: function(fd, to) { +#if SYSCALLS_REQUIRE_FILESYSTEM + var oldStream = SYSCALLS.getStreamFromFD(fd); + var newStream = SYSCALLS.getStreamFromFD(fd); + if (!oldStream || !newStream) return -{{{ cDefs.EINVAL }}}; + var newfd = newStream.fd; + FS.close(newStream); + oldStream.fd = newfd; + return 0; +#else + return {{{ cDefs.ESPIPE }}}; +#endif + }, + $wasiRightsToMuslOFlags: function(rights) { #if SYSCALL_DEBUG err('wasiRightsToMuslOFlags: ' + rights);
diff --git a/test/common.py b/test/common.py index 676738a..d82d329 100644 --- a/test/common.py +++ b/test/common.py
@@ -892,6 +892,7 @@ return '\n'.join(lines) def run_js(self, filename, engine=None, args=None, + input=None, output_nicerizer=None, assert_returncode=0, interleaved_output=True): @@ -916,6 +917,7 @@ jsrun.run_js(filename, engine, args, stdout=stdout, stderr=stderr, + input=input, assert_returncode=assert_returncode) except subprocess.TimeoutExpired as e: timeout_error = e
diff --git a/test/jsrun.py b/test/jsrun.py index eb75b16..12878c5 100644 --- a/test/jsrun.py +++ b/test/jsrun.py
@@ -83,7 +83,7 @@ sys.exit(1) -def run_js(filename, engine, args=None, +def run_js(filename, engine, args=None, input=None, stdin=None, stdout=PIPE, stderr=None, cwd=None, full_output=False, assert_returncode=0, skip_check=False, timeout=DEFAULT_TIMEOUT): @@ -104,6 +104,7 @@ stdin=stdin, stdout=stdout, stderr=stderr, + input=input, cwd=cwd, timeout=timeout, universal_newlines=True)
diff --git a/test/test_other.py b/test/test_other.py index fb88902..b578519 100644 --- a/test/test_other.py +++ b/test/test_other.py
@@ -13343,7 +13343,8 @@ config = json.load(f) exit_code = config.get('exitCode', 0) args = config.get('args', []) - env = config.get('env', []) + env = config.get('env') + stdin = config.get('stdin') if env: env = [f'ENV["{key}"] = "{value}";' for key, value in env.items()] env = '\n'.join(env) @@ -13353,7 +13354,7 @@ '-sPURE_WASI', '-lnodefs.js', '-lnoderawfs.js', wasm, '-o', name + '.js'] + self.get_emcc_args(main_file=True)) - output = self.run_js(name + '.js', args=args, assert_returncode=exit_code) + output = self.run_js(name + '.js', args=args, assert_returncode=exit_code, input=stdin) if 'stdout' in config: self.assertContained(config['stdout'], output) @@ -13368,14 +13369,26 @@ self.run_wasi_test_suite_test('std_env_vars') @requires_node - def test_wasi_std_io_stdout(self): - self.run_wasi_test_suite_test('std_io_stdout') + def test_wasi_std_fs_write(self): + self.run_wasi_test_suite_test('std_fs_write') @requires_node def test_wasi_std_io_stderr(self): self.run_wasi_test_suite_test('std_io_stderr') @requires_node + def test_wasi_std_io_stdin(self): + self.run_wasi_test_suite_test('std_io_stdin') + + @requires_node + def test_wasi_std_io_stdout(self): + self.run_wasi_test_suite_test('std_io_stdout') + + @requires_node + def test_wasi_std_process_exit(self): + self.run_wasi_test_suite_test('std_process_exit') + + @requires_node def test_wasi_clock_res_get(self): self.run_wasi_test_suite_test('wasi_clock_res_get') @@ -13388,6 +13401,14 @@ self.run_wasi_test_suite_test('wasi_fd_fdstat_get') @requires_node + def test_wasi_wasi_fd_renumber(self): + self.run_wasi_test_suite_test('wasi_fd_renumber') + + @requires_node + def test_wasi_wasi_fd_tell_file(self): + self.run_wasi_test_suite_test('wasi_fd_tell_file') + + @requires_node def test_wasi_wasi_fd_write_file(self): self.run_wasi_test_suite_test('wasi_fd_write_file') with open('new_file') as f: