Skip to content

Commit b3c5d99

Browse files
committed
[test] Add tests for resizable and growable shared buffer sources
1 parent 6a6d201 commit b3c5d99

File tree

4 files changed

+234
-6
lines changed

4 files changed

+234
-6
lines changed

test/js-api/constructor/compile.any.js

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,42 @@ function assert_Module(module) {
77
assert_true(Object.isExtensible(module), "Extensibility");
88
}
99

10+
function copyToSharedBuffer(buffer) {
11+
const sab = new SharedArrayBuffer(buffer.byteLength);
12+
new Uint8Array(sab).set(buffer);
13+
return new Uint8Array(sab);
14+
}
15+
16+
function copyToResizableBuffer(buffer) {
17+
const rab = new ArrayBuffer(buffer.byteLength, { maxByteLength: buffer.byteLength * 2 });
18+
new Uint8Array(rab).set(buffer);
19+
return new Uint8Array(rab);
20+
}
21+
22+
function copyToGrowableSharedBuffer(buffer) {
23+
const gsab = new SharedArrayBuffer(buffer.byteLength, { maxByteLength: buffer.byteLength * 2 });
24+
new Uint8Array(gsab).set(buffer);
25+
return new Uint8Array(gsab);
26+
}
27+
1028
let emptyModuleBinary;
29+
let emptyModuleSharedBuffer;
30+
let emptyModuleResizableBuffer;
31+
let emptyModuleGrowableSharedBuffer;
32+
let invalidModuleBinary;
33+
let invalidModuleSharedBuffer;
34+
let invalidModuleResizableBuffer;
35+
let invalidModuleGrowableSharedBuffer;
1136
setup(() => {
1237
emptyModuleBinary = new WasmModuleBuilder().toBuffer();
38+
emptyModuleSharedBuffer = copyToSharedBuffer(emptyModuleBinary);
39+
emptyModuleResizableBuffer = copyToResizableBuffer(emptyModuleBinary);
40+
emptyModuleGrowableSharedBuffer = copyToGrowableSharedBuffer(emptyModuleBinary);
41+
42+
invalidModuleBinary = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0]));
43+
invalidModuleSharedBuffer = copyToSharedBuffer(invalidModuleBinary);
44+
invalidModuleResizableBuffer = copyToResizableBuffer(invalidModuleBinary);
45+
invalidModuleGrowableSharedBuffer = copyToGrowableSharedBuffer(invalidModuleBinary);
1346
});
1447

1548
promise_test(t => {
@@ -64,8 +97,7 @@ promise_test(t => {
6497
}, "Empty buffer");
6598

6699
promise_test(t => {
67-
const buffer = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0]));
68-
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(buffer));
100+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(invalidModuleBinary));
69101
}, "Invalid code");
70102

71103
promise_test(() => {
@@ -83,3 +115,27 @@ promise_test(() => {
83115
buffer[0] = 1;
84116
return promise.then(assert_Module);
85117
}, "Changing the buffer");
118+
119+
promise_test(() => {
120+
return WebAssembly.compile(emptyModuleSharedBuffer).then(assert_Module);
121+
}, "SharedArrayBuffer-backed view");
122+
123+
promise_test(t => {
124+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(invalidModuleSharedBuffer));
125+
}, "Invalid module in SharedArrayBuffer");
126+
127+
promise_test(() => {
128+
return WebAssembly.compile(emptyModuleResizableBuffer).then(assert_Module);
129+
}, "Resizable ArrayBuffer-backed view");
130+
131+
promise_test(t => {
132+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(invalidModuleResizableBuffer));
133+
}, "Invalid module in resizable ArrayBuffer");
134+
135+
promise_test(() => {
136+
return WebAssembly.compile(emptyModuleGrowableSharedBuffer).then(assert_Module);
137+
}, "Growable SharedArrayBuffer-backed view");
138+
139+
promise_test(t => {
140+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compile(invalidModuleGrowableSharedBuffer));
141+
}, "Invalid module in growable SharedArrayBuffer");

