1
1
use futures:: Future ;
2
2
use js_sys:: * ;
3
- use wasm_bindgen:: { JsCast , prelude:: * } ;
3
+ use wasm_bindgen:: { prelude:: * , JsCast } ;
4
4
use wasm_bindgen_futures:: JsFuture ;
5
5
use wasm_bindgen_test:: * ;
6
6
7
7
#[ wasm_bindgen( module = "tests/wasm/WebAssembly.js" ) ]
8
- extern {
8
+ extern "C" {
9
9
#[ wasm_bindgen( js_name = getWasmArray) ]
10
10
fn get_wasm_array ( ) -> Uint8Array ;
11
11
@@ -14,6 +14,9 @@ extern {
14
14
15
15
#[ wasm_bindgen( js_name = getInvalidTableObject) ]
16
16
fn get_invalid_table_object ( ) -> Object ;
17
+
18
+ #[ wasm_bindgen( js_name = getImports) ]
19
+ fn get_imports ( ) -> Object ;
17
20
}
18
21
19
22
fn get_invalid_wasm ( ) -> JsValue {
@@ -38,23 +41,19 @@ fn validate() {
38
41
#[ wasm_bindgen_test( async ) ]
39
42
fn compile_compile_error ( ) -> impl Future < Item = ( ) , Error = JsValue > {
40
43
let p = WebAssembly :: compile ( & get_invalid_wasm ( ) ) ;
41
- JsFuture :: from ( p)
42
- . map ( |_| unreachable ! ( ) )
43
- . or_else ( |e| {
44
- assert ! ( e. is_instance_of:: <WebAssembly :: CompileError >( ) ) ;
45
- Ok ( ( ) )
46
- } )
44
+ JsFuture :: from ( p) . map ( |_| unreachable ! ( ) ) . or_else ( |e| {
45
+ assert ! ( e. is_instance_of:: <WebAssembly :: CompileError >( ) ) ;
46
+ Ok ( ( ) )
47
+ } )
47
48
}
48
49
49
50
#[ wasm_bindgen_test( async ) ]
50
51
fn compile_type_error ( ) -> impl Future < Item = ( ) , Error = JsValue > {
51
52
let p = WebAssembly :: compile ( & get_bad_type_wasm ( ) ) ;
52
- JsFuture :: from ( p)
53
- . map ( |_| unreachable ! ( ) )
54
- . or_else ( |e| {
55
- assert ! ( e. is_instance_of:: <TypeError >( ) ) ;
56
- Ok ( ( ) )
57
- } )
53
+ JsFuture :: from ( p) . map ( |_| unreachable ! ( ) ) . or_else ( |e| {
54
+ assert ! ( e. is_instance_of:: <TypeError >( ) ) ;
55
+ Ok ( ( ) )
56
+ } )
58
57
}
59
58
60
59
#[ wasm_bindgen_test( async ) ]
@@ -63,8 +62,7 @@ fn compile_valid() -> impl Future<Item = (), Error = JsValue> {
63
62
JsFuture :: from ( p)
64
63
. map ( |module| {
65
64
assert ! ( module. is_instance_of:: <WebAssembly :: Module >( ) ) ;
66
- } )
67
- . map_err ( |_| unreachable ! ( ) )
65
+ } ) . map_err ( |_| unreachable ! ( ) )
68
66
}
69
67
70
68
#[ wasm_bindgen_test]
@@ -81,7 +79,9 @@ fn module_error() {
81
79
let error = WebAssembly :: Module :: new ( & get_invalid_wasm ( ) ) . err ( ) . unwrap ( ) ;
82
80
assert ! ( error. is_instance_of:: <WebAssembly :: CompileError >( ) ) ;
83
81
84
- let error = WebAssembly :: Module :: new ( & get_bad_type_wasm ( ) ) . err ( ) . unwrap ( ) ;
82
+ let error = WebAssembly :: Module :: new ( & get_bad_type_wasm ( ) )
83
+ . err ( )
84
+ . unwrap ( ) ;
85
85
assert ! ( error. is_instance_of:: <TypeError >( ) ) ;
86
86
}
87
87
@@ -117,7 +117,9 @@ fn table_inheritance() {
117
117
118
118
#[ wasm_bindgen_test]
119
119
fn table_error ( ) {
120
- let error = WebAssembly :: Table :: new ( & get_invalid_table_object ( ) ) . err ( ) . unwrap ( ) ;
120
+ let error = WebAssembly :: Table :: new ( & get_invalid_table_object ( ) )
121
+ . err ( )
122
+ . unwrap ( ) ;
121
123
assert ! ( error. is_instance_of:: <RangeError >( ) ) ;
122
124
}
123
125
@@ -154,6 +156,16 @@ fn runtime_error_inheritance() {
154
156
let _: & Error = error. as_ref ( ) ;
155
157
}
156
158
159
+ #[ wasm_bindgen_test]
160
+ fn instance_constructor_and_inheritance ( ) {
161
+ let module = WebAssembly :: Module :: new ( & get_valid_wasm ( ) ) . unwrap ( ) ;
162
+ let imports = get_imports ( ) ;
163
+ let instance = WebAssembly :: Instance :: new ( & module, & imports) . unwrap ( ) ;
164
+ assert ! ( instance. is_instance_of:: <WebAssembly :: Instance >( ) ) ;
165
+ assert ! ( instance. is_instance_of:: <Object >( ) ) ;
166
+ let _: & Object = instance. as_ref ( ) ;
167
+ }
168
+
157
169
#[ wasm_bindgen_test]
158
170
fn memory_works ( ) {
159
171
let obj = Object :: new ( ) ;
@@ -166,7 +178,10 @@ fn memory_works() {
166
178
assert_eq ! ( mem. grow( 2 ) , 2 ) ;
167
179
assert_eq ! ( mem. grow( 3 ) , 4 ) ;
168
180
assert_eq ! (
169
- mem. buffer( ) . dyn_into:: <ArrayBuffer >( ) . unwrap( ) . byte_length( ) ,
181
+ mem. buffer( )
182
+ . dyn_into:: <ArrayBuffer >( )
183
+ . unwrap( )
184
+ . byte_length( ) ,
170
185
7 * 64 * 1024 ,
171
186
) ;
172
187
}
0 commit comments