| This directory contains tests specific to the [JavaScript API] to WebAssembly. |
| |
| These tests exist in the [web-platform-tests project], and are included here |
| primarily to simplify sharing them between JavaScript engine implementers. |
| |
| These tests can be run in a pure JavaScript environment, that is, a JS shell |
| (like V8 or spidermonkey's shells), as well as in the browser. |
| |
| The tests use the [testharness.js] library and the [multi-global tests] setup |
| for smooth integrations with the web-platform-tests project and the existing |
| test infrastructure in implementations. |
| |
| ## Metadata |
| |
| All tests must have the `.any.js` extension. |
| |
| In order to be run in the JavaScript shell, a metadata comment to add the |
| `jsshell` scope to the default set of scopes (`window` and `dedicatedworker`) |
| is required at the start of the file: |
| |
| ```js |
| // META: global=jsshell |
| ``` |
| |
| Additional JavaScript files can be imported with |
| |
| ```js |
| // META: script=helper-file.js |
| |
| ``` |
| |
| ## Harness |
| |
| A single test file contains multiple subtests, which are created with one of |
| the following functions: |
| |
| - For synchronous tests: `test(function, name)` runs the function immediately. |
| The test fails if any assertion fails or an exception is thrown while calling |
| the function. |
| - For asynchronous tests: `promise_test(function, name)` where `function` |
| returns a `Promise`. The test fails if the returned `Promise` rejects. |
| |
| All assertions must be in one of those subtests. |
| |
| A number of assertion functions are provided, e.g.: |
| |
| - `assert_equals(x, y)`; |
| - `assert_not_equals(x, y)`; |
| - `assert_true(x)`; |
| - `assert_false(x)`; |
| - `assert_unreached()`; |
| - `assert_throws(error, function)`: checks if `function` throws an appropriate |
| exception (a typical value for `error` would be `new TypeError()`); |
| - `assert_class_string(object, class_name)`: checks if the result of calling |
| `Object.prototype.toString` on `object` uses `class_name`; |
| - `promise_rejects`: `assert_throws`, but for `Promise`s. |
| |
| All the above functions also take an optional trailing description argument. |
| |
| Non-trivial code that runs before the subtests should be put in the function |
| argument to `setup(function)`, to ensure any exceptions are handled gracefully. |
| |
| Finally, the harness also exposes a `format_value` function that provides a |
| helpful stringification of its argument. |
| |
| See the [testharness.js] documentation for more information. |
| |
| [JavaScript API]: https://webassembly.github.io/spec/js-api/ |
| [web-platform-tests project]: https://github.com/web-platform-tests/wpt/tree/master/wasm/jsapi |
| [testharness.js]: https://web-platform-tests.org/writing-tests/testharness-api.html |
| [multi-global tests]: https://web-platform-tests.org/writing-tests/testharness.html#multi-global-tests |