test/js-api/constructor/instantiate.any.js

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,42 @@
33
// META: script=/wasm/jsapi/assertions.js
44
// META: script=/wasm/jsapi/instanceTestFactory.js
55

6+
function copyToSharedBuffer(buffer) {
7+
const sab = new SharedArrayBuffer(buffer.byteLength);
8+
new Uint8Array(sab).set(buffer);
9+
return new Uint8Array(sab);
10+
}
11+
12+
function copyToResizableBuffer(buffer) {
13+
const rab = new ArrayBuffer(buffer.byteLength, { maxByteLength: buffer.byteLength * 2 });
14+
new Uint8Array(rab).set(buffer);
15+
return new Uint8Array(rab);
16+
}
17+
18+
function copyToGrowableSharedBuffer(buffer) {
19+
const gsab = new SharedArrayBuffer(buffer.byteLength, { maxByteLength: buffer.byteLength * 2 });
20+
new Uint8Array(gsab).set(buffer);
21+
return new Uint8Array(gsab);
22+
}
23+
624
let emptyModuleBinary;
25+
let emptyModuleSharedBuffer;
26+
let emptyModuleResizableBuffer;
27+
let emptyModuleGrowableSharedBuffer;
28+
let invalidModuleBinary;
29+
let invalidModuleSharedBuffer;
30+
let invalidModuleResizableBuffer;
31+
let invalidModuleGrowableSharedBuffer;
732
setup(() => {
833
emptyModuleBinary = new WasmModuleBuilder().toBuffer();
34+
emptyModuleSharedBuffer = copyToSharedBuffer(emptyModuleBinary);
35+
emptyModuleResizableBuffer = copyToResizableBuffer(emptyModuleBinary);
36+
emptyModuleGrowableSharedBuffer = copyToGrowableSharedBuffer(emptyModuleBinary);
37+
38+
invalidModuleBinary = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0]));
39+
invalidModuleSharedBuffer = copyToSharedBuffer(invalidModuleBinary);
40+
invalidModuleResizableBuffer = copyToResizableBuffer(invalidModuleBinary);
41+
invalidModuleGrowableSharedBuffer = copyToGrowableSharedBuffer(invalidModuleBinary);
942
});
1043

1144
promise_test(t => {
@@ -139,8 +172,7 @@ promise_test(t => {
139172
}, "Empty buffer");
140173

141174
promise_test(t => {
142-
const buffer = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0]));
143-
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.instantiate(buffer));
175+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.instantiate(invalidModuleBinary));
144176
}, "Invalid code");
145177

146178
promise_test(() => {
@@ -150,3 +182,27 @@ promise_test(() => {
150182
buffer[0] = 1;
151183
return promise.then(assert_WebAssemblyInstantiatedSource);
152184
}, "Changing the buffer");
185+
186+
promise_test(() => {
187+
return WebAssembly.instantiate(emptyModuleSharedBuffer).then(assert_WebAssemblyInstantiatedSource);
188+
}, "SharedArrayBuffer-backed view");
189+
190+
promise_test(t => {
191+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.instantiate(invalidModuleSharedBuffer));
192+
}, "Invalid module in SharedArrayBuffer");
193+
194+
promise_test(() => {
195+
return WebAssembly.instantiate(emptyModuleResizableBuffer).then(assert_WebAssemblyInstantiatedSource);
196+
}, "Resizable ArrayBuffer-backed view");
197+
198+
promise_test(t => {
199+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.instantiate(invalidModuleResizableBuffer));
200+
}, "Invalid module in resizable ArrayBuffer");
201+
202+
promise_test(() => {
203+
return WebAssembly.instantiate(emptyModuleGrowableSharedBuffer).then(assert_WebAssemblyInstantiatedSource);
204+
}, "Growable SharedArrayBuffer-backed view");
205+
206+
promise_test(t => {
207+
return promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.instantiate(invalidModuleGrowableSharedBuffer));
208+
}, "Invalid module in growable SharedArrayBuffer");

test/js-api/constructor/validate.any.js

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,42 @@
11
// META: global=window,dedicatedworker,jsshell
22
// META: script=/wasm/jsapi/wasm-module-builder.js
33

