mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-12-26 11:34:22 +03:00
906cd7adcc
This is now stabilized! Also tweak usage of it to the stable version.
210 lines
5.5 KiB
Rust
210 lines
5.5 KiB
Rust
use super::project;
|
|
|
|
#[test]
|
|
fn dependencies_work() {
|
|
project()
|
|
.file(
|
|
"src/lib.rs",
|
|
r#"
|
|
#![feature(use_extern_macros)]
|
|
extern crate wasm_bindgen;
|
|
extern crate dependency;
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[wasm_bindgen]
|
|
pub fn return_dep_ty(x: f64) -> dependency::Foo {
|
|
dependency::Foo(x)
|
|
}
|
|
|
|
#[wasm_bindgen]
|
|
pub fn takes_own_dep_ty(foo: dependency::Foo) -> f64 {
|
|
foo.0
|
|
}
|
|
|
|
#[wasm_bindgen]
|
|
pub fn takes_ref_dep_ty(foo: &dependency::Foo) -> f64 {
|
|
foo.0
|
|
}
|
|
|
|
#[wasm_bindgen]
|
|
pub fn takes_mut_dep_ty(foo: &mut dependency::Foo, x: f64) {
|
|
foo.0 = x;
|
|
}
|
|
"#,
|
|
)
|
|
.add_local_dependency("dependency", "vendor/dependency")
|
|
.file(
|
|
"vendor/dependency/Cargo.toml",
|
|
&format!(
|
|
r#"
|
|
[package]
|
|
name = "dependency"
|
|
version = "0.0.1"
|
|
authors = []
|
|
|
|
[dependencies]
|
|
wasm-bindgen = {{ path = '{}' }}
|
|
"#,
|
|
env!("CARGO_MANIFEST_DIR")
|
|
),
|
|
)
|
|
.file(
|
|
"vendor/dependency/src/lib.rs",
|
|
r#"
|
|
#![feature(use_extern_macros)]
|
|
extern crate wasm_bindgen;
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[wasm_bindgen]
|
|
pub struct Foo(pub f64);
|
|
|
|
#[wasm_bindgen]
|
|
impl Foo {
|
|
pub fn new(x: f64) -> Foo { Foo(x) }
|
|
pub fn get(&self) -> f64 { self.0 }
|
|
}
|
|
"#,
|
|
)
|
|
.file(
|
|
"test.js",
|
|
r#"
|
|
import * as assert from "assert";
|
|
import * as wasm from "./out";
|
|
|
|
export function test() {
|
|
const foo = wasm.return_dep_ty(42);
|
|
assert.strictEqual(foo.get(), 42);
|
|
|
|
const x = wasm.takes_ref_dep_ty(foo);
|
|
assert.strictEqual(x, 42);
|
|
|
|
const y = 1337;
|
|
wasm.takes_mut_dep_ty(foo, y);
|
|
assert.strictEqual(foo.get(), y);
|
|
|
|
const z = wasm.takes_own_dep_ty(foo);
|
|
assert.strictEqual(z, y);
|
|
assert.strictEqual(foo.ptr, 0);
|
|
}
|
|
"#,
|
|
)
|
|
.test();
|
|
}
|
|
|
|
#[test]
|
|
fn same_api_two_crates() {
|
|
project()
|
|
.file(
|
|
"src/lib.rs",
|
|
r#"
|
|
#![feature(use_extern_macros)]
|
|
extern crate wasm_bindgen;
|
|
extern crate a;
|
|
extern crate b;
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[wasm_bindgen(module = "./foo")]
|
|
extern {
|
|
fn assert_next_undefined();
|
|
fn assert_next_ten();
|
|
}
|
|
|
|
#[wasm_bindgen]
|
|
pub fn test() {
|
|
assert_next_undefined();
|
|
a::test();
|
|
assert_next_ten();
|
|
b::test();
|
|
}
|
|
"#,
|
|
)
|
|
.file(
|
|
"foo.js",
|
|
r#"
|
|
import { strictEqual } from "assert";
|
|
|
|
let next = null;
|
|
|
|
export function assert_next_undefined() {
|
|
next = undefined;
|
|
}
|
|
|
|
export function assert_next_ten() {
|
|
next = 10;
|
|
}
|
|
|
|
export function foo(a) {
|
|
console.log(a, next);
|
|
strictEqual(a, next);
|
|
next = null;
|
|
}
|
|
"#,
|
|
)
|
|
.add_local_dependency("a", "a")
|
|
.file(
|
|
"a/Cargo.toml",
|
|
&format!(r#"
|
|
[package]
|
|
name = 'a'
|
|
version = '0.0.0'
|
|
|
|
[dependencies]
|
|
wasm-bindgen = {{ path = '{}' }}
|
|
"#,
|
|
env!("CARGO_MANIFEST_DIR")
|
|
),
|
|
)
|
|
.file(
|
|
"a/src/lib.rs",
|
|
"
|
|
#![feature(use_extern_macros)]
|
|
extern crate wasm_bindgen;
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[wasm_bindgen(module = \"./foo\")]
|
|
extern {
|
|
fn foo();
|
|
}
|
|
|
|
pub fn test() {
|
|
foo();
|
|
}
|
|
",
|
|
)
|
|
.add_local_dependency("b", "b")
|
|
.file(
|
|
"b/Cargo.toml",
|
|
&format!(r#"
|
|
[package]
|
|
name = 'b'
|
|
version = '0.0.0'
|
|
|
|
[dependencies]
|
|
wasm-bindgen = {{ path = '{}' }}
|
|
"#,
|
|
env!("CARGO_MANIFEST_DIR")
|
|
),
|
|
)
|
|
.file(
|
|
"b/src/lib.rs",
|
|
"
|
|
#![feature(use_extern_macros)]
|
|
extern crate wasm_bindgen;
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
#[wasm_bindgen(module = \"./foo\")]
|
|
extern {
|
|
fn foo(x: u32);
|
|
}
|
|
|
|
pub fn test() {
|
|
foo(10);
|
|
}
|
|
",
|
|
)
|
|
.test();
|
|
}
|