| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 assertEquals(typeof Symbol.toStringTag, "symbol"); |
| 6 |
| 7 var toStringTag = Symbol.toStringTag; |
| 8 |
| 9 function tagIs(value, tag){ |
| 10 assertEquals(({}).toString.call(value), "[object " + tag + "]"); |
| 11 } |
| 12 |
| 13 (function testBuiltinTags() { |
| 14 tagIs(undefined, "Undefined"); |
| 15 tagIs(null, "Null"); |
| 16 tagIs([], "Array"); |
| 17 tagIs("", "String"); |
| 18 tagIs(function(){return arguments}(), "Arguments"); |
| 19 tagIs(Function(), "Function"); |
| 20 tagIs(Error(), "Error"); |
| 21 tagIs(!1, "Boolean"); |
| 22 tagIs(1, "Number"); |
| 23 tagIs(new Date, "Date"); |
| 24 tagIs(/./, "RegExp"); |
| 25 tagIs({}, "Object"); |
| 26 })(); |
| 27 |
| 28 (function testBuiltinToStringTags() { |
| 29 tagIs(Math, "Math"); |
| 30 tagIs(JSON, "JSON"); |
| 31 tagIs(Symbol(), "Symbol"); |
| 32 tagIs(new Promise(function(){}), "Promise"); |
| 33 tagIs(new Map, "Map"); |
| 34 tagIs(new WeakMap, "WeakMap"); |
| 35 tagIs(new Set, "Set"); |
| 36 tagIs(new WeakSet, "WeakSet"); |
| 37 tagIs(new ArrayBuffer, "ArrayBuffer"); |
| 38 tagIs(new DataView(new ArrayBuffer), "DataView"); |
| 39 })(); |
| 40 |
| 41 (function testChangingBuiltinToStringTags() { |
| 42 changedBuiltinToStringTagIs(Math, "foo"); |
| 43 changedBuiltinToStringTagIs(JSON, "foo"); |
| 44 changedBuiltinToStringTagIs(Symbol(), "foo"); |
| 45 changedBuiltinToStringTagIs(new Promise(function(){}), "foo"); |
| 46 changedBuiltinToStringTagIs(new Map, "foo"); |
| 47 changedBuiltinToStringTagIs(new WeakMap, "foo"); |
| 48 changedBuiltinToStringTagIs(new Set, "foo"); |
| 49 changedBuiltinToStringTagIs(new WeakSet, "foo"); |
| 50 changedBuiltinToStringTagIs(new ArrayBuffer, "foo"); |
| 51 changedBuiltinToStringTagIs(new DataView(new ArrayBuffer), "foo"); |
| 52 |
| 53 function changedBuiltinToStringTagIs(value, tag){ |
| 54 changeBuiltinToStringTag(value); |
| 55 tagIs(value, tag); |
| 56 } |
| 57 |
| 58 function changeBuiltinToStringTag(value){ |
| 59 if(toStringTag in value.__proto__){ |
| 60 var value = value.__proto__; |
| 61 } |
| 62 Object.defineProperty(value, toStringTag, { |
| 63 value: "foo", |
| 64 configurable: true |
| 65 }); |
| 66 } |
| 67 })(); |
| 68 |
| 69 (function testDeletingBuiltinToStringTags() { |
| 70 deletedBuiltinToStringTagIs(Math, "Object"); |
| 71 deletedBuiltinToStringTagIs(JSON, "Object"); |
| 72 deletedBuiltinToStringTagIs(Symbol(), "Object"); |
| 73 deletedBuiltinToStringTagIs(new Promise(function(){}), "Object"); |
| 74 deletedBuiltinToStringTagIs(new Map, "Object"); |
| 75 deletedBuiltinToStringTagIs(new WeakMap, "Object"); |
| 76 deletedBuiltinToStringTagIs(new Set, "Object"); |
| 77 deletedBuiltinToStringTagIs(new WeakSet, "Object"); |
| 78 deletedBuiltinToStringTagIs(new ArrayBuffer, "Object"); |
| 79 deletedBuiltinToStringTagIs(new DataView(new ArrayBuffer), "Object"); |
| 80 |
| 81 function deletedBuiltinToStringTagIs(value, tag){ |
| 82 deleteBuiltinToStringTag(value); |
| 83 tagIs(value, tag); |
| 84 } |
| 85 |
| 86 function deleteBuiltinToStringTag(value){ |
| 87 if(toStringTag in value.__proto__){ |
| 88 var value = value.__proto__; |
| 89 } |
| 90 delete value[toStringTag]; |
| 91 } |
| 92 })(); |
| 93 |
| 94 (function testUserDefinedToStringTags() { |
| 95 // `toStringTag` is an own property |
| 96 var o = {}; |
| 97 o[toStringTag] = "foo"; |
| 98 tagIs(o, "foo"); |
| 99 |
| 100 // `toStringTag` is an inherited property |
| 101 var proto = {}; |
| 102 proto[toStringTag] = "foo"; |
| 103 var o = {__proto__: proto}; |
| 104 tagIs(o, "foo"); |
| 105 |
| 106 // The type of `toStringTag` property's value isn't string |
| 107 var o = {}; |
| 108 o[toStringTag] = 1; |
| 109 tagIs(o, "???"); |
| 110 |
| 111 // The value of `toStringTag` property is one of |
| 112 // ["Arguments", "Array", "Boolean", "Date", |
| 113 // "Error", "Function", "Number", "RegExp", "String"] |
| 114 var o = {}; |
| 115 ["Arguments", "Array", "Boolean", "Date", "Error", |
| 116 "Function", "Number", "RegExp", "String"].forEach(function(tag){ |
| 117 o[toStringTag] = tag; |
| 118 tagIs(o, "~" + tag); |
| 119 }); |
| 120 })(); |
| OLD | NEW |