mirror of
https://github.com/remko/waforth
synced 2025-01-17 18:11:39 +01:00
Add command-line unit test runner
This commit is contained in:
parent
bbe5a4eec3
commit
eb97d29d90
9 changed files with 1392 additions and 1257 deletions
14
.travis.yml
Normal file
14
.travis.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Doesn't work yet, because there is no 'wabt' package in Ubuntu yet
|
||||
# This will have to wait until disco.
|
||||
# TODO: Add racket.
|
||||
language: node_js
|
||||
node_js:
|
||||
- "node"
|
||||
script:
|
||||
- yarn build
|
||||
- yarn test
|
||||
cache: yarn
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- wabt
|
11
Makefile
11
Makefile
|
@ -3,16 +3,14 @@ WAT2WASM_FLAGS=
|
|||
ifeq ($(DEBUG),1)
|
||||
WAT2WASM_FLAGS=--debug-names
|
||||
endif
|
||||
WEBPACK=yarn exec webpack
|
||||
WEBPACK_DEV_SERVER=yarn exec webpack-dev-server
|
||||
|
||||
WASM_FILES=src/waforth.wasm tests/benchmarks/sieve-vanilla.wasm
|
||||
|
||||
all: $(WASM_FILES)
|
||||
$(WEBPACK) --mode=production
|
||||
yarn -s build
|
||||
|
||||
dev-server: $(WASM_FILES)
|
||||
$(WEBPACK_DEV_SERVER) --open --openPage waforth --content-base public
|
||||
yarn -s dev-server
|
||||
|
||||
wasm: $(WASM_FILES) src/tools/quadruple.wasm.hex
|
||||
|
||||
|
@ -35,5 +33,8 @@ src/tools/quadruple.wasm.hex: src/tools/quadruple.wasm
|
|||
clean:
|
||||
-rm -rf $(WASM_FILES) src/tools/quadruple.wasm src/tools/quadruple.wasm.hex src/waforth.wat.tmp dist
|
||||
|
||||
check:
|
||||
yarn -s test
|
||||
|
||||
lint:
|
||||
yarn run -s eslint .
|
||||
yarn -s lint
|
||||
|
|
|
@ -41,7 +41,11 @@ To run the development server:
|
|||
|
||||
## Testing
|
||||
|
||||
The tests are served from `/tests`.
|
||||
The tests are served from `/tests` by the development server.
|
||||
|
||||
You can also run the tests in Node.JS by running
|
||||
|
||||
make check
|
||||
|
||||
## Design
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
"@babel/core": "^7.3.4",
|
||||
"@babel/preset-env": "^7.3.4",
|
||||
"@babel/preset-react": "^7.0.0",
|
||||
"@babel/register": "^7.0.0",
|
||||
"babel-loader": "^8.0.5",
|
||||
"bin-loader": "^0.1.0",
|
||||
"chai": "^4.2.0",
|
||||
|
@ -24,5 +25,12 @@
|
|||
"webpack": "^4.29.6",
|
||||
"webpack-cli": "^3.2.3",
|
||||
"webpack-dev-server": "^3.2.1"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "webpack --mode=production",
|
||||
"test": "mocha tests/index-node.js",
|
||||
"lint": "eslint .",
|
||||
"dev-server":
|
||||
"webpack-dev-server --open --openPage waforth --content-base public"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import wasmModule from "../waforth.wasm";
|
||||
|
||||
const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
||||
const isSafari =
|
||||
typeof navigator != "undefined" &&
|
||||
/^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
function arrayToBase64(bytes) {
|
||||
|
@ -13,13 +13,21 @@ function arrayToBase64(bytes) {
|
|||
}
|
||||
|
||||
class WAForth {
|
||||
constructor(wasmModule) {
|
||||
if (wasmModule == null) {
|
||||
this.wasmModule = require("../waforth.wasm");
|
||||
} else {
|
||||
this.wasmModule = wasmModule;
|
||||
}
|
||||
}
|
||||
|
||||
start(options = {}) {
|
||||
const { skipPrelude } = options;
|
||||
let table;
|
||||
let memory;
|
||||
const buffer = (this.buffer = []);
|
||||
|
||||
return WebAssembly.instantiate(wasmModule, {
|
||||
return WebAssembly.instantiate(this.wasmModule, {
|
||||
shell: {
|
||||
////////////////////////////////////////
|
||||
// I/O
|
||||
|
|
9
tests/index-node.js
Normal file
9
tests/index-node.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
/* global __dirname */
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
require("@babel/register")({
|
||||
presets: ["@babel/preset-env"]
|
||||
});
|
||||
const loadTests = require("./tests.js").default;
|
||||
const wasmModule = fs.readFileSync(path.join(__dirname, "../src/waforth.wasm"));
|
||||
loadTests(wasmModule);
|
1249
tests/index.js
1249
tests/index.js
File diff suppressed because it is too large
Load diff
1249
tests/tests.js
Normal file
1249
tests/tests.js
Normal file
File diff suppressed because it is too large
Load diff
87
yarn.lock
87
yarn.lock
|
@ -617,6 +617,19 @@
|
|||
"@babel/plugin-transform-react-jsx-self" "^7.0.0"
|
||||
"@babel/plugin-transform-react-jsx-source" "^7.0.0"
|
||||
|
||||
"@babel/register@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827"
|
||||
integrity sha512-f/+CRmaCe7rVEvcvPvxeA8j5aJhHC3aJie7YuqcMDhUOuyWLA7J/aNrTaHIzoWPEhpHA54mec4Mm8fv8KBlv3g==
|
||||
dependencies:
|
||||
core-js "^2.5.7"
|
||||
find-cache-dir "^1.0.0"
|
||||
home-or-tmp "^3.0.0"
|
||||
lodash "^4.17.10"
|
||||
mkdirp "^0.5.1"
|
||||
pirates "^4.0.0"
|
||||
source-map-support "^0.5.9"
|
||||
|
||||
"@babel/template@^7.1.0", "@babel/template@^7.1.2", "@babel/template@^7.2.2":
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907"
|
||||
|
@ -1510,6 +1523,11 @@ copy-descriptor@^0.1.0:
|
|||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
|
||||
|
||||
core-js@^2.5.7:
|
||||
version "2.6.5"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895"
|
||||
integrity sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==
|
||||
|
||||
core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
|
@ -2254,6 +2272,15 @@ finalhandler@1.1.1:
|
|||
statuses "~1.4.0"
|
||||
unpipe "~1.0.0"
|
||||
|
||||
find-cache-dir@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
|
||||
integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
|
||||
dependencies:
|
||||
commondir "^1.0.1"
|
||||
make-dir "^1.0.0"
|
||||
pkg-dir "^2.0.0"
|
||||
|
||||
find-cache-dir@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d"
|
||||
|
@ -2263,6 +2290,13 @@ find-cache-dir@^2.0.0:
|
|||
make-dir "^1.0.0"
|
||||
pkg-dir "^3.0.0"
|
||||
|
||||
find-up@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
|
||||
integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
|
||||
dependencies:
|
||||
locate-path "^2.0.0"
|
||||
|
||||
find-up@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
|
||||
|
@ -2573,6 +2607,11 @@ hmac-drbg@^1.0.0:
|
|||
minimalistic-assert "^1.0.0"
|
||||
minimalistic-crypto-utils "^1.0.1"
|
||||
|
||||
home-or-tmp@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-3.0.0.tgz#57a8fe24cf33cdd524860a15821ddc25c86671fb"
|
||||
integrity sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=
|
||||
|
||||
homedir-polyfill@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
|
||||
|
@ -3193,6 +3232,14 @@ loader-utils@^1.2.3:
|
|||
emojis-list "^2.0.0"
|
||||
json5 "^1.0.1"
|
||||
|
||||
locate-path@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
|
||||
integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
|
||||
dependencies:
|
||||
p-locate "^2.0.0"
|
||||
path-exists "^3.0.0"
|
||||
|
||||
locate-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
|
||||
|
@ -3574,6 +3621,11 @@ node-libs-browser@^2.0.0:
|
|||
util "^0.10.3"
|
||||
vm-browserify "0.0.4"
|
||||
|
||||
node-modules-regexp@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
|
||||
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
|
||||
|
||||
node-pre-gyp@^0.10.0:
|
||||
version "0.10.0"
|
||||
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46"
|
||||
|
@ -3802,6 +3854,13 @@ p-is-promise@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5"
|
||||
integrity sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==
|
||||
|
||||
p-limit@^1.1.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
|
||||
integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
|
||||
dependencies:
|
||||
p-try "^1.0.0"
|
||||
|
||||
p-limit@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2"
|
||||
|
@ -3809,6 +3868,13 @@ p-limit@^2.0.0:
|
|||
dependencies:
|
||||
p-try "^2.0.0"
|
||||
|
||||
p-locate@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
|
||||
integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
|
||||
dependencies:
|
||||
p-limit "^1.1.0"
|
||||
|
||||
p-locate@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
|
||||
|
@ -3820,6 +3886,11 @@ p-map@^1.1.1:
|
|||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
|
||||
|
||||
p-try@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
|
||||
integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
|
||||
|
||||
p-try@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1"
|
||||
|
@ -3938,6 +4009,20 @@ pinkie@^2.0.0:
|
|||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
|
||||
|
||||
pirates@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
|
||||
integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
|
||||
dependencies:
|
||||
node-modules-regexp "^1.0.0"
|
||||
|
||||
pkg-dir@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
|
||||
integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
|
||||
dependencies:
|
||||
find-up "^2.1.0"
|
||||
|
||||
pkg-dir@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
|
||||
|
@ -4619,7 +4704,7 @@ source-map-resolve@^0.5.0:
|
|||
source-map-url "^0.4.0"
|
||||
urix "^0.1.0"
|
||||
|
||||
source-map-support@~0.5.9:
|
||||
source-map-support@^0.5.9, source-map-support@~0.5.9:
|
||||
version "0.5.10"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
|
||||
integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
|
||||
|
|
Loading…
Reference in a new issue