From 425a59e1e28ab9e8ab821a9946391127c6928b6d Mon Sep 17 00:00:00 2001 From: Joshua Tenner Date: Tue, 16 Jul 2019 16:51:33 -0400 Subject: [PATCH 1/6] [Tests] Add testing framework with @as-pect/core - Adds a custom bootstrapper - Adds example - Adds types file - Adds fs namespace - Adds buffer namespace - Adds env types --- __tests__/buffer.spec.ts | 20 ++++ __tests__/env.d.ts | 6 ++ __tests__/tsconfig.json | 6 ++ assembly/buffer/index.ts | 6 +- assembly/fs/index.ts | 14 ++- assembly/index.ts | 4 +- assembly/node.d.ts | 3 + assembly/tsconfig.json | 2 +- package-lock.json | 213 +++++++++++++++++++++++++++++++++++++++ package.json | 11 +- tests/index.js | 0 tests/node.js | 148 +++++++++++++++++++++++++++ 12 files changed, 427 insertions(+), 6 deletions(-) create mode 100644 __tests__/buffer.spec.ts create mode 100644 __tests__/env.d.ts create mode 100644 __tests__/tsconfig.json create mode 100644 assembly/node.d.ts create mode 100644 package-lock.json delete mode 100644 tests/index.js create mode 100644 tests/node.js diff --git a/__tests__/buffer.spec.ts b/__tests__/buffer.spec.ts new file mode 100644 index 0000000..b238b75 --- /dev/null +++ b/__tests__/buffer.spec.ts @@ -0,0 +1,20 @@ +import { Buffer } from "../assembly/buffer"; + +/** + * This is the buffer test suite. For each prototype function, put a single test + * function call here. + * + * @example + * describe("buffer", () => { + * test("#alloc", () => { + * // put any expectations related to #alloc here + * }); + * }); + */ + +describe("buffer", () => { + test("#constructor", () => { + expect(new Buffer(0)).toBeTruthy(); + expect(new Buffer(10)).toHaveLength(10); + }); +}); diff --git a/__tests__/env.d.ts b/__tests__/env.d.ts new file mode 100644 index 0000000..b2fabad --- /dev/null +++ b/__tests__/env.d.ts @@ -0,0 +1,6 @@ +/** + * This file is for typescript editors like vscode. Do not delete this. + */ +/// +/// +/// diff --git a/__tests__/tsconfig.json b/__tests__/tsconfig.json new file mode 100644 index 0000000..c614e5c --- /dev/null +++ b/__tests__/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../node_modules/assemblyscript/std/assembly.json", + "include": [ + "./**/*.ts" + ] +} \ No newline at end of file diff --git a/assembly/buffer/index.ts b/assembly/buffer/index.ts index 70b786d..98c0f4e 100644 --- a/assembly/buffer/index.ts +++ b/assembly/buffer/index.ts @@ -1 +1,5 @@ -// TODO +export class Buffer extends Uint8Array { + constructor(size: i32) { + super(size); + } +} diff --git a/assembly/fs/index.ts b/assembly/fs/index.ts index 70b786d..a5cd0fb 100644 --- a/assembly/fs/index.ts +++ b/assembly/fs/index.ts @@ -1 +1,13 @@ -// TODO +import { Buffer } from "../buffer"; + +/** + * TODO: Look at https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_fs_readfilesync_path_options + * + * Path can be ` | | | `. + * + * This will require a `` parameter to handle all these cases. In this particular case, I think + * it's okay to default to only ``. + */ +export function readFileSync(): Buffer { + return new Buffer(0); +} diff --git a/assembly/index.ts b/assembly/index.ts index 887e896..51859e9 100644 --- a/assembly/index.ts +++ b/assembly/index.ts @@ -1 +1,3 @@ -// TODO: Set up globals, like Buffer +/// + +export { Buffer } from "./buffer"; diff --git a/assembly/node.d.ts b/assembly/node.d.ts new file mode 100644 index 0000000..e18c3e1 --- /dev/null +++ b/assembly/node.d.ts @@ -0,0 +1,3 @@ +declare class Buffer extends Uint8Array { + +} diff --git a/assembly/tsconfig.json b/assembly/tsconfig.json index 64c6f4d..c614e5c 100644 --- a/assembly/tsconfig.json +++ b/assembly/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../next/std/assembly.json", + "extends": "../node_modules/assemblyscript/std/assembly.json", "include": [ "./**/*.ts" ] diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9024d0c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,213 @@ +{ + "name": "@assemblyscript/node", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@as-pect/assembly": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@as-pect/assembly/-/assembly-2.1.5.tgz", + "integrity": "sha512-kAS6aRmQCiFNcq1nP34cSy3+zrqLkZdK/V5Q/u1zyH1+vXR4QYI3GfWT5+R6OrGiAp+lUDDlZFA35j4Ul9ayHQ==" + }, + "@as-pect/core": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@as-pect/core/-/core-2.1.5.tgz", + "integrity": "sha512-5vLlB4xnFjzCH9by08yQwQ0OG1ZoWeksp1qBgc1oanmhJjRCaJ8lOr1xk2maWlyj3Go2JAWs9fZS9wEqMr+CZQ==", + "requires": { + "@as-pect/assembly": "^2.1.5", + "csv-stringify": "^5.3.0", + "long": "^4.0.0" + } + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", + "dev": true + }, + "assemblyscript": { + "version": "github:AssemblyScript/assemblyscript#678593d7bd8ee9573eadbd43e3635e0bc0b8e15e", + "from": "github:AssemblyScript/assemblyscript", + "dev": true, + "requires": { + "@protobufjs/utf8": "^1.1.0", + "binaryen": "84.0.0-nightly.20190522", + "glob": "^7.1.4", + "long": "^4.0.0", + "opencollective-postinstall": "^2.0.0", + "source-map-support": "^0.5.12" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "binaryen": { + "version": "84.0.0-nightly.20190522", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-84.0.0-nightly.20190522.tgz", + "integrity": "sha512-bxSPi3MOkFmK5W6VIlqxnOc1nYzpUCzT/tHz3C7sgbz7jTR2lOBlZnKStTJlBt018xeZK9/JpK/jXdduH7eQFg==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "csv-stringify": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.0.tgz", + "integrity": "sha512-VMYPbE8zWz475smwqb9VbX9cj0y4J0PBl59UdcqzLkzXHZZ8dh4Rmbb0ZywsWEtUml4A96Hn7Q5MW9ppVghYzg==", + "optional": true, + "requires": { + "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 + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "optional": true + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "wasi": { + "version": "github:devsnek/node-wasi#12a0985a46589587facd8d8e161911650ef15f3b", + "from": "github:devsnek/node-wasi", + "dev": true, + "requires": { + "bindings": "^1.5.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/package.json b/package.json index 454ee8d..919cc9c 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "description": "Implementations of the node.js APIs for use with AssemblyScript.", "version": "0.1.0", "license": "Apache-2.0", + "types": "assembly/node.d.ts", "repository": { "type": "git", "url": "https://github.com/AssemblyScript/node.git" @@ -11,9 +12,15 @@ "url": "https://github.com/AssemblyScript/node/issues" }, "devDependencies": { - "assemblyscript": "github:AssemblyScript/assemblyscript" + "assemblyscript": "github:AssemblyScript/assemblyscript", + "diff": "^4.0.1", + "glob": "^7.1.4", + "wasi": "github:devsnek/node-wasi" }, "scripts": { - "test": "node tests" + "test": "node tests/node" + }, + "dependencies": { + "@as-pect/core": "^2.1.5" } } diff --git a/tests/index.js b/tests/index.js deleted file mode 100644 index e69de29..0000000 diff --git a/tests/node.js b/tests/node.js new file mode 100644 index 0000000..0be4941 --- /dev/null +++ b/tests/node.js @@ -0,0 +1,148 @@ +const { TestContext, EmptyReporter } = require("@as-pect/core"); +const { instantiateBuffer } = require("assemblyscript/lib/loader"); +const glob = require("glob"); +const { main } = require("assemblyscript/cli/asc"); +const { parse } = require("assemblyscript/cli/util/options"); +const path = require("path"); +const fs = require("fs"); +const Wasi = require("wasi"); +const wasi = new Wasi({}); +const diff = require("diff"); + +const options = parse(process.argv.slice(2), { + "help": { + "description": "Prints this message and exits.", + "type": "b", + "alias": "h" + }, + "updateFixtures": { + "description": "Update the test fixtures.", + "type": "b", + "alias": "u" + }, +}); + +if (options.unknown.length > 1) { + console.error("Unknown options arguments: " + options.unknown.join(" ")); + 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"); + else process.stdout.write("Test : " + group.name + " -> " + test.name + " ❌ FAIL"); + process.stdout.write("\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() { + process.stdout.write("\n"); + } +} + +const reporter = new Reporter(); + +function relativeFromCwd(location) { + return path.relative(process.cwd(), location); +} + +const ascOptions = [ + relativeFromCwd(require.resolve("@as-pect/assembly/assembly/index.ts")), + "--use", "ASC_RTRACE=1", + "--explicitStart", + "--validate", + "--debug", + "--measure", + "--lib", "assembly", +]; + +const files = glob.sync("__tests__/**/*.spec.ts") + .map(relativeFromCwd); + +const untouchedBinaryMap = new Map(); +const optimizedBinaryMap = new Map(); + +const untouchedWatMap = new Map(); +const optimizedWatMap = new Map(); + +const untouchedAscOptions = { + writeFile(name, contents) { + const ext = path.extname(name); + if (ext === ".wasm") untouchedBinaryMap.set(name, contents); + if (ext === ".wat") untouchedWatMap.set(name, contents); + } +}; + +const optimizedAscOptions = { + writeFile(name, contents) { + const ext = path.extname(name); + if (ext === ".wasm") optimizedBinaryMap.set(name, contents); + if (ext === ".wat") optimizedWatMap.set(name, contents); + } +}; + +const errors = []; + +for (const file of files) { + const ext = path.extname(file); + const wasmFileName = path.join(path.dirname(file), path.basename(file, ext)) + ".wasm"; + const watFileName = path.join(path.dirname(file), path.basename(file, ext)) + ".wat"; + const cliOptions = ascOptions.concat([file, "--binaryFile", wasmFileName, "--textFile", watFileName]); + + process.stdout.write("Test File : " + file + " (untouched)\n"); + main(cliOptions, untouchedAscOptions, (err) => { + if (err) { + console.error(err); + errors.push(err); + } else { + const binary = untouchedBinaryMap.get(wasmFileName); + const wat = untouchedWatMap.get(watFileName); + runTest(file, "untouched", binary, wat); + } + }); + + process.stdout.write("\n"); + process.stdout.write("Test File : " + file + " (optimized)\n"); + main(cliOptions.concat(["-O3"]), optimizedAscOptions, (err) => { + if (err) { + console.error(err); + errors.push(err); + } else { + const binary = optimizedBinaryMap.get(wasmFileName); + const wat = optimizedWatMap.get(watFileName); + runTest(file, "optimized", binary, wat); + } + }); + + process.stdout.write("\n"); +} + +function runTest(file, type, binary, wat) { + const context = new TestContext({ + fileName: file, + reporter, + stderr: process.stderr, + stdout: process.stdout, + }); + const imports = context.createImports({ + wasi_unstable: wasi.exports, + }); + const wasm = instantiateBuffer(binary, imports); + wasi.setMemory(wasm.memory); + wasi.view = new DataView(wasm.memory.buffer); + context.run(wasm); +} From fa0d45ce8ff5b17276e9cbd70d1d3b8d5396beaa Mon Sep 17 00:00:00 2001 From: Joshua Tenner Date: Wed, 17 Jul 2019 11:24:09 -0400 Subject: [PATCH 2/6] [FIx] Update Versions, remove buffer import, move test files --- package-lock.json | 90 ++++++++++++++++++++++++----- package.json | 7 +-- {__tests__ => tests}/buffer.spec.ts | 5 +- {__tests__ => tests}/env.d.ts | 0 tests/node.js | 2 +- {__tests__ => tests}/tsconfig.json | 0 6 files changed, 83 insertions(+), 21 deletions(-) rename {__tests__ => tests}/buffer.spec.ts (74%) rename {__tests__ => tests}/env.d.ts (100%) rename {__tests__ => tests}/tsconfig.json (100%) diff --git a/package-lock.json b/package-lock.json index 9024d0c..039989d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,16 +5,19 @@ "requires": true, "dependencies": { "@as-pect/assembly": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@as-pect/assembly/-/assembly-2.1.5.tgz", - "integrity": "sha512-kAS6aRmQCiFNcq1nP34cSy3+zrqLkZdK/V5Q/u1zyH1+vXR4QYI3GfWT5+R6OrGiAp+lUDDlZFA35j4Ul9ayHQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@as-pect/assembly/-/assembly-2.2.0.tgz", + "integrity": "sha512-Md50OTJRH6uTCqNJpcJu8/W9qNGZixzIHLktTeK5Ot5UEiWqd/JoQlTAM5V5+Bp1cI5fCqmUld6Dpq+ixDraPA==", + "dev": true }, "@as-pect/core": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@as-pect/core/-/core-2.1.5.tgz", - "integrity": "sha512-5vLlB4xnFjzCH9by08yQwQ0OG1ZoWeksp1qBgc1oanmhJjRCaJ8lOr1xk2maWlyj3Go2JAWs9fZS9wEqMr+CZQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@as-pect/core/-/core-2.2.0.tgz", + "integrity": "sha512-a1I142/J1JOa4mLeRI0tKT9KrGlHgLNHn7ZkLlkp9v/n9pE4Zuh9rGYzGuUZg285ze+0yGQfYVmRqBLJkS+IlQ==", + "dev": true, "requires": { - "@as-pect/assembly": "^2.1.5", + "@as-pect/assembly": "^2.2.0", + "chalk": "^2.4.2", "csv-stringify": "^5.3.0", "long": "^4.0.0" } @@ -25,13 +28,22 @@ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=", "dev": true }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, "assemblyscript": { - "version": "github:AssemblyScript/assemblyscript#678593d7bd8ee9573eadbd43e3635e0bc0b8e15e", - "from": "github:AssemblyScript/assemblyscript", + "version": "github:assemblyscript/assemblyscript#7c775d1bccbe08fec5d820b9d53ae44ff6bd1e49", + "from": "github:assemblyscript/assemblyscript#7c775d1bccbe08fec5d820b9d53ae44ff6bd1e49", "dev": true, "requires": { "@protobufjs/utf8": "^1.1.0", - "binaryen": "84.0.0-nightly.20190522", + "binaryen": "87.0.0-nightly.20190716", "glob": "^7.1.4", "long": "^4.0.0", "opencollective-postinstall": "^2.0.0", @@ -45,9 +57,9 @@ "dev": true }, "binaryen": { - "version": "84.0.0-nightly.20190522", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-84.0.0-nightly.20190522.tgz", - "integrity": "sha512-bxSPi3MOkFmK5W6VIlqxnOc1nYzpUCzT/tHz3C7sgbz7jTR2lOBlZnKStTJlBt018xeZK9/JpK/jXdduH7eQFg==", + "version": "87.0.0-nightly.20190716", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-87.0.0-nightly.20190716.tgz", + "integrity": "sha512-qRGfV8cLV4HVVo1oUCtTaDmOhbwctaW7vyW0G6HKftywWOJI9t9IsCrUEFKya50RqyEnanuS2w3nfOg4bxTGqg==", "dev": true }, "bindings": { @@ -75,6 +87,32 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -85,6 +123,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.0.tgz", "integrity": "sha512-VMYPbE8zWz475smwqb9VbX9cj0y4J0PBl59UdcqzLkzXHZZ8dh4Rmbb0ZywsWEtUml4A96Hn7Q5MW9ppVghYzg==", + "dev": true, "optional": true, "requires": { "lodash.get": "~4.4.2" @@ -96,6 +135,12 @@ "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", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -122,6 +167,12 @@ "path-is-absolute": "^1.0.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -142,12 +193,14 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true, "optional": true }, "long": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true }, "minimatch": { "version": "3.0.4", @@ -195,6 +248,15 @@ "source-map": "^0.6.0" } }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "wasi": { "version": "github:devsnek/node-wasi#12a0985a46589587facd8d8e161911650ef15f3b", "from": "github:devsnek/node-wasi", diff --git a/package.json b/package.json index 919cc9c..5a8f3c8 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "url": "https://github.com/AssemblyScript/node/issues" }, "devDependencies": { - "assemblyscript": "github:AssemblyScript/assemblyscript", + "@as-pect/core": "^2.2.0", + "assemblyscript": "github:assemblyscript/assemblyscript#7c775d1bccbe08fec5d820b9d53ae44ff6bd1e49", "diff": "^4.0.1", "glob": "^7.1.4", "wasi": "github:devsnek/node-wasi" @@ -20,7 +21,5 @@ "scripts": { "test": "node tests/node" }, - "dependencies": { - "@as-pect/core": "^2.1.5" - } + "dependencies": {} } diff --git a/__tests__/buffer.spec.ts b/tests/buffer.spec.ts similarity index 74% rename from __tests__/buffer.spec.ts rename to tests/buffer.spec.ts index b238b75..1c7b4e4 100644 --- a/__tests__/buffer.spec.ts +++ b/tests/buffer.spec.ts @@ -1,5 +1,3 @@ -import { Buffer } from "../assembly/buffer"; - /** * This is the buffer test suite. For each prototype function, put a single test * function call here. @@ -16,5 +14,8 @@ describe("buffer", () => { test("#constructor", () => { expect(new Buffer(0)).toBeTruthy(); expect(new Buffer(10)).toHaveLength(10); + let myBuffer = new Buffer(10); + expect(myBuffer.buffer).toBeTruthy(); + expect(myBuffer.buffer).toHaveLength(10); }); }); diff --git a/__tests__/env.d.ts b/tests/env.d.ts similarity index 100% rename from __tests__/env.d.ts rename to tests/env.d.ts diff --git a/tests/node.js b/tests/node.js index 0be4941..35cf77c 100644 --- a/tests/node.js +++ b/tests/node.js @@ -70,7 +70,7 @@ const ascOptions = [ "--lib", "assembly", ]; -const files = glob.sync("__tests__/**/*.spec.ts") +const files = glob.sync("tests/**/*.spec.ts") .map(relativeFromCwd); const untouchedBinaryMap = new Map(); diff --git a/__tests__/tsconfig.json b/tests/tsconfig.json similarity index 100% rename from __tests__/tsconfig.json rename to tests/tsconfig.json From 179ed63bea1925fdb5a5e1cf18fd416f2c36afc2 Mon Sep 17 00:00:00 2001 From: Joshua Tenner Date: Wed, 17 Jul 2019 11:45:20 -0400 Subject: [PATCH 3/6] [Cleanup] Remove reference --- assembly/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/assembly/index.ts b/assembly/index.ts index 51859e9..780f216 100644 --- a/assembly/index.ts +++ b/assembly/index.ts @@ -1,3 +1 @@ -/// - export { Buffer } from "./buffer"; From f4946ac948bcd9e96b2476d891ea60c5353ba4a9 Mon Sep 17 00:00:00 2001 From: Joshua Tenner Date: Wed, 17 Jul 2019 11:48:26 -0400 Subject: [PATCH 4/6] [Tests] Add travis --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..68e5391 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "10" + - "11" + - "12" From 0905d5760df0d67767cb93e4f9438bc4dd418d0d Mon Sep 17 00:00:00 2001 From: Joshua Tenner Date: Wed, 17 Jul 2019 11:56:53 -0400 Subject: [PATCH 5/6] [Tests] Set travis to run on lts and stable --- .travis.yml | 18 ++++++++++++++---- README.md | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 68e5391..fcd9602 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,15 @@ language: node_js -node_js: - - "10" - - "11" - - "12" +notifications: + email: false +before_install: npm config set progress=false && npm i -g npm@latest --no-audit +install: npm ci --no-audit +jobs: + include: + - node_js: lts/* + script: + - npm test + env: Runs the tests on node.js LTS. + - node_js: node + script: + - npm test + env: Runs the tests on node.js Stable. diff --git a/README.md b/README.md index ee47391..d839292 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ ![AS](https://avatars1.githubusercontent.com/u/28916798?s=48) node ====================== -Implementations of the node.js APIs for use with AssemblyScript. +Implementations of the node.js APIs using wasi for use with AssemblyScript. From fe46e1305a15ae6ae1bceb0fa72fd5a382fd92b4 Mon Sep 17 00:00:00 2001 From: RedDwarfian Date: Sat, 20 Jul 2019 18:20:44 -0400 Subject: [PATCH 6/6] [Cleanup] readInt8's offset defaults to 0 --- assembly/buffer/index.ts | 4 ++-- assembly/node.d.ts | 2 +- tests/buffer.spec.ts | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/assembly/buffer/index.ts b/assembly/buffer/index.ts index fc56a71..b42edf7 100644 --- a/assembly/buffer/index.ts +++ b/assembly/buffer/index.ts @@ -23,8 +23,8 @@ export class Buffer extends Uint8Array { return result; } - readInt8(offset: i32) : i8 { - if(u32(offset) >= this.dataLength) throw new RangeError(E_INDEXOUTOFRANGE); + 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 99157fb..52f1eba 100644 --- a/assembly/node.d.ts +++ b/assembly/node.d.ts @@ -4,5 +4,5 @@ declare class Buffer extends Uint8Array { /** This method allocates a new Buffer of indicated size. This is unsafe because the data is not zeroed. */ static allocUnsafe(size: i32): Buffer; /** Reads a signed integer at the designated offset. */ - readInt8(offset: i32): i8; + readInt8(offset?: i32): i8; } diff --git a/tests/buffer.spec.ts b/tests/buffer.spec.ts index fc05d5a..d202073 100644 --- a/tests/buffer.spec.ts +++ b/tests/buffer.spec.ts @@ -48,6 +48,7 @@ describe("buffer", () => { buff[0] = 5; buff[9] = 255; expect(buff.readInt8(0)).toBe(5); + expect(buff.readInt8()).toBe(5); // Testing offset, and casting between u8 and i8. expect(buff.readInt8(9)).toBe(-1); // TODO: