@@ -15,13 +15,19 @@ const TYPED_ARRAY_CTORS = [
1515 Float16Array , Float32Array , Float64Array ,
1616 BigInt64Array , BigUint64Array ,
1717] ;
18- const hasGrowableSharedArrayBuffer = ( ( ) => {
18+
19+ function createGrowableSharedArrayBufferView ( Ctor ) {
1920 try {
20- return new SharedArrayBuffer ( 0 , { maxByteLength : 1 } ) . growable === true ;
21+ const buffer = new SharedArrayBuffer ( 0 , { maxByteLength : 1 } ) ;
22+ const view = new Ctor ( buffer ) ;
23+ return view . buffer . growable === true ? view : undefined ;
2124 } catch {
22- return false ;
25+ return undefined ;
2326 }
24- } ) ( ) ;
27+ }
28+
29+ const hasGrowableSharedArrayBufferViews =
30+ createGrowableSharedArrayBufferView ( Uint8Array ) !== undefined ;
2531
2632test ( 'BufferSource accepts ArrayBuffer' , ( ) => {
2733 const ab = new ArrayBuffer ( 8 ) ;
@@ -167,11 +173,12 @@ test('BufferSource handles resizable-backed views with explicit options', () =>
167173} ) ;
168174
169175test ( 'BufferSource handles growable SAB-backed views with explicit options' , {
170- skip : ! hasGrowableSharedArrayBuffer ,
176+ skip : ! hasGrowableSharedArrayBufferViews ,
171177} , ( ) => {
172178 for ( const Ctor of [ DataView , ...TYPED_ARRAY_CTORS ] ) {
173179 {
174- const view = new Ctor ( new SharedArrayBuffer ( 0 , { maxByteLength : 1 } ) ) ;
180+ const view = createGrowableSharedArrayBufferView ( Ctor ) ;
181+ assert . notStrictEqual ( view , undefined ) ;
175182 assert . throws (
176183 ( ) => converters . BufferSource ( view , {
177184 allowShared : true ,
@@ -182,7 +189,8 @@ test('BufferSource handles growable SAB-backed views with explicit options', {
182189 }
183190
184191 {
185- const view = new Ctor ( new SharedArrayBuffer ( 0 , { maxByteLength : 1 } ) ) ;
192+ const view = createGrowableSharedArrayBufferView ( Ctor ) ;
193+ assert . notStrictEqual ( view , undefined ) ;
186194 assert . strictEqual ( converters . BufferSource ( view , {
187195 allowShared : true ,
188196 allowResizable : true ,
0 commit comments