diff --git a/assembly/buffer/index.ts b/assembly/buffer/index.ts index 769dd8a..2d43385 100644 --- a/assembly/buffer/index.ts +++ b/assembly/buffer/index.ts @@ -23,6 +23,10 @@ export class Buffer extends Uint8Array { return result; } + public static isBuffer(value: T): bool { + return value instanceof Buffer; + } + readUInt8(offset: i32 = 0): u8 { if(offset >= this.dataLength) throw new RangeError(E_INDEXOUTOFRANGE); return load(this.dataStart + usize(offset)); @@ -39,7 +43,7 @@ export class Buffer extends Uint8Array { store(this.dataStart + offset, value); return offset + 1; } - + readInt8(offset: i32 = 0): i8 { if(offset >= this.dataLength) throw new RangeError(E_INDEXOUTOFRANGE); return load(this.dataStart + usize(offset)); diff --git a/assembly/node.d.ts b/assembly/node.d.ts index 895ea93..d6da2cb 100644 --- a/assembly/node.d.ts +++ b/assembly/node.d.ts @@ -3,6 +3,8 @@ declare class Buffer extends Uint8Array { static alloc(size: i32): Buffer; /** This method allocates a new Buffer of indicated size. This is unsafe because the data is not zeroed. */ static allocUnsafe(size: i32): Buffer; + /** This method asserts a value is a Buffer object via `value instanceof Buffer`. */ + static isBuffer(value: T): bool; /** Reads an unsigned integer at the designated offset. */ readUInt8(offset?: i32): u8; /** Writes an inputted u8 value to the buffer, at the desired offset. */ diff --git a/package-lock.json b/package-lock.json index 039989d..1d4efe9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,18 +5,18 @@ "requires": true, "dependencies": { "@as-pect/assembly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@as-pect/assembly/-/assembly-2.2.0.tgz", - "integrity": "sha512-Md50OTJRH6uTCqNJpcJu8/W9qNGZixzIHLktTeK5Ot5UEiWqd/JoQlTAM5V5+Bp1cI5fCqmUld6Dpq+ixDraPA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@as-pect/assembly/-/assembly-2.3.1.tgz", + "integrity": "sha512-KYBhyTEnaVcJjN/1EpzLhpbUHKT3pJjCPxm+Mdc7obnZ9EdVz6vN/lw+BQjeL4cUi1YLsnvgl8ftXcup5jVbQA==", "dev": true }, "@as-pect/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@as-pect/core/-/core-2.2.0.tgz", - "integrity": "sha512-a1I142/J1JOa4mLeRI0tKT9KrGlHgLNHn7ZkLlkp9v/n9pE4Zuh9rGYzGuUZg285ze+0yGQfYVmRqBLJkS+IlQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@as-pect/core/-/core-2.3.1.tgz", + "integrity": "sha512-iwd4MkGuO1wZqo9/sPlT567XYK0PkMLzBvwfkXOM2zq1wwuc5GZQrKoofgYorA40KI0edJW39djtOmPwIhx2vA==", "dev": true, "requires": { - "@as-pect/assembly": "^2.2.0", + "@as-pect/assembly": "^2.3.1", "chalk": "^2.4.2", "csv-stringify": "^5.3.0", "long": "^4.0.0" @@ -38,8 +38,8 @@ } }, "assemblyscript": { - "version": "github:assemblyscript/assemblyscript#7c775d1bccbe08fec5d820b9d53ae44ff6bd1e49", - "from": "github:assemblyscript/assemblyscript#7c775d1bccbe08fec5d820b9d53ae44ff6bd1e49", + "version": "github:assemblyscript/assemblyscript#4c938f7689c39e3a1ad813356781e2689fd4ec70", + "from": "github:assemblyscript/assemblyscript", "dev": true, "requires": { "@protobufjs/utf8": "^1.1.0", @@ -129,12 +129,6 @@ "lodash.get": "~4.4.2" } }, - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", diff --git a/package.json b/package.json index 831c9c0..ff4bc6b 100644 --- a/package.json +++ b/package.json @@ -12,9 +12,8 @@ "url": "https://github.com/AssemblyScript/node/issues" }, "devDependencies": { - "@as-pect/core": "^2.2.0", - "assemblyscript": "github:assemblyscript/assemblyscript#7c775d1bccbe08fec5d820b9d53ae44ff6bd1e49", - "diff": "^4.0.1", + "@as-pect/core": "^2.3.1", + "assemblyscript": "github:assemblyscript/assemblyscript", "glob": "^7.1.4", "wasi": "github:devsnek/node-wasi" }, diff --git a/tests/buffer.spec.ts b/tests/buffer.spec.ts index 9ba33fe..8645074 100644 --- a/tests/buffer.spec.ts +++ b/tests/buffer.spec.ts @@ -27,7 +27,7 @@ describe("buffer", () => { expect(Buffer.alloc(10)).toHaveLength(10); let buff = Buffer.alloc(100); for (let i = 0; i < buff.length; i++) expect(buff[i]).toBe(0); - expect(buff.buffer).not.toBeNull(); + expect(buff.buffer).not.toBeNull(); expect(buff.byteLength).toBe(100); // TODO: expectFn(() => { Buffer.alloc(-1); }).toThrow(); // TODO: expectFn(() => { Buffer.alloc(BLOCK_MAXSIZE + 1); }).toThrow(); @@ -37,12 +37,27 @@ describe("buffer", () => { expect(Buffer.allocUnsafe(10)).toBeTruthy(); expect(Buffer.allocUnsafe(10)).toHaveLength(10); let buff = Buffer.allocUnsafe(100); - expect(buff.buffer).not.toBeNull(); + expect(buff.buffer).not.toBeNull(); expect(buff.byteLength).toBe(100); // TODO: expectFn(() => { Buffer.allocUnsafe(-1); }).toThrow(); // TODO: expectFn(() => { Buffer.allocUnsafe(BLOCK_MAXSIZE + 1); }).toThrow(); }); + test("#isBuffer", () => { + let a = ""; + let b = new Uint8Array(0); + let c = 0; + let d = 1.1; + let e = new Buffer(0); + expect(Buffer.isBuffer(a)).toBeFalsy(); + expect(Buffer.isBuffer(b)).toBeFalsy(); + expect(Buffer.isBuffer(c)).toBeFalsy(); + expect(Buffer.isBuffer(d)).toBeFalsy(); + expect(Buffer.isBuffer(e)).toBeTruthy(); + // null checks are done by the compiler explicitly at runtime + expect(Buffer.isBuffer(null)).toBeFalsy(); + }); + test("#readUInt8", () => { let buff = new Buffer(10); buff[0] = -2; @@ -53,10 +68,10 @@ describe("buffer", () => { // Testing offset expect(buff.readUInt8(9)).toBe(47); // TODO: - // expectFn(() => { + // expectFn(() => { // let newBuff = new Buffer(1); // newBuff.readUInt8(5); - // }).toThrow(); + // }).toThrow(); }); test("#writeUInt8", () => { @@ -65,7 +80,7 @@ describe("buffer", () => { expect(buff.writeUInt8(252,4)).toBe(5); expect(buff[0]).toBe(4); expect(buff[4]).toBe(252); - }); + }); test("#writeInt8", () => { let buff = new Buffer(5); @@ -84,7 +99,7 @@ describe("buffer", () => { // Testing offset, and casting between u8 and i8. expect(buff.readInt8(9)).toBe(-1); // TODO: - // expectFn(() => { + // expectFn(() => { // let newBuff = new Buffer(1); // newBuff.readInt8(5); // }).toThrow(); diff --git a/tests/node.js b/tests/node.js index 5cb4a58..c652c1e 100644 --- a/tests/node.js +++ b/tests/node.js @@ -1,4 +1,4 @@ -const { TestContext, EmptyReporter } = require("@as-pect/core"); +const { TestContext, VerboseReporter } = require("@as-pect/core"); const { instantiateBuffer } = require("assemblyscript/lib/loader"); const glob = require("glob"); const { main } = require("assemblyscript/cli/asc"); @@ -7,7 +7,7 @@ const path = require("path"); const fs = require("fs"); const Wasi = require("wasi"); const wasi = new Wasi({}); -const diff = require("diff"); +let pass = true; const options = parse(process.argv.slice(2), { "help": { @@ -27,41 +27,7 @@ if (options.unknown.length > 1) { process.exit(1); } -class Reporter extends EmptyReporter { - onGroupFinish(group) { - if (group.name) { - if (group.pass) process.stdout.write("Group : " + group.name + " -> ✔ PASS"); - else process.stdout.write("Group : " + group.name + " -> ❌ FAIL"); - process.stdout.write("\n"); - } - } - - onTestFinish(group, test) { - if (test.pass) process.stdout.write("Test : " + group.name + " -> " + test.name + " ✔ PASS\n"); - else process.stdout.write("Test : " + group.name + " -> " + test.name + " ❌ FAIL\n"); - - if (!test.pass) { - process.stdout.write("Actual : " + test.actual.message + "\n"); - process.stdout.write("Expected : " + test.expected.message + "\n"); - } - - if (test.logs.length > 0) { - test.logs.forEach((e, i) => { - if (i > 0) process.stdout.write("\n"); - process.stdout.write("Log : " + e.value); - }); - process.stdout.write("\n"); - } - } - onFinish(context) { - const passed = context.testGroups.filter(e => !e.pass).length === 0; - if (passed) process.stdout.write("Suite : ✔ PASS"); - else process.stdout.write("Suite : ❌ FAIL"); - process.stdout.write("\n"); - } -} - -const reporter = new Reporter(); +const reporter = new VerboseReporter(); function relativeFromCwd(location) { return path.relative(process.cwd(), location); @@ -160,4 +126,8 @@ function runTest(file, type, binary, wat) { wasi.setMemory(wasm.memory); wasi.view = new DataView(wasm.memory.buffer); context.run(wasm); + + if (!context.pass) pass = false; } + +process.exit(pass ? 0 : 1);