| Index: test/mjsunit/es6/symbol-tostringtag.js
|
| diff --git a/test/mjsunit/es6/symbol-tostringtag.js b/test/mjsunit/es6/symbol-tostringtag.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7564eb650540652d548a6bfccf30b0c21cf00625
|
| --- /dev/null
|
| +++ b/test/mjsunit/es6/symbol-tostringtag.js
|
| @@ -0,0 +1,120 @@
|
| +// Copyright 2014 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +assertEquals(typeof Symbol.toStringTag, "symbol");
|
| +
|
| +var toStringTag = Symbol.toStringTag;
|
| +
|
| +function tagIs(value, tag){
|
| + assertEquals(({}).toString.call(value), "[object " + tag + "]");
|
| +}
|
| +
|
| +(function testBuiltinTags() {
|
| + tagIs(undefined, "Undefined");
|
| + tagIs(null, "Null");
|
| + tagIs([], "Array");
|
| + tagIs("", "String");
|
| + tagIs(function(){return arguments}(), "Arguments");
|
| + tagIs(Function(), "Function");
|
| + tagIs(Error(), "Error");
|
| + tagIs(!1, "Boolean");
|
| + tagIs(1, "Number");
|
| + tagIs(new Date, "Date");
|
| + tagIs(/./, "RegExp");
|
| + tagIs({}, "Object");
|
| +})();
|
| +
|
| +(function testBuiltinToStringTags() {
|
| + tagIs(Math, "Math");
|
| + tagIs(JSON, "JSON");
|
| + tagIs(Symbol(), "Symbol");
|
| + tagIs(new Promise(function(){}), "Promise");
|
| + tagIs(new Map, "Map");
|
| + tagIs(new WeakMap, "WeakMap");
|
| + tagIs(new Set, "Set");
|
| + tagIs(new WeakSet, "WeakSet");
|
| + tagIs(new ArrayBuffer, "ArrayBuffer");
|
| + tagIs(new DataView(new ArrayBuffer), "DataView");
|
| +})();
|
| +
|
| +(function testChangingBuiltinToStringTags() {
|
| + changedBuiltinToStringTagIs(Math, "foo");
|
| + changedBuiltinToStringTagIs(JSON, "foo");
|
| + changedBuiltinToStringTagIs(Symbol(), "foo");
|
| + changedBuiltinToStringTagIs(new Promise(function(){}), "foo");
|
| + changedBuiltinToStringTagIs(new Map, "foo");
|
| + changedBuiltinToStringTagIs(new WeakMap, "foo");
|
| + changedBuiltinToStringTagIs(new Set, "foo");
|
| + changedBuiltinToStringTagIs(new WeakSet, "foo");
|
| + changedBuiltinToStringTagIs(new ArrayBuffer, "foo");
|
| + changedBuiltinToStringTagIs(new DataView(new ArrayBuffer), "foo");
|
| +
|
| + function changedBuiltinToStringTagIs(value, tag){
|
| + changeBuiltinToStringTag(value);
|
| + tagIs(value, tag);
|
| + }
|
| +
|
| + function changeBuiltinToStringTag(value){
|
| + if(toStringTag in value.__proto__){
|
| + var value = value.__proto__;
|
| + }
|
| + Object.defineProperty(value, toStringTag, {
|
| + value: "foo",
|
| + configurable: true
|
| + });
|
| + }
|
| +})();
|
| +
|
| +(function testDeletingBuiltinToStringTags() {
|
| + deletedBuiltinToStringTagIs(Math, "Object");
|
| + deletedBuiltinToStringTagIs(JSON, "Object");
|
| + deletedBuiltinToStringTagIs(Symbol(), "Object");
|
| + deletedBuiltinToStringTagIs(new Promise(function(){}), "Object");
|
| + deletedBuiltinToStringTagIs(new Map, "Object");
|
| + deletedBuiltinToStringTagIs(new WeakMap, "Object");
|
| + deletedBuiltinToStringTagIs(new Set, "Object");
|
| + deletedBuiltinToStringTagIs(new WeakSet, "Object");
|
| + deletedBuiltinToStringTagIs(new ArrayBuffer, "Object");
|
| + deletedBuiltinToStringTagIs(new DataView(new ArrayBuffer), "Object");
|
| +
|
| + function deletedBuiltinToStringTagIs(value, tag){
|
| + deleteBuiltinToStringTag(value);
|
| + tagIs(value, tag);
|
| + }
|
| +
|
| + function deleteBuiltinToStringTag(value){
|
| + if(toStringTag in value.__proto__){
|
| + var value = value.__proto__;
|
| + }
|
| + delete value[toStringTag];
|
| + }
|
| +})();
|
| +
|
| +(function testUserDefinedToStringTags() {
|
| + // `toStringTag` is an own property
|
| + var o = {};
|
| + o[toStringTag] = "foo";
|
| + tagIs(o, "foo");
|
| +
|
| + // `toStringTag` is an inherited property
|
| + var proto = {};
|
| + proto[toStringTag] = "foo";
|
| + var o = {__proto__: proto};
|
| + tagIs(o, "foo");
|
| +
|
| + // The type of `toStringTag` property's value isn't string
|
| + var o = {};
|
| + o[toStringTag] = 1;
|
| + tagIs(o, "???");
|
| +
|
| + // The value of `toStringTag` property is one of
|
| + // ["Arguments", "Array", "Boolean", "Date",
|
| + // "Error", "Function", "Number", "RegExp", "String"]
|
| + var o = {};
|
| + ["Arguments", "Array", "Boolean", "Date", "Error",
|
| + "Function", "Number", "RegExp", "String"].forEach(function(tag){
|
| + o[toStringTag] = tag;
|
| + tagIs(o, "~" + tag);
|
| + });
|
| +})();
|
|
|