mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-11-24 06:33:33 +03:00
a2aa28e4d3
This commit adds a new attribute to `#[wasm_bindgen]`: `start`. The `start` attribute can be used to indicate that a function should be executed when the module is loaded, configuring the `start` function of the wasm executable. While this doesn't necessarily literally configure the `start` section, it does its best! Only one crate in a crate graph may indicate `#[wasm_bindgen(start)]`, so it's not recommended to be used in libraries but only end-user applications. Currently this still must be used with the `crate-type = ["cdylib"]` annotation in `Cargo.toml`. The implementation here is somewhat tricky because of the circular dependency between our generated JS and the wasm file that we emit. This circular dependency makes running initialization routines (like the `start` shim) particularly fraught with complications because one may need to run before the other but bundlers may not necessarily respect it. Workarounds have been implemented for various emission strategies, for example calling the start function directly after exports are wired up with `--no-modules` and otherwise working around what appears to be a Webpack bug with initializers running in a different order than we'd like. In any case, this in theory doesn't show up to the end user! Closes #74 |
||
---|---|---|
.. | ||
src | ||
ui-tests | ||
Cargo.toml | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md |
wasm-bindgen-macro
Implementation of the #[wasm_bindgen]
attribute. See the wasm-bindgen
documentation for more information about what this macro does.
Testing
Testing of this macro is done through "ui tests" in the ui-tests
subdirectory
of this crate. Each Rust file in this folder is compiled with the wasm_bindgen
crate, and the *.stderr
file sitting next to it is the asserted output of the
compiler. If the output matches, the test passes, and if the output doesn't
match the test fails. Note that it is also considered a failure if a test
actually compiles successfully.
To add a test:
- Create
ui-tests/my-awesome-test.rs
- Write an invalid
#[wasm_bindgen]
invocation, testing the error you're generating - Execute
cargo test -p ui-tests
, the test will fail - From within the
ui-tests
folder, execute./update-all-references.sh
. This should create amy-awesome-test.stderr
file. - Inspect
my-awesome-test.stderr
to make sure it looks ok - Rerun
cargo test -p ui-tests
and your tests should pass!
Testing here is a work in progress, see #601 for more information.