wasm-bindgen/tests/all/validate_prt.rs
Alex Crichton a949482e3a
Remove usage of #[wasm_custom_section] (#509)
This has been stabilized on nightly as `#[link_section]`, so no need for an
unstable attribute any more. Yay!
2018-07-19 08:57:18 -05:00

76 lines
2.2 KiB
Rust

use super::project;
#[test]
fn works() {
project()
.file(
"src/lib.rs",
r#"
#![feature(use_extern_macros, wasm_import_module)]
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub struct Fruit {
name: String,
}
#[wasm_bindgen]
impl Fruit {
#[wasm_bindgen(method)]
pub fn name(&self) -> String {
self.name.clone()
}
#[wasm_bindgen(constructor)]
pub fn new(name: String) -> Self {
Fruit {
name,
}
}
}
#[wasm_bindgen]
pub fn eat(_fruit: Fruit) { }
"#,
)
.file(
"test.js",
r#"
import * as wasm from './out';
const targetMessage = 'Attempt to use a moved value';
function assertEq(a, b) {
console.log(a, '?=', b);
if (a === b)
return;
throw new Error('not equal');
}
export function test() {
useMoved();
moveMoved();
}
export function useMoved() {
// create a new struct
let apple = new wasm.Fruit('apple');
// sanity check that this method works
let name = apple.name();
// consume the struct
wasm.eat(apple);
// try and use the moved apple again
try {
let movedName = apple.name();
} catch (e) {
assertEq(e.message, targetMessage);
}
}
export function moveMoved() {
let pear = new wasm.Fruit('pear');
let name = pear.name();
wasm.eat(pear);
try {
wasm.eat(pear);
} catch (e) {
assertEq(e.message, targetMessage);
}
}
"#,
)
.test();
}