4+
function copyToSharedBuffer(buffer) {
5+
const sab = new SharedArrayBuffer(buffer.byteLength);
6+
new Uint8Array(sab).set(buffer);
7+
return new Uint8Array(sab);
8+
}
9+
10+
function copyToResizableBuffer(buffer) {
11+
const rab = new ArrayBuffer(buffer.byteLength, { maxByteLength: buffer.byteLength * 2 });
12+
new Uint8Array(rab).set(buffer);
13+
return new Uint8Array(rab);
14+
}
15+
16+
function copyToGrowableSharedBuffer(buffer) {
17+
const gsab = new SharedArrayBuffer(buffer.byteLength, { maxByteLength: buffer.byteLength * 2 });
18+
new Uint8Array(gsab).set(buffer);
19+
return new Uint8Array(gsab);
20+
}
21+
422
let emptyModuleBinary;
23+
let emptyModuleSharedBuffer;
24+
let emptyModuleResizableBuffer;
25+
let emptyModuleGrowableSharedBuffer;
26+
let invalidModuleBinary;
27+
let invalidModuleSharedBuffer;
28+
let invalidModuleResizableBuffer;
29+
let invalidModuleGrowableSharedBuffer;
530
setup(() => {
631
emptyModuleBinary = new WasmModuleBuilder().toBuffer();
32+
emptyModuleSharedBuffer = copyToSharedBuffer(emptyModuleBinary);
33+
emptyModuleResizableBuffer = copyToResizableBuffer(emptyModuleBinary);
34+
emptyModuleGrowableSharedBuffer = copyToGrowableSharedBuffer(emptyModuleBinary);
35+
36+
invalidModuleBinary = new Uint8Array(Array.from(emptyModuleBinary).concat([0, 0]));
37+
invalidModuleSharedBuffer = copyToSharedBuffer(invalidModuleBinary);
38+
invalidModuleResizableBuffer = copyToResizableBuffer(invalidModuleBinary);
39+
invalidModuleGrowableSharedBuffer = copyToGrowableSharedBuffer(invalidModuleBinary);
740
});
841

942
test(() => {
@@ -97,3 +130,27 @@ for (const [module, expected] of modules) {
97130
test(() => {
98131
assert_true(WebAssembly.validate(emptyModuleBinary, {}));
99132
}, "Stray argument");
133+
134+
test(() => {
135+
assert_true(WebAssembly.validate(emptyModuleSharedBuffer));
136+
}, "SharedArrayBuffer-backed view");
137+
138+
test(() => {
139+
assert_false(WebAssembly.validate(invalidModuleSharedBuffer));
140+
}, "Invalid module in SharedArrayBuffer");
141+
142+
test(() => {
143+
assert_true(WebAssembly.validate(emptyModuleResizableBuffer));
144+
}, "Resizable ArrayBuffer-backed view");
145+
146+
test(() => {
147+
assert_false(WebAssembly.validate(invalidModuleResizableBuffer));
148+
}, "Invalid module in resizable ArrayBuffer");
149+
150+
test(() => {
151+
assert_true(WebAssembly.validate(emptyModuleGrowableSharedBuffer));
152+
}, "Growable SharedArrayBuffer-backed view");
153+
154+
test(() => {
155+
assert_false(WebAssembly.validate(invalidModuleGrowableSharedBuffer));
156+
}, "Invalid module in growable SharedArrayBuffer");

test/js-api/module/constructor.any.js

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,42 @@
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+
523
let emptyModuleBinary;
24+
let emptyModuleSharedBuffer;
25+
let emptyModuleResizableBuffer;
26+
let emptyModuleGrowableSharedBuffer;
27+
let invalidModuleBinary;
28+
let invalidModuleSharedBuffer;
29+
let invalidModuleResizableBuffer;
30+
let invalidModuleGrowableSharedBuffer;
631
setup(() => {
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

1043
test(() => {
@@ -49,8 +82,7 @@ test(() => {
4982
}, "Empty buffer");
5083

5184
test(() => {
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

5688
test(() => {
@@ -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

Comments
 (0)