2018-07-19 08:45:08 -07:00
|
|
|
use super::project;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn take_and_return_a_bunch_of_slices() {
|
|
|
|
project()
|
|
|
|
.file(
|
|
|
|
"foo.webidl",
|
|
|
|
r#"
|
|
|
|
[Constructor()]
|
|
|
|
interface Foo {
|
|
|
|
DOMString strings(DOMString arg1);
|
|
|
|
ByteString byteStrings(ByteString arg1);
|
|
|
|
USVString usvStrings(USVString arg1);
|
|
|
|
|
|
|
|
Float32Array f32(Float32Array a);
|
|
|
|
Float64Array f64(Float64Array a);
|
|
|
|
Int8Array i8(Int8Array a);
|
|
|
|
Int16Array i16(Int16Array a);
|
|
|
|
Int32Array i32(Int32Array a);
|
|
|
|
Uint8Array u8(Uint8Array a);
|
|
|
|
Uint8ClampedArray u8Clamped(Uint8ClampedArray a);
|
|
|
|
Uint16Array u16(Uint16Array a);
|
|
|
|
Uint32Array u32(Uint32Array a);
|
|
|
|
};
|
|
|
|
"#,
|
|
|
|
)
|
|
|
|
.file(
|
|
|
|
"foo.js",
|
|
|
|
r#"
|
|
|
|
import { strictEqual } from "assert";
|
|
|
|
|
|
|
|
export class Foo {
|
|
|
|
strings(x) {
|
|
|
|
strictEqual(x, 'y');
|
|
|
|
return 'x';
|
|
|
|
}
|
|
|
|
byteStrings(x) {
|
|
|
|
strictEqual(x, 'yz');
|
|
|
|
return 'xx';
|
|
|
|
}
|
|
|
|
usvStrings(x) {
|
|
|
|
strictEqual(x, 'abc');
|
|
|
|
return 'efg';
|
|
|
|
}
|
|
|
|
f32(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Float32Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
f64(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Float64Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
i8(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Int8Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
i16(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Int16Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
i32(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Int32Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
u8(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Uint8Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
u8Clamped(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Uint8ClampedArray([3, 4, 5]);
|
|
|
|
}
|
|
|
|
u16(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Uint16Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
u32(x) {
|
|
|
|
strictEqual(x.length, 2);
|
|
|
|
strictEqual(x[0], 1);
|
|
|
|
strictEqual(x[1], 2);
|
|
|
|
return new Uint32Array([3, 4, 5]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"#,
|
|
|
|
)
|
|
|
|
.file(
|
|
|
|
"src/lib.rs",
|
|
|
|
r#"
|
2018-07-21 19:00:20 -07:00
|
|
|
#![feature(use_extern_macros)]
|
2018-07-19 08:45:08 -07:00
|
|
|
|
|
|
|
extern crate wasm_bindgen;
|
|
|
|
|
|
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
|
|
|
|
pub mod foo;
|
|
|
|
|
|
|
|
use foo::Foo;
|
|
|
|
|
|
|
|
#[wasm_bindgen]
|
|
|
|
pub fn test() {
|
|
|
|
let f = Foo::new().unwrap();
|
|
|
|
assert_eq!(f.strings("y"), "x");
|
|
|
|
assert_eq!(f.byte_strings("yz"), "xx");
|
|
|
|
assert_eq!(f.usv_strings("abc"), "efg");
|
|
|
|
assert_eq!(f.f32(&[1.0, 2.0]), [3.0, 4.0, 5.0]);
|
|
|
|
assert_eq!(f.f64(&[1.0, 2.0]), [3.0, 4.0, 5.0]);
|
|
|
|
assert_eq!(f.i8(&[1, 2]), [3, 4, 5]);
|
|
|
|
assert_eq!(f.i16(&[1, 2]), [3, 4, 5]);
|
|
|
|
assert_eq!(f.i32(&[1, 2]), [3, 4, 5]);
|
|
|
|
assert_eq!(f.u8(&[1, 2]), [3, 4, 5]);
|
|
|
|
assert_eq!(f.u8_clamped(&[1, 2]), [3, 4, 5]);
|
|
|
|
assert_eq!(f.u16(&[1, 2]), [3, 4, 5]);
|
|
|
|
assert_eq!(f.u32(&[1, 2]), [3, 4, 5]);
|
|
|
|
}
|
|
|
|
"#,
|
|
|
|
)
|
|
|
|
.test();
|
|
|
|
}
|