From 6ddf73038fe6719f730344b5651d46ba6835ca75 Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Fri, 3 May 2019 10:34:09 -0400 Subject: [PATCH 1/9] test --- test.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.txt diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..e69de29 From 6f5633c80bdb9fcd6764ca79fdf387437b578368 Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Fri, 3 May 2019 10:35:35 -0400 Subject: [PATCH 2/9] Remove test --- test.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test.txt diff --git a/test.txt b/test.txt deleted file mode 100644 index e69de29..0000000 From c24070c2dd97b4ed59e98e8a1e3c76e10c4f1289 Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Sat, 18 May 2019 15:11:12 -0400 Subject: [PATCH 3/9] Added empty error.ts --- packages/ash/assembly/bin/error.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 packages/ash/assembly/bin/error.ts diff --git a/packages/ash/assembly/bin/error.ts b/packages/ash/assembly/bin/error.ts new file mode 100644 index 0000000..e69de29 From 0bb8d34c26553fcc1cca6af99a4b62d63ac7bf2b Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Sat, 18 May 2019 15:12:43 -0400 Subject: [PATCH 4/9] Added empty error tests --- packages/ash/assembly/__tests__/error.spec.ts | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 packages/ash/assembly/__tests__/error.spec.ts diff --git a/packages/ash/assembly/__tests__/error.spec.ts b/packages/ash/assembly/__tests__/error.spec.ts new file mode 100644 index 0000000..9527541 --- /dev/null +++ b/packages/ash/assembly/__tests__/error.spec.ts @@ -0,0 +1,48 @@ + +import { stdout, Hello, World, readString } from './fixtures'; +import { main as echo } from "../bin/echo"; + +describe("echo", (): void => { + + beforeEach((): void => { + stdout.reset(); + Console.stdout.erase(); + CommandLine.reset(); + CommandLine.push("echo"); + }) + + it("should print newline by default", (): void => { + CommandLine.push(Hello) + CommandLine.push(World) + echo(CommandLine.all()) + let str = Hello + " " + World + "\n"; + let stdoutStr = readString(stdout) + expect(Console.stdout.tell()).toBe(str.lengthUTF8 - 1, "No NUL character at the end of the string") + Console.stdout.reset(); + expect(readString(Console.stdout)).toBe(Hello + " " + World + "\n") + Console.stdout.reset(); + expect(readString(Console.stdout)).toBe(stdoutStr); + }); + + it("should print no newline with -n", () => { + CommandLine.push("-n") + CommandLine.push(Hello) + CommandLine.push(World) + echo(CommandLine.all()) + let str = Hello + " " + World; + expect(Console.stdout.tell()).toBe(str.lengthUTF8 - 1, "No NUL character at the end of the string") + Console.stdout.reset(); + expect(Console.stdout.readString().result).toBe(str) + Console.stdout.reset(); + expect(Console.stdout.readString().result).toBe(stdout.readString().result); + }); + + it("should print $PATH environment variable", () => { + CommandLine.push("$PATH"); + let path = "/usr/bin:/bin"; + Environ.add("$PATH", path); + echo(CommandLine.all()) + expect(readString(stdout)).toBe(path + "\n") + + }); +}) From 2f2c30c1d5b2802b0388b7dd4124721d0df28fad Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Sat, 18 May 2019 16:13:52 -0400 Subject: [PATCH 5/9] Working on error command --- packages/ash/assembly/__tests__/error.spec.ts | 45 +++++-------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/packages/ash/assembly/__tests__/error.spec.ts b/packages/ash/assembly/__tests__/error.spec.ts index 9527541..417feae 100644 --- a/packages/ash/assembly/__tests__/error.spec.ts +++ b/packages/ash/assembly/__tests__/error.spec.ts @@ -1,48 +1,25 @@ +import { stdout, readString } from './fixtures'; +import { main as error } from "../bin/error"; +import { main as cat } from "../bin/cat"; -import { stdout, Hello, World, readString } from './fixtures'; -import { main as echo } from "../bin/echo"; -describe("echo", (): void => { +describe("error", (): void => { beforeEach((): void => { stdout.reset(); Console.stdout.erase(); CommandLine.reset(); - CommandLine.push("echo"); + }) - it("should print newline by default", (): void => { - CommandLine.push(Hello) - CommandLine.push(World) - echo(CommandLine.all()) - let str = Hello + " " + World + "\n"; - let stdoutStr = readString(stdout) - expect(Console.stdout.tell()).toBe(str.lengthUTF8 - 1, "No NUL character at the end of the string") - Console.stdout.reset(); - expect(readString(Console.stdout)).toBe(Hello + " " + World + "\n") - Console.stdout.reset(); - expect(readString(Console.stdout)).toBe(stdoutStr); - }); + it("cat should cause an error if the file doesn't exist", (): void => { + CommandLine.push("test"); + cat(CommandLine.all()); - it("should print no newline with -n", () => { - CommandLine.push("-n") - CommandLine.push(Hello) - CommandLine.push(World) - echo(CommandLine.all()) - let str = Hello + " " + World; - expect(Console.stdout.tell()).toBe(str.lengthUTF8 - 1, "No NUL character at the end of the string") - Console.stdout.reset(); - expect(Console.stdout.readString().result).toBe(str) - Console.stdout.reset(); - expect(Console.stdout.readString().result).toBe(stdout.readString().result); - }); + let stdoutStr = readString(stdout) - it("should print $PATH environment variable", () => { - CommandLine.push("$PATH"); - let path = "/usr/bin:/bin"; - Environ.add("$PATH", path); - echo(CommandLine.all()) - expect(readString(stdout)).toBe(path + "\n") + expect(readString(Console.stdout)).toBe("The last command produced an error.") }); + }) From 54cc31cebf97a0be705d95ae598287a825673db8 Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Sat, 18 May 2019 17:34:05 -0400 Subject: [PATCH 6/9] Error tests --- packages/ash/assembly/__tests__/error.spec.ts | 21 ++++++++++++++++--- packages/ash/assembly/bin/cat.ts | 1 + packages/ash/assembly/bin/error.ts | 11 ++++++++++ .../assembly/wasa/mock/process.ts | 16 ++++++++++++++ types/wasa/index.d.ts | 1 + 5 files changed, 47 insertions(+), 3 deletions(-) diff --git a/packages/ash/assembly/__tests__/error.spec.ts b/packages/ash/assembly/__tests__/error.spec.ts index 417feae..bdb7ebe 100644 --- a/packages/ash/assembly/__tests__/error.spec.ts +++ b/packages/ash/assembly/__tests__/error.spec.ts @@ -1,6 +1,7 @@ -import { stdout, readString } from './fixtures'; +import { stdout, readString, stderr } from './fixtures'; import { main as error } from "../bin/error"; import { main as cat } from "../bin/cat"; +import { main as echo } from "../bin/echo"; describe("error", (): void => { @@ -16,9 +17,23 @@ describe("error", (): void => { CommandLine.push("test"); cat(CommandLine.all()); - let stdoutStr = readString(stdout) + let status = error(); - expect(readString(Console.stdout)).toBe("The last command produced an error.") + log(status); + + expect(status).toBeGreaterThan(1); + + + }); + + it("echo should not cause any error", (): void => { + CommandLine.push("test"); + echo(CommandLine.all()); + + let status = error(); + + log(status); + expect(status).toBe(1); }); diff --git a/packages/ash/assembly/bin/cat.ts b/packages/ash/assembly/bin/cat.ts index 9701571..0cdf006 100644 --- a/packages/ash/assembly/bin/cat.ts +++ b/packages/ash/assembly/bin/cat.ts @@ -6,6 +6,7 @@ export function main(args: string[]): void { let file = fs.openFile(args[i]); if (file.failed) { Console.error("cat: " + args[i] + ": No such file or directory"); + Process.error(44); continue; } Console.log(file.result.readString().result); diff --git a/packages/ash/assembly/bin/error.ts b/packages/ash/assembly/bin/error.ts index e69de29..026d882 100644 --- a/packages/ash/assembly/bin/error.ts +++ b/packages/ash/assembly/bin/error.ts @@ -0,0 +1,11 @@ +export function main(): i32 { + let code = Process.error_flag; + if (code != 1) { + + return 1; + } + else { + + return 0; + } +} diff --git a/packages/assemblyscript/assembly/wasa/mock/process.ts b/packages/assemblyscript/assembly/wasa/mock/process.ts index fc3382c..267f2fa 100644 --- a/packages/assemblyscript/assembly/wasa/mock/process.ts +++ b/packages/assemblyscript/assembly/wasa/mock/process.ts @@ -6,8 +6,12 @@ import { Wasi } from "../../wasi"; export class Process { static _singleton: Process; + // Error status flag + public static error_flag: Wasi.errno; + constructor(cwd: fd) { this._cwd = cwd; + Process.error_flag = Wasi.errno.SUCCESS; Process._singleton = this; } _cwd: fd; @@ -22,6 +26,18 @@ export class Process { abort(); } + /** + * Set Process error flag without aborting + * @param status exit code + */ + static error(status: Wasi.errno): void { + Process.error_flag = status; + } + + + + + static get cwd(): fd { return Process._singleton._cwd; } diff --git a/types/wasa/index.d.ts b/types/wasa/index.d.ts index a65d5e2..5fd696d 100644 --- a/types/wasa/index.d.ts +++ b/types/wasa/index.d.ts @@ -354,6 +354,7 @@ declare class DirectoryEntry { */ declare class Process { static exit(code: number): void; + static error(code: number): void; } From 282da9499d850c19906f1990596725c7f74f5419 Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Sat, 18 May 2019 17:43:48 -0400 Subject: [PATCH 7/9] Need to add program name to cmdline Still fail one test though. --- packages/ash/assembly/__tests__/error.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/ash/assembly/__tests__/error.spec.ts b/packages/ash/assembly/__tests__/error.spec.ts index bdb7ebe..629ebe9 100644 --- a/packages/ash/assembly/__tests__/error.spec.ts +++ b/packages/ash/assembly/__tests__/error.spec.ts @@ -14,6 +14,7 @@ describe("error", (): void => { }) it("cat should cause an error if the file doesn't exist", (): void => { + CommandLine.push("cat"); CommandLine.push("test"); cat(CommandLine.all()); @@ -27,6 +28,7 @@ describe("error", (): void => { }); it("echo should not cause any error", (): void => { + CommandLine.push("echo"); CommandLine.push("test"); echo(CommandLine.all()); From 325ad4cc9b65ec508d1371dcc9f28f597aeabc9b Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Sat, 18 May 2019 17:55:45 -0400 Subject: [PATCH 8/9] Working on error --- packages/ash/assembly/__tests__/error.spec.ts | 13 +++++++------ packages/ash/assembly/bin/cat.ts | 1 + packages/ash/assembly/bin/error.ts | 8 ++++---- .../assemblyscript/assembly/wasa/mock/process.ts | 10 ++++++---- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/ash/assembly/__tests__/error.spec.ts b/packages/ash/assembly/__tests__/error.spec.ts index bdb7ebe..8c2aafc 100644 --- a/packages/ash/assembly/__tests__/error.spec.ts +++ b/packages/ash/assembly/__tests__/error.spec.ts @@ -1,4 +1,4 @@ -import { stdout, readString, stderr } from './fixtures'; +import { stdout, Hello, World, readString, stderr } from './fixtures'; import { main as error } from "../bin/error"; import { main as cat } from "../bin/cat"; import { main as echo } from "../bin/echo"; @@ -14,26 +14,27 @@ describe("error", (): void => { }) it("cat should cause an error if the file doesn't exist", (): void => { - CommandLine.push("test"); + CommandLine.push("") cat(CommandLine.all()); let status = error(); log(status); - expect(status).toBeGreaterThan(1); + }); it("echo should not cause any error", (): void => { - CommandLine.push("test"); - echo(CommandLine.all()); + CommandLine.push(Hello) + CommandLine.push(World) + echo(CommandLine.all()) let status = error(); log(status); - expect(status).toBe(1); + }); diff --git a/packages/ash/assembly/bin/cat.ts b/packages/ash/assembly/bin/cat.ts index 0cdf006..e3dff3f 100644 --- a/packages/ash/assembly/bin/cat.ts +++ b/packages/ash/assembly/bin/cat.ts @@ -4,6 +4,7 @@ export function main(args: string[]): void { if (args.length > 1) { for (let i: i32 = 1; i < args.length; i++) { let file = fs.openFile(args[i]); + if (file.failed) { Console.error("cat: " + args[i] + ": No such file or directory"); Process.error(44); diff --git a/packages/ash/assembly/bin/error.ts b/packages/ash/assembly/bin/error.ts index 026d882..fbfc120 100644 --- a/packages/ash/assembly/bin/error.ts +++ b/packages/ash/assembly/bin/error.ts @@ -1,11 +1,11 @@ export function main(): i32 { let code = Process.error_flag; - if (code != 1) { - - return 1; + if (code != 0) { + + return code; } else { - + return 0; } } diff --git a/packages/assemblyscript/assembly/wasa/mock/process.ts b/packages/assemblyscript/assembly/wasa/mock/process.ts index 267f2fa..7697f08 100644 --- a/packages/assemblyscript/assembly/wasa/mock/process.ts +++ b/packages/assemblyscript/assembly/wasa/mock/process.ts @@ -7,14 +7,16 @@ export class Process { static _singleton: Process; // Error status flag - public static error_flag: Wasi.errno; + public static error_flag: i32; constructor(cwd: fd) { this._cwd = cwd; - Process.error_flag = Wasi.errno.SUCCESS; + Process.error_flag = 0; Process._singleton = this; + } _cwd: fd; + /** * Cleanly terminate the current process * @param status exit code @@ -30,11 +32,11 @@ export class Process { * Set Process error flag without aborting * @param status exit code */ - static error(status: Wasi.errno): void { + static error(status: i32): void { Process.error_flag = status; } - + From ad4be19a806db32e6876202bbdded7bce2b17fcb Mon Sep 17 00:00:00 2001 From: Sam Saltwick Date: Sat, 18 May 2019 18:09:50 -0400 Subject: [PATCH 9/9] Error working --- packages/ash/assembly/__tests__/error.spec.ts | 6 +++--- packages/ash/assembly/bin/error.ts | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/ash/assembly/__tests__/error.spec.ts b/packages/ash/assembly/__tests__/error.spec.ts index d8ce55d..e7fc38d 100644 --- a/packages/ash/assembly/__tests__/error.spec.ts +++ b/packages/ash/assembly/__tests__/error.spec.ts @@ -15,12 +15,12 @@ describe("error", (): void => { it("cat should cause an error if the file doesn't exist", (): void => { CommandLine.push("cat"); - CommandLine.push("test"); + CommandLine.push("thisshouldn'twork"); cat(CommandLine.all()); let status = error(); - log(status); + expect(status).toBe(1); @@ -34,7 +34,7 @@ describe("error", (): void => { let status = error(); - log(status); + expect(status).toBe(0); }); diff --git a/packages/ash/assembly/bin/error.ts b/packages/ash/assembly/bin/error.ts index fbfc120..da61157 100644 --- a/packages/ash/assembly/bin/error.ts +++ b/packages/ash/assembly/bin/error.ts @@ -1,8 +1,9 @@ + export function main(): i32 { let code = Process.error_flag; if (code != 0) { - - return code; + Process.error_flag = 0; + return 1; } else {