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#" #![feature(use_extern_macros)] 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(); }