22// META: script=/wasm/jsapi/wasm-module-builder.js
33// META: script=/wasm/jsapi/assertions.js
44
5+ function copyToSharedBuffer ( buffer ) {
6+ const sab = new SharedArrayBuffer ( buffer . byteLength ) ;
7+ new Uint8Array ( sab ) . set ( buffer ) ;
8+ return new Uint8Array ( sab ) ;
9+ }
10+
11+ function copyToResizableBuffer ( buffer ) {
12+ const rab = new ArrayBuffer ( buffer . byteLength , { maxByteLength : buffer . byteLength * 2 } ) ;
13+ new Uint8Array ( rab ) . set ( buffer ) ;
14+ return new Uint8Array ( rab ) ;
15+ }
16+
17+ function copyToGrowableSharedBuffer ( buffer ) {
18+ const gsab = new SharedArrayBuffer ( buffer . byteLength , { maxByteLength : buffer . byteLength * 2 } ) ;
19+ new Uint8Array ( gsab ) . set ( buffer ) ;
20+ return new Uint8Array ( gsab ) ;
21+ }
22+
523let emptyModuleBinary ;
24+ let emptyModuleSharedBuffer ;
25+ let emptyModuleResizableBuffer ;
26+ let emptyModuleGrowableSharedBuffer ;
27+ let invalidModuleBinary ;
28+ let invalidModuleSharedBuffer ;
29+ let invalidModuleResizableBuffer ;
30+ let invalidModuleGrowableSharedBuffer ;
631setup ( ( ) => {
732 emptyModuleBinary = new WasmModuleBuilder ( ) . toBuffer ( ) ;
33+ emptyModuleSharedBuffer = copyToSharedBuffer ( emptyModuleBinary ) ;
34+ emptyModuleResizableBuffer = copyToResizableBuffer ( emptyModuleBinary ) ;
35+ emptyModuleGrowableSharedBuffer = copyToGrowableSharedBuffer ( emptyModuleBinary ) ;
36+
37+ invalidModuleBinary = new Uint8Array ( Array . from ( emptyModuleBinary ) . concat ( [ 0 , 0 ] ) ) ;
38+ invalidModuleSharedBuffer = copyToSharedBuffer ( invalidModuleBinary ) ;
39+ invalidModuleResizableBuffer = copyToResizableBuffer ( invalidModuleBinary ) ;
40+ invalidModuleGrowableSharedBuffer = copyToGrowableSharedBuffer ( invalidModuleBinary ) ;
841} ) ;
942
1043test ( ( ) => {
@@ -49,8 +82,7 @@ test(() => {
4982} , "Empty buffer" ) ;
5083
5184test ( ( ) => {
52- const buffer = new Uint8Array ( Array . from ( emptyModuleBinary ) . concat ( [ 0 , 0 ] ) ) ;
53- assert_throws_js ( WebAssembly . CompileError , ( ) => new WebAssembly . Module ( buffer ) ) ;
85+ assert_throws_js ( WebAssembly . CompileError , ( ) => new WebAssembly . Module ( invalidModuleBinary ) ) ;
5486} , "Invalid code" ) ;
5587
5688test ( ( ) => {
@@ -67,3 +99,30 @@ test(() => {
6799 const module = new WebAssembly . Module ( emptyModuleBinary , { } ) ;
68100 assert_equals ( Object . getPrototypeOf ( module ) , WebAssembly . Module . prototype ) ;
69101} , "Stray argument" ) ;
102+
103+ test ( ( ) => {
104+ const module = new WebAssembly . Module ( emptyModuleSharedBuffer ) ;
105+ assert_true ( module instanceof WebAssembly . Module ) ;
106+ } , "SharedArrayBuffer-backed view" ) ;
107+
108+ test ( ( ) => {
109+ assert_throws_js ( WebAssembly . CompileError , ( ) => new WebAssembly . Module ( invalidModuleSharedBuffer ) ) ;
110+ } , "Invalid module in SharedArrayBuffer" ) ;
111+
112+ test ( ( ) => {
113+ const module = new WebAssembly . Module ( emptyModuleResizableBuffer ) ;
114+ assert_true ( module instanceof WebAssembly . Module ) ;
115+ } , "Resizable ArrayBuffer-backed view" ) ;
116+
117+ test ( ( ) => {
118+ assert_throws_js ( WebAssembly . CompileError , ( ) => new WebAssembly . Module ( invalidModuleResizableBuffer ) ) ;
119+ } , "Invalid module in resizable ArrayBuffer" ) ;
120+
121+ test ( ( ) => {
122+ const module = new WebAssembly . Module ( emptyModuleGrowableSharedBuffer ) ;
123+ assert_true ( module instanceof WebAssembly . Module ) ;
124+ } , "Growable SharedArrayBuffer-backed view" ) ;
125+
126+ test ( ( ) => {
127+ assert_throws_js ( WebAssembly . CompileError , ( ) => new WebAssembly . Module ( invalidModuleGrowableSharedBuffer ) ) ;
128+ } , "Invalid module in growable SharedArrayBuffer" ) ;
0 commit comments