Skip to content

Commit

Permalink
test(wasi): add wasi-testsuite as a submodule (denoland/deno#7042)
Browse files Browse the repository at this point in the history
  • Loading branch information
caspervonb committed Jan 31, 2021
1 parent 4f8d2c6 commit 6c4b9a5
Show file tree
Hide file tree
Showing 29 changed files with 80 additions and 386 deletions.
175 changes: 79 additions & 96 deletions wasi/snapshot_preview1_test.ts
Original file line number Diff line number Diff line change
@@ -1,17 1,32 @@
/* eslint-disable */

import { assert, assertEquals } from "../testing/asserts.ts";
import { copy } from "../fs/mod.ts";
import * as path from "../path/mod.ts";
import Context from "./snapshot_preview1.ts";

const ignore = [
"wasi_clock_time_get_realtime.wasm",
];

// TODO(caspervonb) investigate why these tests are failing on windows and fix
// them.
if (Deno.build.os == "windows") {
ignore.push("std_fs_metadata_absolute.wasm");
ignore.push("std_fs_metadata_relative.wasm");
ignore.push("std_fs_read_dir_absolute.wasm");
ignore.push("std_fs_read_dir_relative.wasm");
}

if (import.meta.main) {
const options = JSON.parse(Deno.args[0]);
const binary = await Deno.readFile(Deno.args[1]);
const pathname = Deno.args[1];
const binary = await Deno.readFile(pathname);
const module = await WebAssembly.compile(binary);

const context = new Context({
env: options.env,
args: options.args,
args: [pathname].concat(options.args),
preopens: options.preopens,
});

Expand All @@ -25,115 40,83 @@ if (import.meta.main) {
} else {
const rootdir = path.dirname(path.fromFileUrl(import.meta.url));
const testdir = path.join(rootdir, "testdata");
const outdir = path.join(testdir, "snapshot_preview1");

for await (const entry of Deno.readDir(testdir)) {
if (!entry.name.endsWith(".rs")) {
continue;
}

const process = Deno.run({
cmd: [
"rustc",
"--target",
"wasm32-wasi",
"--out-dir",
outdir,
path.join(testdir, entry.name),
],
stdout: "inherit",
stderr: "inherit",
});

const status = await process.status();
assert(status.success);

process.close();

// TODO(caspervonb) allow the prelude to span multiple lines
const source = await Deno.readTextFile(path.join(testdir, entry.name));
const prelude = source.match(/^\/\/\s*\{.*/);
if (prelude) {
const basename = entry.name.replace(/.rs$/, ".json");
await Deno.writeTextFile(
path.join(outdir, basename),
prelude[0].slice(2),
);
}
}

for await (const entry of Deno.readDir(outdir)) {
if (!entry.name.endsWith(".wasm")) {
continue;
}

Deno.test(entry.name, async function () {
const basename = entry.name.replace(/\.wasm$/, ".json");
const prelude = await Deno.readTextFile(path.resolve(outdir, basename));
const options = JSON.parse(prelude);

await Deno.mkdir(`${testdir}/scratch`);

try {
const process = await Deno.run({
cwd: testdir,
cmd: [
`${Deno.execPath()}`,
"run",
"--quiet",
"--unstable",
"--allow-all",
import.meta.url,
prelude,
path.resolve(outdir, entry.name),
],
stdin: "piped",
stdout: "piped",
stderr: "piped",
});

if (options.stdin) {
const stdin = new TextEncoder().encode(options.stdin);
await Deno.writeAll(process.stdin, stdin);
}

process.stdin.close();

const stdout = await Deno.readAll(process.stdout);
Deno.test({
name: entry.name,
ignore: ignore.includes(entry.name),
fn: async function () {
const basename = entry.name.replace(/\.wasm$/, ".json");
const prelude = await Deno.readTextFile(
path.resolve(testdir, basename),
);
const options = JSON.parse(prelude);

const workdir = await Deno.makeTempDir();
await copy(
path.join(testdir, "fixtures"),
path.join(workdir, "fixtures"),
);

try {
const process = await Deno.run({
cwd: workdir,
cmd: [
`${Deno.execPath()}`,
"run",
"--quiet",
"--unstable",
"--allow-all",
import.meta.url,
prelude,
path.resolve(testdir, entry.name),
],
stdin: "piped",
stdout: "piped",
stderr: "piped",
});

if (options.stdin) {
const stdin = new TextEncoder().encode(options.stdin);
await Deno.writeAll(process.stdin, stdin);
}

if (options.stdout) {
assertEquals(new TextDecoder().decode(stdout), options.stdout);
} else {
await Deno.writeAll(Deno.stdout, stdout);
}
process.stdin.close();

process.stdout.close();
const stdout = await Deno.readAll(process.stdout);

const stderr = await Deno.readAll(process.stderr);
if (options.stdout) {
assertEquals(new TextDecoder().decode(stdout), options.stdout);
} else {
await Deno.writeAll(Deno.stdout, stdout);
}

if (options.stderr) {
assertEquals(new TextDecoder().decode(stderr), options.stderr);
} else {
await Deno.writeAll(Deno.stderr, stderr);
}
process.stdout.close();

process.stderr.close();
const stderr = await Deno.readAll(process.stderr);

if (options.files) {
for (const [key, value] of Object.entries(options.files)) {
assertEquals(value, await Deno.readTextFile(`${testdir}/${key}`));
if (options.stderr) {
assertEquals(new TextDecoder().decode(stderr), options.stderr);
} else {
await Deno.writeAll(Deno.stderr, stderr);
}
}

const status = await process.status();
assertEquals(status.code, options.exitCode ? options.exitCode : 0);
process.stderr.close();

process.close();
} catch (err) {
throw err;
} finally {
await Deno.remove(`${testdir}/scratch`, { recursive: true });
}
const status = await process.status();
assertEquals(status.code, options.exitCode ? options.exitCode : 0);

process.close();
} catch (err) {
throw err;
} finally {
await Deno.remove(workdir, { recursive: true });
}
},
});
}
}
1 change: 1 addition & 0 deletions wasi/testdata
Submodule testdata added at 419874
1 change: 0 additions & 1 deletion wasi/testdata/fixture/directory/file

This file was deleted.

1 change: 0 additions & 1 deletion wasi/testdata/fixture/directory/symlink_to_file

This file was deleted.

1 change: 0 additions & 1 deletion wasi/testdata/fixture/file

This file was deleted.

1 change: 0 additions & 1 deletion wasi/testdata/fixture/symlink_to_directory

This file was deleted.

1 change: 0 additions & 1 deletion wasi/testdata/fixture/symlink_to_file

This file was deleted.

9 changes: 0 additions & 9 deletions wasi/testdata/std_env_args.rs

This file was deleted.

6 changes: 0 additions & 6 deletions wasi/testdata/std_env_vars.rs

This file was deleted.

6 changes: 0 additions & 6 deletions wasi/testdata/std_fs_create_dir.rs

This file was deleted.

6 changes: 0 additions & 6 deletions wasi/testdata/std_fs_file_create.rs

This file was deleted.

23 changes: 0 additions & 23 deletions wasi/testdata/std_fs_file_metadata.rs

This file was deleted.

16 changes: 0 additions & 16 deletions wasi/testdata/std_fs_file_read.rs

This file was deleted.

33 changes: 0 additions & 33 deletions wasi/testdata/std_fs_file_seek.rs

This file was deleted.

17 changes: 0 additions & 17 deletions wasi/testdata/std_fs_file_set_len.rs

This file was deleted.

15 changes: 0 additions & 15 deletions wasi/testdata/std_fs_file_sync_all.rs

This file was deleted.

15 changes: 0 additions & 15 deletions wasi/testdata/std_fs_file_sync_data.rs

This file was deleted.

9 changes: 0 additions & 9 deletions wasi/testdata/std_fs_file_write.rs

This file was deleted.

Loading

0 comments on commit 6c4b9a5

Please sign in to comment.