wasm-bindgen/tests/wasm/validate_prt.js
Alex Crichton cc36bdc00d
Fix codegen of consuming setters/getters (#2172)
Make sure they reset their internal pointer to null after we call Rust
since it invalidates the Rust pointer after being called!

Closes #2168
2020-05-29 15:28:52 -05:00

44 lines
1.2 KiB
JavaScript

const wasm = require('wasm-bindgen-test.js');
const assert = require('assert');
// NB: `wasm-pack` uses the presence of checks for moved values as a way to test
// whether it is correctly enabling `--debug` when configured to do so, so don't
// change this expected debug output without also updating `wasm-pack`'s tests.
const assertMovedPtrThrows = process.env.WASM_BINDGEN_NO_DEBUG == null
? f => assert.throws(f, /Attempt to use a moved value/)
: f => assert.throws(f, /null pointer passed to rust/);
const useMoved = () => {
const apple = new wasm.Fruit('apple');
apple.name();
wasm.eat(apple);
assertMovedPtrThrows(() => apple.name());
};
const moveMoved = () => {
const pear = new wasm.Fruit('pear');
pear.name();
wasm.eat(pear);
assertMovedPtrThrows(() => wasm.eat(pear));
};
const methodMoved = () => {
const quince = new wasm.Fruit('quince');
quince.name();
quince.rot();
assertMovedPtrThrows(() => quince.rot());
};
exports.js_works = () => {
useMoved();
moveMoved();
methodMoved();
const a = new wasm.Fruit('a');
a.prop;
assertMovedPtrThrows(() => a.prop);
const b = new wasm.Fruit('a');
b.prop = 3;
assertMovedPtrThrows(() => { b.prop = 4; });
};