2017-12-15 06:31:01 +03:00
|
|
|
extern crate test_support;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn add() {
|
|
|
|
test_support::project()
|
|
|
|
.file("src/lib.rs", r#"
|
2018-03-15 00:33:53 +03:00
|
|
|
#![feature(proc_macro, wasm_custom_section)]
|
2017-12-15 06:31:01 +03:00
|
|
|
|
|
|
|
extern crate wasm_bindgen;
|
|
|
|
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn add(a: u32, b: u32) -> u32 {
|
2018-02-08 03:41:33 +03:00
|
|
|
a + b
|
|
|
|
}
|
2017-12-15 07:07:26 +03:00
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn add3(a: u32) -> u32 {
|
2018-02-08 03:41:33 +03:00
|
|
|
a + 3
|
|
|
|
}
|
2017-12-15 07:07:26 +03:00
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn get2(_b: bool) -> u32 {
|
2018-02-08 03:41:33 +03:00
|
|
|
2
|
|
|
|
}
|
2017-12-20 18:35:14 +03:00
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn return_and_take_bool(a: bool, b: bool) -> bool {
|
2018-02-08 03:41:33 +03:00
|
|
|
a && b
|
|
|
|
}
|
2017-12-20 21:22:18 +03:00
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn raw_pointers_work(a: *mut u32, b: *const u8) -> *const u32 {
|
2018-02-08 03:41:33 +03:00
|
|
|
unsafe {
|
|
|
|
(*a) = (*b) as u32;
|
|
|
|
return a
|
2017-12-20 18:35:14 +03:00
|
|
|
}
|
2017-12-15 06:31:01 +03:00
|
|
|
}
|
|
|
|
"#)
|
2017-12-20 06:06:48 +03:00
|
|
|
.file("test.ts", r#"
|
2017-12-15 06:31:01 +03:00
|
|
|
import * as assert from "assert";
|
2018-01-30 08:20:38 +03:00
|
|
|
import * as wasm from "./out";
|
2017-12-20 06:06:48 +03:00
|
|
|
|
2018-01-30 08:20:38 +03:00
|
|
|
export function test() {
|
2017-12-15 08:55:21 +03:00
|
|
|
assert.strictEqual(wasm.add(1, 2), 3);
|
|
|
|
assert.strictEqual(wasm.add(2, 3), 5);
|
|
|
|
assert.strictEqual(wasm.add3(2), 5);
|
2017-12-20 21:22:18 +03:00
|
|
|
assert.strictEqual(wasm.get2(true), 2);
|
|
|
|
assert.strictEqual(wasm.return_and_take_bool(true, false), false);
|
2017-12-15 08:55:21 +03:00
|
|
|
}
|
|
|
|
"#)
|
|
|
|
.test();
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn string_arguments() {
|
|
|
|
test_support::project()
|
|
|
|
.file("src/lib.rs", r#"
|
2018-03-15 00:33:53 +03:00
|
|
|
#![feature(proc_macro, wasm_custom_section)]
|
2017-12-15 08:55:21 +03:00
|
|
|
|
|
|
|
extern crate wasm_bindgen;
|
|
|
|
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn assert_foo_and_bar(a: &str, b: &str) {
|
2018-02-08 03:41:33 +03:00
|
|
|
assert_eq!(a, "foo2");
|
|
|
|
assert_eq!(b, "bar");
|
|
|
|
}
|
2017-12-19 03:13:37 +03:00
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn assert_foo(a: &str) {
|
2018-02-08 03:41:33 +03:00
|
|
|
assert_eq!(a, "foo");
|
2017-12-15 08:55:21 +03:00
|
|
|
}
|
|
|
|
"#)
|
2017-12-20 06:06:48 +03:00
|
|
|
.file("test.ts", r#"
|
2018-01-30 08:20:38 +03:00
|
|
|
import * as wasm from "./out";
|
2017-12-20 06:06:48 +03:00
|
|
|
|
2018-01-30 08:20:38 +03:00
|
|
|
export function test() {
|
2017-12-15 08:55:21 +03:00
|
|
|
wasm.assert_foo("foo");
|
|
|
|
wasm.assert_foo_and_bar("foo2", "bar");
|
|
|
|
}
|
|
|
|
"#)
|
|
|
|
.test();
|
|
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn return_a_string() {
|
|
|
|
test_support::project()
|
|
|
|
.file("src/lib.rs", r#"
|
2018-03-15 00:33:53 +03:00
|
|
|
#![feature(proc_macro, wasm_custom_section)]
|
2017-12-15 08:55:21 +03:00
|
|
|
|
|
|
|
extern crate wasm_bindgen;
|
|
|
|
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn clone(a: &str) -> String {
|
2018-02-08 03:41:33 +03:00
|
|
|
a.to_string()
|
2017-12-15 08:56:40 +03:00
|
|
|
}
|
2017-12-15 08:55:21 +03:00
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn concat(a: &str, b: &str, c: i8) -> String {
|
2018-02-08 03:41:33 +03:00
|
|
|
format!("{} {} {}", a, b, c)
|
2017-12-15 08:55:21 +03:00
|
|
|
}
|
|
|
|
"#)
|
2017-12-20 06:06:48 +03:00
|
|
|
.file("test.ts", r#"
|
2017-12-15 08:55:21 +03:00
|
|
|
import * as assert from "assert";
|
2018-01-30 08:20:38 +03:00
|
|
|
import * as wasm from "./out";
|
2017-12-20 06:06:48 +03:00
|
|
|
|
2018-01-30 08:20:38 +03:00
|
|
|
export function test() {
|
2017-12-15 08:55:21 +03:00
|
|
|
assert.strictEqual(wasm.clone("foo"), "foo");
|
|
|
|
assert.strictEqual(wasm.clone("another"), "another");
|
|
|
|
assert.strictEqual(wasm.concat("a", "b", 3), "a b 3");
|
|
|
|
assert.strictEqual(wasm.concat("c", "d", -2), "c d -2");
|
2017-12-15 06:31:01 +03:00
|
|
|
}
|
|
|
|
"#)
|
|
|
|
.test();
|
|
|
|
}
|
2017-12-19 01:44:09 +03:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn exceptions() {
|
|
|
|
test_support::project()
|
|
|
|
.file("src/lib.rs", r#"
|
2018-03-15 00:33:53 +03:00
|
|
|
#![feature(proc_macro, wasm_custom_section)]
|
2017-12-19 01:44:09 +03:00
|
|
|
|
|
|
|
extern crate wasm_bindgen;
|
|
|
|
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
|
2018-02-08 03:41:33 +03:00
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn foo(_a: u32) {}
|
2018-02-08 03:41:33 +03:00
|
|
|
|
|
|
|
#[wasm_bindgen]
|
2018-03-06 01:25:15 +03:00
|
|
|
pub fn bar(_a: &str) {}
|
2017-12-19 01:44:09 +03:00
|
|
|
"#)
|
|
|
|
.file("test.js", r#"
|
2018-01-30 08:20:38 +03:00
|
|
|
import * as assert from "assert";
|
|
|
|
import * as wasm from "./out";
|
2017-12-19 01:44:09 +03:00
|
|
|
|
2018-01-30 08:20:38 +03:00
|
|
|
export function test() {
|
2017-12-19 01:44:09 +03:00
|
|
|
assert.throws(() => wasm.foo('a'), /expected a number argument/);
|
|
|
|
assert.throws(() => wasm.bar(3), /expected a string argument/);
|
2018-01-30 08:20:38 +03:00
|
|
|
}
|
2017-12-20 06:06:48 +03:00
|
|
|
"#)
|
|
|
|
.file("test.d.ts", r#"
|
2018-01-30 08:20:38 +03:00
|
|
|
export function test(): void;
|
2017-12-19 01:44:09 +03:00
|
|
|
"#)
|
|
|
|
.test();
|
|
|
|
}
|
2017-12-20 18:58:41 +03:00
|
|
|
|
2018-01-30 08:20:38 +03:00
|
|
|
// #[test]
|
|
|
|
// fn other_imports() {
|
|
|
|
// test_support::project()
|
|
|
|
// .file("src/lib.rs", r#"
|
2018-03-15 00:33:53 +03:00
|
|
|
// #![feature(proc_macro, wasm_custom_section)]
|
2018-01-30 08:20:38 +03:00
|
|
|
//
|
|
|
|
// extern crate wasm_bindgen;
|
|
|
|
//
|
|
|
|
// use wasm_bindgen::prelude::*;
|
|
|
|
//
|
|
|
|
// extern {
|
|
|
|
// fn another_import(a: u32);
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// wasm_bindgen! {
|
|
|
|
// pub fn foo(a: u32) {
|
|
|
|
// unsafe { another_import(a); }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// "#)
|
|
|
|
// .file("test.ts", r#"
|
|
|
|
// import * as assert from "assert";
|
|
|
|
// import * as wasm from "./out";
|
|
|
|
//
|
|
|
|
// let ARG: number | null = null;
|
|
|
|
//
|
|
|
|
// export function test() {
|
|
|
|
// wasm.foo(2);
|
|
|
|
// assert.strictEqual(ARG, 2);
|
|
|
|
// }
|
|
|
|
// "#)
|
|
|
|
// .test();
|
|
|
|
// }
|
2017-12-20 19:11:06 +03:00
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn other_exports() {
|
|
|
|
test_support::project()
|
|
|
|
.file("src/lib.rs", r#"
|
|
|
|
#[no_mangle]
|
|
|
|
pub extern fn foo(_a: u32) {
|
|
|
|
}
|
|
|
|
"#)
|
|
|
|
.file("test.ts", r#"
|
2018-03-06 00:25:14 +03:00
|
|
|
import * as wasm from "./out_bg";
|
2017-12-20 19:11:06 +03:00
|
|
|
|
2018-01-30 08:20:38 +03:00
|
|
|
export function test() {
|
|
|
|
wasm.foo(2);
|
2017-12-20 19:11:06 +03:00
|
|
|
}
|
|
|
|
"#)
|
|
|
|
.test();
|
|
|
|
}
|