mirror of
https://github.com/rustwasm/wasm-bindgen.git
synced 2024-12-26 11:34:22 +03:00
Merge pull request #61 from fitzgen/test-for-dependency-types
Test for dependency types
This commit is contained in:
commit
4c4d8dab26
@ -42,6 +42,8 @@ pub fn project() -> Project {
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
# XXX: It is important that `[dependencies]` is the last section
|
||||
# here, so that `add_local_dependency` functions correctly!
|
||||
[dependencies]
|
||||
wasm-bindgen = {{ path = '{}' }}
|
||||
"#, IDX.with(|x| *x), dir.display())),
|
||||
@ -142,6 +144,20 @@ impl Project {
|
||||
self
|
||||
}
|
||||
|
||||
pub fn add_local_dependency(&mut self, name: &str, path: &str) -> &mut Project {
|
||||
{
|
||||
let cargo_toml = self.files
|
||||
.iter_mut()
|
||||
.find(|f| f.0 == "Cargo.toml")
|
||||
.expect("should have Cargo.toml file!");
|
||||
cargo_toml.1.push_str(name);
|
||||
cargo_toml.1.push_str(" = { path = \"");
|
||||
cargo_toml.1.push_str(path);
|
||||
cargo_toml.1.push_str("\" }");
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
pub fn test(&mut self) {
|
||||
let root = root();
|
||||
drop(fs::remove_dir_all(&root));
|
||||
|
92
tests/dependencies.rs
Normal file
92
tests/dependencies.rs
Normal file
@ -0,0 +1,92 @@
|
||||
extern crate test_support;
|
||||
|
||||
#[test]
|
||||
fn dependencies_work() {
|
||||
test_support::project()
|
||||
.file(
|
||||
"src/lib.rs",
|
||||
r#"
|
||||
#![feature(proc_macro)]
|
||||
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(proc_macro)]
|
||||
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.ts",
|
||||
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();
|
||||
}
|
Loading…
Reference in New Issue
Block a user