Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(352)

Side by Side Diff: test/mjsunit/es6/symbol-tostringtag.js

Issue 461453002: Implement well-known symbol `Symbol.toStringTag` Base URL: git://github.com/v8/v8.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/v8natives.js ('K') | « src/v8natives.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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 })();
OLDNEW
« src/v8natives.js ('K') | « src/v8natives.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698