| // META: global=window,dedicatedworker,jsshell | |
| test(() => { | |
| const thisValues = [ | |
| undefined, | |
| null, | |
| true, | |
| "", | |
| Symbol(), | |
| 1, | |
| {}, | |
| WebAssembly.Memory, | |
| WebAssembly.Memory.prototype, | |
| ]; | |
| const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "buffer"); | |
| assert_equals(typeof desc, "object"); | |
| const getter = desc.get; | |
| assert_equals(typeof getter, "function"); | |
| assert_equals(typeof desc.set, "undefined"); | |
| for (const thisValue of thisValues) { | |
| assert_throws_js(TypeError, () => getter.call(thisValue), `this=${format_value(thisValue)}`); | |
| } | |
| }, "Branding"); | |
| test(() => { | |
| const argument = { "initial": 0 }; | |
| const memory = new WebAssembly.Memory(argument); | |
| const buffer = memory.buffer; | |
| const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "buffer"); | |
| assert_equals(typeof desc, "object"); | |
| const getter = desc.get; | |
| assert_equals(typeof getter, "function"); | |
| assert_equals(getter.call(memory, {}), buffer); | |
| }, "Stray argument"); | |
| test(() => { | |
| const argument = { "initial": 0 }; | |
| const memory = new WebAssembly.Memory(argument); | |
| const memory2 = new WebAssembly.Memory(argument); | |
| const buffer = memory.buffer; | |
| assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers"); | |
| memory.buffer = memory2.buffer; | |
| assert_equals(memory.buffer, buffer, "Should not change the buffer"); | |
| }, "Setting (sloppy mode)"); | |
| test(() => { | |
| const argument = { "initial": 0 }; | |
| const memory = new WebAssembly.Memory(argument); | |
| const memory2 = new WebAssembly.Memory(argument); | |
| const buffer = memory.buffer; | |
| assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers"); | |
| assert_throws_js(TypeError, () => { | |
| "use strict"; | |
| memory.buffer = memory2.buffer; | |
| }); | |
| assert_equals(memory.buffer, buffer, "Should not change the buffer"); | |
| }, "Setting (strict mode)"); |