Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions as-pect.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,13 @@ module.exports = {
/**
* A set of globs passed to the glob package that quality files to be added to each test.
*/
add: [],
add: ["packages/assemblyscript/assembly/__tests__/wasa.include.ts"],
/**
* All the compiler flags needed for this test suite. Make sure that a binary file is output.
*/
flags: {
"--validate": [],
"--debug": [],
"--measure": [],
/** This is required. Do not change this. */
"--binaryFile": ["output.wasm"]
},
Expand Down
26 changes: 2 additions & 24 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@
},
"homepage": "https://github.com/WebAssemblyOS/wasmos#readme",
"devDependencies": {
"@types/assembly": "file:./types",
"@types/fs-extra": "^5.0.5",
"@types/node": "^11.9.5",
"@types/webassembly-js-api": "0.0.2",
"@wasmos/utils": "file:./utils",
"as-pect": "github:jtenner/as-pect",
"browserfs": "git:github.com/jvilk/browserfs",
"dropbox": "~4.0.9",
Expand All @@ -48,9 +50,7 @@
"typescript": "^3.4.2",
"webpack": "^4.29.5",
"webpack-cli": "^3.2.3",
"webpack-dev-server": "^3.2.0",
"@wasmos/utils": "file:./utils",
"@types/assembly": "file:./types"
"webpack-dev-server": "^3.2.0"
},
"dependencies": {
"@types/filesystem": "0.0.28",
Expand Down
41 changes: 41 additions & 0 deletions packages/ash/assembly/__tests__/cat.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { main as cat } from "../bin/cat";

import { Console, fs, Process, CommandLine } from '../../../assemblyscript/assembly/wasa/mock';
import { FileDescriptor } from '../../../assemblyscript/assembly/wasa/mock/fs';
import { openStdout, Hello, World, testFile } from './mocks';




// var stdout: fd;

var stdout2: FileDescriptor;

describe("cat", (): void => {
beforeAll(
(): void => {
stdout2 = openStdout();
testFile().writeString(Hello + " " + World);
}
);

beforeEach((): void => {
Console.stdout.reset()
stdout2.reset()
Console.stdout.erase()
CommandLine.reset();
CommandLine.push("cat");
})

it("should print newline by default", (): void => {
CommandLine.push("/test")
cat(CommandLine.all())
let str = Hello + " " + World + "\n";
expect<u32>(Console.stdout.tell()).toBe(str.lengthUTF8, "Two extra characters for space and \\n")
Console.stdout.reset()
expect<string>(Console.stdout.readString()).toBe(Hello + " " + World + "\n")
Console.stdout.reset()
expect<string>(Console.stdout.readString()).toBe(stdout2.readString());
})

})
60 changes: 30 additions & 30 deletions packages/ash/assembly/__tests__/echo.spec.ts
Original file line number Diff line number Diff line change
@@ -1,55 +1,55 @@
import { Console, IO, fs, CommandLine } from "../../../assemblyscript/assembly/wasa/mock";
import { FileDescriptor, File } from "../../../assemblyscript/assembly/wasa/mock/fs";

import { main } from "../bin/echo";
import { Console, fs, Process, CommandLine } from '../../../assemblyscript/assembly/wasa/mock';
import { FileDescriptor } from '../../../assemblyscript/assembly/wasa/mock/fs';
import { openStdout, Hello, World } from './mocks';
import { main as echo } from "../bin/echo";

let Hello = "Hello";
let World = "World";
type fd = usize;

function openFile(path: string): FileDescriptor {
return fs.get(fs.openFile(path));
}

function openStdout(): FileDescriptor {
return openFile("/dev/fd/1");
}

var stdout: FileDescriptor;
var stdout2: FileDescriptor;
// let stdout = Console.stdout;


describe("echo", (): void => {
beforeAll(
(): void => {
stdout2 = openStdout();
}
);

beforeEach((): void => {
stdout = fs.get(Console.stdout)
stdout.reset()
stdout2 = openStdout();
stdout.file.erase();
CommandLine._args = new Array<string>();
Console.stdout.reset();
stdout2.reset();
Console.stdout.erase()
CommandLine.reset();
CommandLine.push("echo");

})

it("should print newline by default", (): void => {
CommandLine.push(Hello)
CommandLine.push(World)
main(CommandLine.all())
echo(CommandLine.all())
let str = Hello + " " + World + "\n";
expect<u32>(stdout.offset).toBe(str.lengthUTF8, "Two extra characters for space and \\n")
stdout.reset();
expect<string>(stdout.readString()).toBe(Hello + " " + World + "\n")
stdout.reset();
expect<string>(stdout.readString()).toBe(stdout2.readString());
let stdoutStr = stdout2.readString()
expect<u32>(Console.stdout.tell()).toBe(str.lengthUTF8, "Two extra characters for space and \\n")
Console.stdout.reset();
expect<string>(Console.stdout.readString()).toBe(Hello + " " + World + "\n")
Console.stdout.reset();
expect<string>(Console.stdout.readString()).toBe(stdoutStr);
})

it("should print no newline with -n", () => {
CommandLine.push("-n")
CommandLine.push(Hello)
CommandLine.push(World)
log(CommandLine.all())
main(CommandLine.all())
let offset = stdout.offset
echo(CommandLine.all())
let str = Hello + " " + World;
expect<u32>(offset).toBe(str.lengthUTF8, "One extra character for space")
stdout.reset()
expect<string>(stdout.readString()).toBe(Hello + " " + World)
expect<u32>(Console.stdout.tell()).toBe(str.lengthUTF8 + 1, "Two extra characters for space and \\n")
Console.stdout.reset();
expect<string>(Console.stdout.readString()).toBe(str)
Console.stdout.reset();
expect<string>(Console.stdout.readString()).toBe(stdout2.readString());
})
})
32 changes: 32 additions & 0 deletions packages/ash/assembly/__tests__/mocks.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { Console, fs, Process, CommandLine } from '../../../assemblyscript/assembly/wasa/mock';
import { FileDescriptor } from '../../../assemblyscript/assembly/wasa/mock/fs';

Console.stdin
Console.stdout
Console.stderr

export function openStdout(): FileDescriptor {
return open("/dev/fd/1");
}

export function open(path: string): FileDescriptor {
let FD = fs.openForRead(path)
if (FD.failed) {
abort();
}
return FD.result;
}

export function testFile(): FileDescriptor {
let fd = open("/test");
fd.writeString(Hello_World);
fd.reset();
return fd;
}


export const Hello = "Hello";
export const World = "World";
export const Hello_World = Hello + " " + World;

// export { _Console as Console, fs, Process, CommandLine, FileDescriptor }
6 changes: 3 additions & 3 deletions packages/ash/assembly/bin/cat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

export function main(args: string[]): void {
if (args.length > 1) {
for (let i: usize = 1; i < args.length; i++) {
let fd = fs.open(args[i]);
Console.log(fs.readString(fd))
for (let i: i32 = 1; i < args.length; i++) {
let fd: FileDescriptor = fs.openForRead(args[i]).result;
Console.log(fd.readString());
}
}
}
37 changes: 37 additions & 0 deletions packages/assemblyscript/assembly/__tests__/json.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { JSONDecoder } from "../../node_modules/assemblyscript-json/assembly/decoder";
import { JSONEncoder } from "../../node_modules/assemblyscript-json/assembly/encoder";

var encoder: JSONEncoder;
const jsonStr = '{"hello":"world"}';
beforeAll(
(): void => {
encoder = new JSONEncoder();
});


function roundripTest(jsonString: string, expectedString: string = ""): bool {
log("--------" + jsonString + (expectedString ? " " + expectedString : ""));
expectedString = expectedString || jsonString;
let buffer: Uint8Array = new Uint8Array(jsonString.lengthUTF8);
let utf8ptr = jsonString.toUTF8();
// TODO: std should expose memcpy?
for (let i = 0; i < buffer.length; i++) {
buffer[i] = load<u8>(utf8ptr + i);
}
let decoder: JSONDecoder<JSONEncoder> = new JSONDecoder(encoder);
decoder.deserialize(buffer);
let resultBuffer = encoder.serialize();
let resultString = String.fromUTF8(
resultBuffer.buffer.data,
resultBuffer.length
);
expect<string>(resultString).toStrictEqual(expectedString);
expect<String>(encoder.toString()).toStrictEqual(expectedString);
return true;
}

describe("Json", (): void => {
it("simple hello world", (): void => {
roundripTest(jsonStr, jsonStr);
});
});
21 changes: 21 additions & 0 deletions packages/assemblyscript/assembly/__tests__/wasa.include.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

// import { Console, fs, Process, CommandLine, fd } from '../wasa/mock/index';
import { Wasi } from "../wasi";
/** This file is included with tests so that the default globals are set up properly. */
//@ts-ignore
// @global
// const Console = _Console;
// Console.stdin
// Console.stdout
// Console.stderr

// let x: fd = 0;
// //@ts-ignore
// const Process = _Process;
//@ts-ignore
// fs.openDirectory("/", fs.openForRead("/.file"))
// CommandLine.reset()
// //@ts-ignore
// const fd = usize;
// //@ts-ignore
// const CommandLine = _CommandLine;
Loading