diff options
author | Ben Noordhuis <info@bnoordhuis.nl> | 2014-11-14 00:52:27 +0100 |
---|---|---|
committer | Ben Noordhuis <info@bnoordhuis.nl> | 2014-11-14 16:34:58 +0100 |
commit | 5d1b6d3e0fa4b97a490ef964be48aed9872e3ec1 (patch) | |
tree | ab5f510c4d83b175681de629395525bf7ec7cedb /deps/v8/test/mjsunit/es6 | |
parent | 3b3d89bad26f5dfebe73fef6ae284ee78acbd5c9 (diff) | |
download | android-node-v8-5d1b6d3e0fa4b97a490ef964be48aed9872e3ec1.tar.gz android-node-v8-5d1b6d3e0fa4b97a490ef964be48aed9872e3ec1.tar.bz2 android-node-v8-5d1b6d3e0fa4b97a490ef964be48aed9872e3ec1.zip |
deps: upgrade v8 to 3.30.37
Diffstat (limited to 'deps/v8/test/mjsunit/es6')
-rw-r--r-- | deps/v8/test/mjsunit/es6/arguments-iterator.js | 20 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/array-iterator.js | 28 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/collection-iterator.js | 20 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/collections.js | 70 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/generators-objects.js | 3 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/json.js | 15 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/math.js | 15 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/mirror-iterators.js | 62 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/numeric-literals.js | 87 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/object-tostring.js | 133 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/promises.js | 14 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/string-iterator.js | 7 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/symbols.js | 10 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/es6/typed-array-iterator.js | 4 |
14 files changed, 457 insertions, 31 deletions
diff --git a/deps/v8/test/mjsunit/es6/arguments-iterator.js b/deps/v8/test/mjsunit/es6/arguments-iterator.js index a65bf8bad5..32d4b11ee1 100644 --- a/deps/v8/test/mjsunit/es6/arguments-iterator.js +++ b/deps/v8/test/mjsunit/es6/arguments-iterator.js @@ -16,8 +16,8 @@ function TestDirectArgumentsIteratorProperty() { assertTrue(descriptor.writable); assertFalse(descriptor.enumerable); assertTrue(descriptor.configurable); - assertEquals(descriptor.value, [].values); - assertEquals(arguments[Symbol.iterator], [].values); + assertEquals(descriptor.value, [][Symbol.iterator]); + assertEquals(arguments[Symbol.iterator], [][Symbol.iterator]); } TestDirectArgumentsIteratorProperty(); @@ -26,7 +26,7 @@ function TestIndirectArgumentsIteratorProperty() { var o = arguments; assertTrue(o.hasOwnProperty(Symbol.iterator)); assertFalse(o.propertyIsEnumerable(Symbol.iterator)); - assertEquals(o[Symbol.iterator], [].values); + assertEquals(o[Symbol.iterator], [][Symbol.iterator]); } TestIndirectArgumentsIteratorProperty(); @@ -204,27 +204,27 @@ function TestArgumentsAsProto() { "use strict"; var o = {__proto__:arguments}; - assertSame([].values, o[Symbol.iterator]); + assertSame([][Symbol.iterator], o[Symbol.iterator]); // Make o dict-mode. %OptimizeObjectForAddingMultipleProperties(o, 0); assertFalse(o.hasOwnProperty(Symbol.iterator)); - assertSame([].values, o[Symbol.iterator]); + assertSame([][Symbol.iterator], o[Symbol.iterator]); o[Symbol.iterator] = 10; assertTrue(o.hasOwnProperty(Symbol.iterator)); assertEquals(10, o[Symbol.iterator]); - assertSame([].values, arguments[Symbol.iterator]); + assertSame([][Symbol.iterator], arguments[Symbol.iterator]); // Frozen o. o = Object.freeze({__proto__:arguments}); - assertSame([].values, o[Symbol.iterator]); + assertSame([][Symbol.iterator], o[Symbol.iterator]); assertFalse(o.hasOwnProperty(Symbol.iterator)); - assertSame([].values, o[Symbol.iterator]); + assertSame([][Symbol.iterator], o[Symbol.iterator]); // This should throw, but currently it doesn't, because // ExecutableAccessorInfo callbacks don't see the current strict mode. // See note in accessors.cc:SetPropertyOnInstanceIfInherited. o[Symbol.iterator] = 10; assertFalse(o.hasOwnProperty(Symbol.iterator)); - assertEquals([].values, o[Symbol.iterator]); - assertSame([].values, arguments[Symbol.iterator]); + assertEquals([][Symbol.iterator], o[Symbol.iterator]); + assertSame([][Symbol.iterator], arguments[Symbol.iterator]); } TestArgumentsAsProto(); diff --git a/deps/v8/test/mjsunit/es6/array-iterator.js b/deps/v8/test/mjsunit/es6/array-iterator.js index b24ee5712f..767991eafe 100644 --- a/deps/v8/test/mjsunit/es6/array-iterator.js +++ b/deps/v8/test/mjsunit/es6/array-iterator.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --allow-natives-syntax +// Flags: --allow-natives-syntax --harmony-tostring var NONE = 0; @@ -45,11 +45,8 @@ function assertHasOwnProperty(object, name, attrs) { function TestArrayPrototype() { assertHasOwnProperty(Array.prototype, 'entries', DONT_ENUM); - assertHasOwnProperty(Array.prototype, 'values', DONT_ENUM); assertHasOwnProperty(Array.prototype, 'keys', DONT_ENUM); assertHasOwnProperty(Array.prototype, Symbol.iterator, DONT_ENUM); - - assertEquals(Array.prototype.values, Array.prototype[Symbol.iterator]); } TestArrayPrototype(); @@ -61,7 +58,7 @@ function assertIteratorResult(value, done, result) { function TestValues() { var array = ['a', 'b', 'c']; - var iterator = array.values(); + var iterator = array[Symbol.iterator](); assertIteratorResult('a', false, iterator.next()); assertIteratorResult('b', false, iterator.next()); assertIteratorResult('c', false, iterator.next()); @@ -75,7 +72,7 @@ TestValues(); function TestValuesMutate() { var array = ['a', 'b', 'c']; - var iterator = array.values(); + var iterator = array[Symbol.iterator](); assertIteratorResult('a', false, iterator.next()); assertIteratorResult('b', false, iterator.next()); assertIteratorResult('c', false, iterator.next()); @@ -142,17 +139,17 @@ TestEntriesMutate(); function TestArrayIteratorPrototype() { var array = []; - var iterator = array.values(); + var iterator = array.keys(); var ArrayIteratorPrototype = iterator.__proto__; - assertEquals(ArrayIteratorPrototype, array.values().__proto__); + assertEquals(ArrayIteratorPrototype, array[Symbol.iterator]().__proto__); assertEquals(ArrayIteratorPrototype, array.keys().__proto__); assertEquals(ArrayIteratorPrototype, array.entries().__proto__); assertEquals(Object.prototype, ArrayIteratorPrototype.__proto__); - assertEquals('Array Iterator', %_ClassOf(array.values())); + assertEquals('Array Iterator', %_ClassOf(array[Symbol.iterator]())); assertEquals('Array Iterator', %_ClassOf(array.keys())); assertEquals('Array Iterator', %_ClassOf(array.entries())); @@ -161,6 +158,15 @@ function TestArrayIteratorPrototype() { Object.getOwnPropertyNames(ArrayIteratorPrototype)); assertHasOwnProperty(ArrayIteratorPrototype, 'next', DONT_ENUM); assertHasOwnProperty(ArrayIteratorPrototype, Symbol.iterator, DONT_ENUM); + + assertEquals("[object Array Iterator]", + Object.prototype.toString.call(iterator)); + assertEquals("Array Iterator", ArrayIteratorPrototype[Symbol.toStringTag]); + var desc = Object.getOwnPropertyDescriptor( + ArrayIteratorPrototype, Symbol.toStringTag); + assertTrue(desc.configurable); + assertFalse(desc.writable); + assertEquals("Array Iterator", desc.value); } TestArrayIteratorPrototype(); @@ -169,7 +175,7 @@ function TestForArrayValues() { var buffer = []; var array = [0, 'a', true, false, null, /* hole */, undefined, NaN]; var i = 0; - for (var value of array.values()) { + for (var value of array[Symbol.iterator]()) { buffer[i++] = value; } @@ -239,7 +245,7 @@ TestForArrayValues(); function TestNonOwnSlots() { var array = [0]; - var iterator = array.values(); + var iterator = array[Symbol.iterator](); var object = {__proto__: iterator}; assertThrows(function() { diff --git a/deps/v8/test/mjsunit/es6/collection-iterator.js b/deps/v8/test/mjsunit/es6/collection-iterator.js index 5503fe58c0..18b3f1a5e5 100644 --- a/deps/v8/test/mjsunit/es6/collection-iterator.js +++ b/deps/v8/test/mjsunit/es6/collection-iterator.js @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// Flags: --allow-natives-syntax +// Flags: --allow-natives-syntax --harmony-tostring (function TestSetIterator() { @@ -19,6 +19,15 @@ assertEquals(new Set().values().__proto__, SetIteratorPrototype); assertEquals(new Set().entries().__proto__, SetIteratorPrototype); + + assertEquals("[object Set Iterator]", + Object.prototype.toString.call(iter)); + assertEquals("Set Iterator", SetIteratorPrototype[Symbol.toStringTag]); + var desc = Object.getOwnPropertyDescriptor( + SetIteratorPrototype, Symbol.toStringTag); + assertTrue(desc.configurable); + assertFalse(desc.writable); + assertEquals("Set Iterator", desc.value); })(); @@ -120,6 +129,15 @@ assertEquals(new Map().values().__proto__, MapIteratorPrototype); assertEquals(new Map().keys().__proto__, MapIteratorPrototype); assertEquals(new Map().entries().__proto__, MapIteratorPrototype); + + assertEquals("[object Map Iterator]", + Object.prototype.toString.call(iter)); + assertEquals("Map Iterator", MapIteratorPrototype[Symbol.toStringTag]); + var desc = Object.getOwnPropertyDescriptor( + MapIteratorPrototype, Symbol.toStringTag); + assertTrue(desc.configurable); + assertFalse(desc.writable); + assertEquals("Map Iterator", desc.value); })(); diff --git a/deps/v8/test/mjsunit/es6/collections.js b/deps/v8/test/mjsunit/es6/collections.js index 940c0b9d1f..60ce46b2e5 100644 --- a/deps/v8/test/mjsunit/es6/collections.js +++ b/deps/v8/test/mjsunit/es6/collections.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --expose-gc --allow-natives-syntax +// Flags: --expose-gc --allow-natives-syntax --harmony-tostring function assertSize(expected, collection) { @@ -300,7 +300,7 @@ assertEquals("WeakSet", WeakSet.name); function TestPrototype(C) { assertTrue(C.prototype instanceof Object); assertEquals({ - value: {}, + value: C.prototype, writable: false, enumerable: false, configurable: false @@ -691,6 +691,33 @@ for (var i = 9; i >= 0; i--) { assertEquals(4950, accumulated); })(); + +(function TestSetForEachReceiverAsObject() { + var set = new Set(["1", "2"]); + + // Create a new object in each function call when receiver is a + // primitive value. See ECMA-262, Annex C. + var a = []; + set.forEach(function() { a.push(this) }, ""); + assertTrue(a[0] !== a[1]); + + // Do not create a new object otherwise. + a = []; + set.forEach(function() { a.push(this); }, {}); + assertEquals(a[0], a[1]); +})(); + + +(function TestSetForEachReceiverAsObjectInStrictMode() { + var set = new Set(["1", "2"]); + + // In strict mode primitive values should not be coerced to an object. + var a = []; + set.forEach(function() { 'use strict'; a.push(this); }, ""); + assertTrue(a[0] === "" && a[0] === a[1]); +})(); + + (function TestMapForEachInvalidTypes() { assertThrows(function() { Map.prototype.map.forEach.call({}); @@ -998,6 +1025,36 @@ for (var i = 9; i >= 0; i--) { })(); +(function TestMapForEachReceiverAsObject() { + var map = new Map(); + map.set("key1", "value1"); + map.set("key2", "value2"); + + // Create a new object in each function call when receiver is a + // primitive value. See ECMA-262, Annex C. + var a = []; + map.forEach(function() { a.push(this) }, ""); + assertTrue(a[0] !== a[1]); + + // Do not create a new object otherwise. + a = []; + map.forEach(function() { a.push(this); }, {}); + assertEquals(a[0], a[1]); +})(); + + +(function TestMapForEachReceiverAsObjectInStrictMode() { + var map = new Map(); + map.set("key1", "value1"); + map.set("key2", "value2"); + + // In strict mode primitive values should not be coerced to an object. + var a = []; + map.forEach(function() { 'use strict'; a.push(this); }, ""); + assertTrue(a[0] === "" && a[0] === a[1]); +})(); + + // Allows testing iterator-based constructors easily. var oneAndTwo = new Map(); var k0 = {key: 0}; @@ -1366,3 +1423,12 @@ function TestMapConstructorIterableValue(ctor) { } TestMapConstructorIterableValue(Map); TestMapConstructorIterableValue(WeakMap); + +function TestCollectionToString(C) { + assertEquals("[object " + C.name + "]", + Object.prototype.toString.call(new C())); +} +TestCollectionToString(Map); +TestCollectionToString(Set); +TestCollectionToString(WeakMap); +TestCollectionToString(WeakSet); diff --git a/deps/v8/test/mjsunit/es6/generators-objects.js b/deps/v8/test/mjsunit/es6/generators-objects.js index 8a052ff5e6..25bd0de79d 100644 --- a/deps/v8/test/mjsunit/es6/generators-objects.js +++ b/deps/v8/test/mjsunit/es6/generators-objects.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --harmony-scoping --allow-natives-syntax +// Flags: --harmony-scoping --allow-natives-syntax --harmony-tostring // Test instantations of generators. @@ -66,6 +66,7 @@ function TestGeneratorObject() { assertTrue(iter instanceof g); assertEquals("Generator", %_ClassOf(iter)); assertEquals("[object Generator]", String(iter)); + assertEquals("[object Generator]", Object.prototype.toString.call(iter)); assertEquals([], Object.getOwnPropertyNames(iter)); assertTrue(iter !== new g()); } diff --git a/deps/v8/test/mjsunit/es6/json.js b/deps/v8/test/mjsunit/es6/json.js new file mode 100644 index 0000000000..3fad08318f --- /dev/null +++ b/deps/v8/test/mjsunit/es6/json.js @@ -0,0 +1,15 @@ +// 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. + +// Flags: --harmony-tostring + +function testJSONToString() { + assertEquals('[object JSON]', "" + JSON); + assertEquals("JSON", JSON[Symbol.toStringTag]); + var desc = Object.getOwnPropertyDescriptor(JSON, Symbol.toStringTag); + assertTrue(desc.configurable); + assertFalse(desc.writable); + assertEquals("JSON", desc.value); +} +testJSONToString(); diff --git a/deps/v8/test/mjsunit/es6/math.js b/deps/v8/test/mjsunit/es6/math.js new file mode 100644 index 0000000000..3f76f1197a --- /dev/null +++ b/deps/v8/test/mjsunit/es6/math.js @@ -0,0 +1,15 @@ +// 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. + +// Flags: --harmony-tostring + +function testMathToString() { + assertEquals('[object Math]', "" + Math); + assertEquals("Math", Math[Symbol.toStringTag]); + var desc = Object.getOwnPropertyDescriptor(Math, Symbol.toStringTag); + assertTrue(desc.configurable); + assertFalse(desc.writable); + assertEquals("Math", desc.value); +} +testMathToString(); diff --git a/deps/v8/test/mjsunit/es6/mirror-iterators.js b/deps/v8/test/mjsunit/es6/mirror-iterators.js new file mode 100644 index 0000000000..02fe7ffde0 --- /dev/null +++ b/deps/v8/test/mjsunit/es6/mirror-iterators.js @@ -0,0 +1,62 @@ +// 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. + +// Flags: --expose-debug-as debug +// Test the mirror object for collection iterators. + +function testIteratorMirror(iter, offset, expected) { + while (offset-- > 0) iter.next(); + + var mirror = debug.MakeMirror(iter); + assertTrue(mirror.isIterator()); + + var preview = mirror.preview(); + assertArrayEquals(expected, preview); + + // Check that iterator has not changed after taking preview. + var values = []; + for (var i of iter) values.push(i); + assertArrayEquals(expected, values); +} + +var o1 = { foo: 1 }; +var o2 = { foo: 2 }; + +var map = new Map(); +map.set(41, 42); +map.set(o1, o2); + +testIteratorMirror(map.keys(), 0, [41, o1]); +testIteratorMirror(map.values(), 0, [42, o2]); +testIteratorMirror(map.entries(), 0, [[41, 42], [o1, o2]]); + +testIteratorMirror(map.keys(), 1, [o1]); +testIteratorMirror(map.values(), 1, [o2]); +testIteratorMirror(map.entries(), 1, [[o1, o2]]); + +testIteratorMirror(map.keys(), 2, []); +testIteratorMirror(map.values(), 2, []); +testIteratorMirror(map.entries(), 2, []); + +var set = new Set(); +set.add(41); +set.add(42); +set.add(o1); +set.add(o2); + +testIteratorMirror(set.keys(), 0, [41, 42, o1, o2]); +testIteratorMirror(set.values(), 0, [41, 42, o1, o2]); +testIteratorMirror(set.entries(), 0, [[41, 41], [42, 42], [o1, o1], [o2, o2]]); + +testIteratorMirror(set.keys(), 1, [42, o1, o2]); +testIteratorMirror(set.values(), 1, [42, o1, o2]); +testIteratorMirror(set.entries(), 1, [[42, 42], [o1, o1], [o2, o2]]); + +testIteratorMirror(set.keys(), 3, [o2]); +testIteratorMirror(set.values(), 3, [o2]); +testIteratorMirror(set.entries(), 3, [[o2, o2]]); + +testIteratorMirror(set.keys(), 5, []); +testIteratorMirror(set.values(), 5, []); +testIteratorMirror(set.entries(), 5, []); diff --git a/deps/v8/test/mjsunit/es6/numeric-literals.js b/deps/v8/test/mjsunit/es6/numeric-literals.js new file mode 100644 index 0000000000..7300f3e47e --- /dev/null +++ b/deps/v8/test/mjsunit/es6/numeric-literals.js @@ -0,0 +1,87 @@ +// Copyright 2013 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Flags: --harmony-numeric-literals + +function TestOctalLiteral() { + assertEquals(0, 0o0); + assertEquals(0, 0O0); + assertEquals(1, 0o1); + assertEquals(7, 0o7); + assertEquals(8, 0o10); + assertEquals(63, 0o77); +} +TestOctalLiteral(); + + +function TestOctalLiteralUsingNumberFunction() { + assertEquals(0, Number('0o0')); + assertEquals(0, Number('0O0')); + assertEquals(1, Number('0o1')); + assertEquals(7, Number('0o7')); + assertEquals(8, Number('0o10')); + assertEquals(63, Number('0o77')); +} +TestOctalLiteralUsingNumberFunction(); + + +function TestBinaryLiteral() { + assertEquals(0, 0b0); + assertEquals(0, 0B0); + assertEquals(1, 0b1); + assertEquals(2, 0b10); + assertEquals(3, 0b11); +} +TestBinaryLiteral(); + + +function TestBinaryLiteralUsingNumberFunction() { + assertEquals(0, Number('0b0')); + assertEquals(0, Number('0B0')); + assertEquals(1, Number('0b1')); + assertEquals(2, Number('0b10')); + assertEquals(3, Number('0b11')); +} +TestBinaryLiteralUsingNumberFunction(); + + +// parseInt should (probably) not support 0b and 0o. +// https://bugs.ecmascript.org/show_bug.cgi?id=1585 +function TestParseIntDoesNotSupportOctalNorBinary() { + assertEquals(0, parseInt('0o77')); + assertEquals(0, parseInt('0o77', 8)); + assertEquals(0, parseInt('0b11')); + assertEquals(0, parseInt('0b11', 2)); +} +TestParseIntDoesNotSupportOctalNorBinary(); + + +function TestParseFloatDoesNotSupportOctalNorBinary() { + assertEquals(0, parseFloat('0o77')); + assertEquals(0, parseFloat('0b11')); +} +TestParseFloatDoesNotSupportOctalNorBinary(); diff --git a/deps/v8/test/mjsunit/es6/object-tostring.js b/deps/v8/test/mjsunit/es6/object-tostring.js new file mode 100644 index 0000000000..26dff14b9d --- /dev/null +++ b/deps/v8/test/mjsunit/es6/object-tostring.js @@ -0,0 +1,133 @@ +// 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. + +// Flags: --harmony-tostring + +var global = this; + +var funs = { + Object: [ Object ], + Function: [ Function ], + Array: [ Array ], + String: [ String ], + Boolean: [ Boolean ], + Number: [ Number ], + Date: [ Date ], + RegExp: [ RegExp ], + Error: [ Error, TypeError, RangeError, SyntaxError, ReferenceError, + EvalError, URIError ] +} +for (f in funs) { + for (i in funs[f]) { + assertEquals("[object " + f + "]", + Object.prototype.toString.call(new funs[f][i]), + funs[f][i]); + assertEquals("[object Function]", + Object.prototype.toString.call(funs[f][i]), + funs[f][i]); + } +} + +function testToStringTag(className) { + // Using builtin toStringTags + var obj = {}; + obj[Symbol.toStringTag] = className; + assertEquals("[object ~" + className + "]", + Object.prototype.toString.call(obj)); + + // Getter throws + obj = {}; + Object.defineProperty(obj, Symbol.toStringTag, { + get: function() { throw className; } + }); + assertThrows(function() { + Object.prototype.toString.call(obj); + }, className); + + // Getter does not throw + obj = {}; + Object.defineProperty(obj, Symbol.toStringTag, { + get: function() { return className; } + }); + assertEquals("[object ~" + className + "]", + Object.prototype.toString.call(obj)); + + // Custom, non-builtin toStringTags + obj = {}; + obj[Symbol.toStringTag] = "X" + className; + assertEquals("[object X" + className + "]", + Object.prototype.toString.call(obj)); + + // With getter + obj = {}; + Object.defineProperty(obj, Symbol.toStringTag, { + get: function() { return "X" + className; } + }); + assertEquals("[object X" + className + "]", + Object.prototype.toString.call(obj)); + + // Undefined toStringTag should return [object className] + var obj = className === "Arguments" ? + (function() { return arguments; })() : new global[className]; + obj[Symbol.toStringTag] = undefined; + assertEquals("[object " + className + "]", + Object.prototype.toString.call(obj)); + + // With getter + var obj = className === "Arguments" ? + (function() { return arguments; })() : new global[className]; + Object.defineProperty(obj, Symbol.toStringTag, { + get: function() { return undefined; } + }); + assertEquals("[object " + className + "]", + Object.prototype.toString.call(obj)); +} + +[ + "Arguments", + "Array", + "Boolean", + "Date", + "Error", + "Function", + "Number", + "RegExp", + "String" +].forEach(testToStringTag); + +function testToStringTagNonString(value) { + var obj = {}; + obj[Symbol.toStringTag] = value; + assertEquals("[object ???]", Object.prototype.toString.call(obj)); + + // With getter + obj = {}; + Object.defineProperty(obj, Symbol.toStringTag, { + get: function() { return value; } + }); + assertEquals("[object ???]", Object.prototype.toString.call(obj)); +} + +[ + null, + function() {}, + [], + {}, + /regexp/, + 42, + Symbol("sym"), + new Date(), + (function() { return arguments; })(), + true, + new Error("oops"), + new String("str") +].forEach(testToStringTagNonString); + +function testObjectToStringPropertyDesc() { + var desc = Object.getOwnPropertyDescriptor(Object.prototype, "toString"); + assertTrue(desc.writable); + assertFalse(desc.enumerable); + assertTrue(desc.configurable); +} +testObjectToStringPropertyDesc(); diff --git a/deps/v8/test/mjsunit/es6/promises.js b/deps/v8/test/mjsunit/es6/promises.js index faf154ee0a..04059aa720 100644 --- a/deps/v8/test/mjsunit/es6/promises.js +++ b/deps/v8/test/mjsunit/es6/promises.js @@ -25,13 +25,21 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --allow-natives-syntax +// Flags: --allow-natives-syntax --harmony-tostring // Make sure we don't rely on functions patchable by monkeys. var call = Function.prototype.call.call.bind(Function.prototype.call) var observe = Object.observe; -var getOwnPropertyNames = Object.getOwnPropertyNames -var defineProperty = Object.defineProperty +var getOwnPropertyNames = Object.getOwnPropertyNames; +var defineProperty = Object.defineProperty; + + +(function() { + // Test before clearing global (fails otherwise) + assertEquals("[object Promise]", + Object.prototype.toString.call(new Promise(function() {}))); +})(); + function clear(o) { if (o === null || (typeof o !== 'object' && typeof o !== 'function')) return diff --git a/deps/v8/test/mjsunit/es6/string-iterator.js b/deps/v8/test/mjsunit/es6/string-iterator.js index e6bea6dfe7..769f549254 100644 --- a/deps/v8/test/mjsunit/es6/string-iterator.js +++ b/deps/v8/test/mjsunit/es6/string-iterator.js @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Flags: --harmony-tostring function TestStringPrototypeIterator() { assertTrue(String.prototype.hasOwnProperty(Symbol.iterator)); @@ -59,6 +60,12 @@ function TestStringIteratorPrototype() { assertArrayEquals(['next'], Object.getOwnPropertyNames(StringIteratorPrototype)); assertEquals('[object String Iterator]', "" + iterator); + assertEquals("String Iterator", StringIteratorPrototype[Symbol.toStringTag]); + var desc = Object.getOwnPropertyDescriptor( + StringIteratorPrototype, Symbol.toStringTag); + assertTrue(desc.configurable); + assertFalse(desc.writable); + assertEquals("String Iterator", desc.value); } TestStringIteratorPrototype(); diff --git a/deps/v8/test/mjsunit/es6/symbols.js b/deps/v8/test/mjsunit/es6/symbols.js index 60737af4b9..b9811f509e 100644 --- a/deps/v8/test/mjsunit/es6/symbols.js +++ b/deps/v8/test/mjsunit/es6/symbols.js @@ -25,7 +25,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// Flags: --expose-gc --allow-natives-syntax +// Flags: --expose-gc --allow-natives-syntax --harmony-tostring var symbols = [] @@ -501,3 +501,11 @@ function TestRegistry() { assertSame("x3", Symbol.keyFor(symbol3)) } TestRegistry() + + +function TestGetOwnPropertySymbolsOnPrimitives() { + assertEquals(Object.getOwnPropertySymbols(true), []); + assertEquals(Object.getOwnPropertySymbols(5000), []); + assertEquals(Object.getOwnPropertySymbols("OK"), []); +} +TestGetOwnPropertySymbolsOnPrimitives(); diff --git a/deps/v8/test/mjsunit/es6/typed-array-iterator.js b/deps/v8/test/mjsunit/es6/typed-array-iterator.js index a2e4906c19..9903b0abae 100644 --- a/deps/v8/test/mjsunit/es6/typed-array-iterator.js +++ b/deps/v8/test/mjsunit/es6/typed-array-iterator.js @@ -21,9 +21,9 @@ function TestTypedArrayPrototype(constructor) { assertFalse(constructor.prototype.propertyIsEnumerable(Symbol.iterator)); assertEquals(Array.prototype.entries, constructor.prototype.entries); - assertEquals(Array.prototype.values, constructor.prototype.values); + assertEquals(Array.prototype[Symbol.iterator], constructor.prototype.values); assertEquals(Array.prototype.keys, constructor.prototype.keys); - assertEquals(Array.prototype.values, constructor.prototype[Symbol.iterator]); + assertEquals(Array.prototype[Symbol.iterator], constructor.prototype[Symbol.iterator]); } constructors.forEach(TestTypedArrayPrototype); |