From 399ae2359658d110c9e1aecda4fac7a0c4b27b54 Mon Sep 17 00:00:00 2001 From: Willem Wyndham Date: Fri, 24 Jul 2020 13:56:31 -0400 Subject: [PATCH] Add more tests for asconfig --- tests/asconfig/.gitignore | 1 + tests/asconfig/complicated/assembly/index.ts | 8 ++-- .../node-resolution/asconfig.json | 3 ++ .../node-resolution/assembly/index.ts | 1 + .../node_modules/entry-points/asconfig.json | 3 ++ .../entry-points/assembly/globals.ts | 3 ++ .../entry-points/assembly/index.ts | 2 + .../entry-points/node-resolution/package.json | 6 +++ tests/asconfig/entry-points/package.json | 4 +- tests/asconfig/extends/asconfig.json | 4 +- tests/asconfig/extends/expected.json | 8 ++++ tests/asconfig/extends/extends.json | 4 +- tests/asconfig/extends/package.json | 2 +- tests/asconfig/index.js | 44 +++++++++++++++++++ tests/asconfig/package.json | 5 ++- tests/asconfig/target/asconfig.json | 12 +++-- tests/asconfig/target/assembly/index.ts | 6 +-- tests/asconfig/target/expected.json | 6 +++ tests/asconfig/target/package.json | 2 +- 19 files changed, 106 insertions(+), 18 deletions(-) create mode 100644 tests/asconfig/.gitignore create mode 100644 tests/asconfig/entry-points/node-resolution/asconfig.json create mode 100644 tests/asconfig/entry-points/node-resolution/assembly/index.ts create mode 100644 tests/asconfig/entry-points/node-resolution/node_modules/entry-points/asconfig.json create mode 100644 tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/globals.ts create mode 100644 tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/index.ts create mode 100644 tests/asconfig/entry-points/node-resolution/package.json create mode 100644 tests/asconfig/extends/expected.json create mode 100644 tests/asconfig/target/expected.json diff --git a/tests/asconfig/.gitignore b/tests/asconfig/.gitignore new file mode 100644 index 0000000000..89d6c1c6b1 --- /dev/null +++ b/tests/asconfig/.gitignore @@ -0,0 +1 @@ +!entry-points/**/*/node_modules/ \ No newline at end of file diff --git a/tests/asconfig/complicated/assembly/index.ts b/tests/asconfig/complicated/assembly/index.ts index ae67e9d6f5..ccc7edfb32 100644 --- a/tests/asconfig/complicated/assembly/index.ts +++ b/tests/asconfig/complicated/assembly/index.ts @@ -1,6 +1,6 @@ -assert(ASC_OPTIMIZE_LEVEL == 3); -assert(ASC_SHRINK_LEVEL == 1); -assert(ASC_FEATURE_SIMD); +assert(ASC_OPTIMIZE_LEVEL == 3, "expected optimize level == 3"); +assert(ASC_SHRINK_LEVEL == 1, "expected shrink level == 1"); +assert(ASC_FEATURE_SIMD, "expected SIMD enabled"); let size = memory.size(); trace("size", 1, size); -assert(size == 30); +assert(size == 30, "expected 30 got " + size.toString()); diff --git a/tests/asconfig/entry-points/node-resolution/asconfig.json b/tests/asconfig/entry-points/node-resolution/asconfig.json new file mode 100644 index 0000000000..93c3e4424d --- /dev/null +++ b/tests/asconfig/entry-points/node-resolution/asconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "entry-points/asconfig.json" +} diff --git a/tests/asconfig/entry-points/node-resolution/assembly/index.ts b/tests/asconfig/entry-points/node-resolution/assembly/index.ts new file mode 100644 index 0000000000..48b64eeb05 --- /dev/null +++ b/tests/asconfig/entry-points/node-resolution/assembly/index.ts @@ -0,0 +1 @@ +assert(answerToLife == 42); diff --git a/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/asconfig.json b/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/asconfig.json new file mode 100644 index 0000000000..f83851ac73 --- /dev/null +++ b/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/asconfig.json @@ -0,0 +1,3 @@ +{ + "entries": ["assembly/globals.ts"] +} diff --git a/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/globals.ts b/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/globals.ts new file mode 100644 index 0000000000..ef2ca6b2f9 --- /dev/null +++ b/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/globals.ts @@ -0,0 +1,3 @@ +// @ts-ignore: decorator +@global const answerToLife = 42; +assert(answerToLife); diff --git a/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/index.ts b/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/index.ts new file mode 100644 index 0000000000..8d57706af7 --- /dev/null +++ b/tests/asconfig/entry-points/node-resolution/node_modules/entry-points/assembly/index.ts @@ -0,0 +1,2 @@ + +assert(answerToLife == 42); diff --git a/tests/asconfig/entry-points/node-resolution/package.json b/tests/asconfig/entry-points/node-resolution/package.json new file mode 100644 index 0000000000..7603e9ad4d --- /dev/null +++ b/tests/asconfig/entry-points/node-resolution/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "scripts": { + "test": "node ../../index.js" + } +} diff --git a/tests/asconfig/entry-points/package.json b/tests/asconfig/entry-points/package.json index e835996ed6..e92aaac524 100644 --- a/tests/asconfig/entry-points/package.json +++ b/tests/asconfig/entry-points/package.json @@ -1,6 +1,8 @@ { "private": true, "scripts": { - "test": "node ../index.js && cd nested && npm run test" + "test": "node ../index.js && npm run test:nested && npm run test:node", + "test:nested": "cd nested && npm run test", + "test:node": "cd node-resolution && npm run test" } } diff --git a/tests/asconfig/extends/asconfig.json b/tests/asconfig/extends/asconfig.json index d052236111..e9ef74654a 100644 --- a/tests/asconfig/extends/asconfig.json +++ b/tests/asconfig/extends/asconfig.json @@ -5,7 +5,9 @@ } }, "options": { - "enable": ["simd"] + "enable": ["simd"], + "runtime": "half", + "noEmit": false }, "extends": "./extends.json" } diff --git a/tests/asconfig/extends/expected.json b/tests/asconfig/extends/expected.json new file mode 100644 index 0000000000..b5498f8b40 --- /dev/null +++ b/tests/asconfig/extends/expected.json @@ -0,0 +1,8 @@ +{ + "options": { + "runtime": "half", + "noEmit": false, + "noAssert": true, + "enable": ["simd"] + } +} \ No newline at end of file diff --git a/tests/asconfig/extends/extends.json b/tests/asconfig/extends/extends.json index 44d1411849..21e9a62fa3 100644 --- a/tests/asconfig/extends/extends.json +++ b/tests/asconfig/extends/extends.json @@ -6,6 +6,8 @@ } }, "options": { - "disable": ["simd"] + "disable": ["simd"], + "noEmit": true, + "noAssert": true } } diff --git a/tests/asconfig/extends/package.json b/tests/asconfig/extends/package.json index f98424bae9..fdbb9ed043 100644 --- a/tests/asconfig/extends/package.json +++ b/tests/asconfig/extends/package.json @@ -1,6 +1,6 @@ { "private": true, "scripts": { - "test": "node ../index.js" + "test": "node ../index.js --showConfig && node ../index.js" } } diff --git a/tests/asconfig/index.js b/tests/asconfig/index.js index 55ee7a6d87..6b491ec5ee 100644 --- a/tests/asconfig/index.js +++ b/tests/asconfig/index.js @@ -1,7 +1,11 @@ const asc = require("../../cli/asc"); const loader = require("../../lib/loader"); const args = process.argv.slice(2); +const path = require('path'); +const fs = require("fs"); +/** @type {string} */ +let stderr; /** @type {Uint8Array} */ let binary; asc.main(["assembly/index.ts", "--outFile", "output.wasm", "--explicitStart", ...args], { @@ -11,13 +15,52 @@ asc.main(["assembly/index.ts", "--outFile", "output.wasm", "--explicitStart", .. } else if (name !== "output.wasm.map") { throw Error("Unexpected output file: " + name); } + }, + stderr: { + write(s) { + stderr = s; + } } + }, (err) => { if (err) { console.error(err); + console.error(stderr); process.exit(1); } + const jsonPath = path.join(process.cwd(), "expected.json"); + if (fs.existsSync(jsonPath) && stderr) { + const actualRes = JSON.parse(stderr); + const actual = actualRes.options; + const expected = require(jsonPath).options; + let errored = false; + for (let name of Object.getOwnPropertyNames(expected)) { + if (actual[name] !== expected[name]) { + // If object check just first level + if (typeof actual[name] === 'object' && typeof expected[name] === 'object') { + let error = false; + for (let field of Object.getOwnPropertyNames(actual[name])) { + if (actual[name][field] !== expected[name][field]) { + error = true; + break; + } + } + if (!error) { + continue; + } + } + console.error(name + ": " + actual[name] + " expected " + expected[name]); + errored = true; + } + } + if (errored) { + process.exit(1); + } + process.exit(0); + } + + if (!binary) { console.error("No binary was generated for the asconfig test in " + process.cwd()); process.exit(1); @@ -29,6 +72,7 @@ asc.main(["assembly/index.ts", "--outFile", "output.wasm", "--explicitStart", .. theModule.exports._start(); } catch (err) { console.error("The wasm module _start() function failed in " + process.cwd()); + console.error(err); process.exit(1); } return 0; diff --git a/tests/asconfig/package.json b/tests/asconfig/package.json index 58789240bc..1c6818ce3b 100644 --- a/tests/asconfig/package.json +++ b/tests/asconfig/package.json @@ -1,12 +1,13 @@ { "private": true, "scripts": { - "test": "npm run test:use-consts && npm run test:target && npm run test:entry-points && npm run test:complicated", + "test": "npm run test:use-consts && npm run test:target && npm run test:entry-points && npm run test:complicated && npm run test:extends", "test:use-consts": "cd use-consts && npm run test", "test:entry-points": "cd entry-points && npm run test", "test:respect-inheritence": "cd respect-inheritence && npm run test", "test:target": "cd target && npm run test", "test:cyclical": "cd cyclical && npm run test", - "test:complicated": "cd complicated && npm run test" + "test:complicated": "cd complicated && npm run test", + "test:extends": "cd extends && npm run test" } } diff --git a/tests/asconfig/target/asconfig.json b/tests/asconfig/target/asconfig.json index aaadbf8119..57ba76da13 100644 --- a/tests/asconfig/target/asconfig.json +++ b/tests/asconfig/target/asconfig.json @@ -1,13 +1,17 @@ { "targets": { "release": { + "noAssert": true, + "runtime": "none" + }, + "debug": { "optimizeLevel": 3, "shrinkLevel": 1, - "enable": ["simd"] - }, - "dev": { + "enable": ["simd"], "debug": true } }, - "options": {} + "options": { + "runtime": "stub" + } } diff --git a/tests/asconfig/target/assembly/index.ts b/tests/asconfig/target/assembly/index.ts index 5c03e37224..a3353e3c36 100644 --- a/tests/asconfig/target/assembly/index.ts +++ b/tests/asconfig/target/assembly/index.ts @@ -1,3 +1,3 @@ -assert(ASC_OPTIMIZE_LEVEL == 3); -assert(ASC_SHRINK_LEVEL == 1); -assert(ASC_FEATURE_SIMD); +assert(ASC_OPTIMIZE_LEVEL == 3, "expected optimize level == 3"); +assert(ASC_SHRINK_LEVEL == 1, "expected shrink level == 1"); +assert(ASC_FEATURE_SIMD, "expected SIMD enabled"); diff --git a/tests/asconfig/target/expected.json b/tests/asconfig/target/expected.json new file mode 100644 index 0000000000..d4e935883a --- /dev/null +++ b/tests/asconfig/target/expected.json @@ -0,0 +1,6 @@ +{ + "options": { + "runtime": "none", + "noAssert": true + } +} \ No newline at end of file diff --git a/tests/asconfig/target/package.json b/tests/asconfig/target/package.json index f98424bae9..0d5843d61f 100644 --- a/tests/asconfig/target/package.json +++ b/tests/asconfig/target/package.json @@ -1,6 +1,6 @@ { "private": true, "scripts": { - "test": "node ../index.js" + "test": "node ../index.js --target debug && node ../index.js --showConfig" } }