diff options
Diffstat (limited to 'deps/v8/test/mjsunit/es6/object-tostring.js')
-rw-r--r-- | deps/v8/test/mjsunit/es6/object-tostring.js | 91 |
1 files changed, 79 insertions, 12 deletions
diff --git a/deps/v8/test/mjsunit/es6/object-tostring.js b/deps/v8/test/mjsunit/es6/object-tostring.js index 29d07f263a..bc7d9681f8 100644 --- a/deps/v8/test/mjsunit/es6/object-tostring.js +++ b/deps/v8/test/mjsunit/es6/object-tostring.js @@ -15,15 +15,16 @@ var funs = { RegExp: [ RegExp ], Error: [ Error, TypeError, RangeError, SyntaxError, ReferenceError, EvalError, URIError ] -} -for (f in funs) { - for (i in funs[f]) { +}; +for (var f in funs) { + for (var i in funs[f]) { + assertEquals("[object " + f + "]", - Object.prototype.toString.call(new funs[f][i]), - funs[f][i]); + Object.prototype.toString.call(new funs[f][i]), + funs[f][i]); assertEquals("[object Function]", - Object.prototype.toString.call(funs[f][i]), - funs[f][i]); + Object.prototype.toString.call(funs[f][i]), + funs[f][i]); } } @@ -130,11 +131,11 @@ function testObjectToStringPropertyDesc() { } testObjectToStringPropertyDesc(); -function testObjectToStringOwnNonStringValue() { - var obj = Object.defineProperty({}, Symbol.toStringTag, { value: 1 }); +function testObjectToStringOnNonStringValue(obj) { + Object.defineProperty(obj, Symbol.toStringTag, { value: 1 }); assertEquals("[object Object]", ({}).toString.call(obj)); } -testObjectToStringOwnNonStringValue(); +testObjectToStringOnNonStringValue({}); // Proxies @@ -149,11 +150,77 @@ assertTag("Function", new Proxy(() => 42, {})); assertTag("Foo", new Proxy(() => 42, {get() {return "Foo"}})); assertTag("Function", new Proxy(() => 42, {get() {return 666}})); -revocable = Proxy.revocable([], {}); +var revocable = Proxy.revocable([], {}); revocable.revoke(); assertThrows(() => Object.prototype.toString.call(revocable.proxy), TypeError); -handler = {}; +var handler = {}; revocable = Proxy.revocable([], handler); +// The first get() call, i.e., toString() revokes the proxy handler.get = () => revocable.revoke(); +assertEquals("[object Array]", Object.prototype.toString.call(revocable.proxy)); assertThrows(() => Object.prototype.toString.call(revocable.proxy), TypeError); + +revocable = Proxy.revocable([], handler); +handler.get = () => {revocable.revoke(); return "value";}; +assertEquals("[object value]", Object.prototype.toString.call(revocable.proxy)); +assertThrows(() => Object.prototype.toString.call(revocable.proxy), TypeError); + + +revocable = Proxy.revocable(function() {}, handler); +handler.get = () => revocable.revoke(); +assertEquals("[object Function]", Object.prototype.toString.call(revocable.proxy)); +assertThrows(() => Object.prototype.toString.call(revocable.proxy), TypeError); + +function* gen() { yield 1; } + +assertTag("GeneratorFunction", gen); +Object.defineProperty(gen, Symbol.toStringTag, {writable: true}); +gen[Symbol.toStringTag] = "different string"; +assertTag("different string", gen); +gen[Symbol.toStringTag] = 1; +assertTag("Function", gen); + +function overwriteToStringTagWithNonStringValue(tag, obj) { + assertTag(tag, obj); + + Object.defineProperty(obj, Symbol.toStringTag, { + configurable: true, + value: "different string" + }); + assertTag("different string", obj); + + testObjectToStringOnNonStringValue(obj); +} + +overwriteToStringTagWithNonStringValue("global", global); +overwriteToStringTagWithNonStringValue("Generator", gen()); + +var arrayBuffer = new ArrayBuffer(); +overwriteToStringTagWithNonStringValue("ArrayBuffer", arrayBuffer); +overwriteToStringTagWithNonStringValue("DataView", new DataView(arrayBuffer)); + +overwriteToStringTagWithNonStringValue("Int8Array", new Int8Array()); +overwriteToStringTagWithNonStringValue("Uint8Array", new Uint8Array()); +overwriteToStringTagWithNonStringValue("Uint8ClampedArray", + new Uint8ClampedArray()); +overwriteToStringTagWithNonStringValue("Int16Array", new Int16Array()); +overwriteToStringTagWithNonStringValue("Uint16Array", new Uint16Array()); +overwriteToStringTagWithNonStringValue("Int32Array", new Int32Array()); +overwriteToStringTagWithNonStringValue("Uint32Array", new Uint32Array()); +overwriteToStringTagWithNonStringValue("Float32Array", new Float32Array()); +overwriteToStringTagWithNonStringValue("Float64Array", new Float64Array()); + +var set = new Set(); +var map = new Map(); + +overwriteToStringTagWithNonStringValue("Set", set); +overwriteToStringTagWithNonStringValue("Map", map); + +overwriteToStringTagWithNonStringValue("Set Iterator", set[Symbol.iterator]()); +overwriteToStringTagWithNonStringValue("Map Iterator", map[Symbol.iterator]()); + +overwriteToStringTagWithNonStringValue("WeakSet", new WeakSet()); +overwriteToStringTagWithNonStringValue("WeakMap", new WeakMap()); + +overwriteToStringTagWithNonStringValue("Promise", new Promise(function() {})); |