1// META: global=window,dedicatedworker,jsshell 2 3test(() => { 4 const thisValues = [ 5 undefined, 6 null, 7 true, 8 "", 9 Symbol(), 10 1, 11 {}, 12 WebAssembly.Memory, 13 WebAssembly.Memory.prototype, 14 ]; 15 16 const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "buffer"); 17 assert_equals(typeof desc, "object"); 18 19 const getter = desc.get; 20 assert_equals(typeof getter, "function"); 21 22 assert_equals(typeof desc.set, "undefined"); 23 24 for (const thisValue of thisValues) { 25 assert_throws_js(TypeError, () => getter.call(thisValue), `this=${format_value(thisValue)}`); 26 } 27}, "Branding"); 28 29test(() => { 30 const argument = { "initial": 0 }; 31 const memory = new WebAssembly.Memory(argument); 32 const buffer = memory.buffer; 33 34 const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "buffer"); 35 assert_equals(typeof desc, "object"); 36 37 const getter = desc.get; 38 assert_equals(typeof getter, "function"); 39 40 assert_equals(getter.call(memory, {}), buffer); 41}, "Stray argument"); 42 43test(() => { 44 const argument = { "initial": 0 }; 45 const memory = new WebAssembly.Memory(argument); 46 const memory2 = new WebAssembly.Memory(argument); 47 const buffer = memory.buffer; 48 assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers"); 49 memory.buffer = memory2.buffer; 50 assert_equals(memory.buffer, buffer, "Should not change the buffer"); 51}, "Setting (sloppy mode)"); 52 53test(() => { 54 const argument = { "initial": 0 }; 55 const memory = new WebAssembly.Memory(argument); 56 const memory2 = new WebAssembly.Memory(argument); 57 const buffer = memory.buffer; 58 assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers"); 59 assert_throws_js(TypeError, () => { 60 "use strict"; 61 memory.buffer = memory2.buffer; 62 }); 63 assert_equals(memory.buffer, buffer, "Should not change the buffer"); 64}, "Setting (strict mode)"); 65