Merge pull request #61 from fitzgen/test-for-dependency-types

Test for dependency types
This commit is contained in:
Alex Crichton 2018-03-07 14:11:52 -06:00 committed by GitHub
commit 4c4d8dab26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 108 additions and 0 deletions

View File

@ -42,6 +42,8 @@ pub fn project() -> Project {
[lib] [lib]
crate-type = ["cdylib"] crate-type = ["cdylib"]
# XXX: It is important that `[dependencies]` is the last section
# here, so that `add_local_dependency` functions correctly!
[dependencies] [dependencies]
wasm-bindgen = {{ path = '{}' }} wasm-bindgen = {{ path = '{}' }}
"#, IDX.with(|x| *x), dir.display())), "#, IDX.with(|x| *x), dir.display())),
@ -142,6 +144,20 @@ impl Project {
self 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) { pub fn test(&mut self) {
let root = root(); let root = root();
drop(fs::remove_dir_all(&root)); drop(fs::remove_dir_all(&root));

92
tests/dependencies.rs Normal file
View 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();
}