| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Flags: --harmony-proxies --harmony-reflect | 5 // Flags: --harmony-proxies --harmony-reflect |
| 6 | 6 |
| 7 (function testArrayConcatArity() { | 7 (function testArrayConcatArity() { |
| 8 "use strict"; | 8 "use strict"; |
| 9 assertEquals(1, Array.prototype.concat.length); | 9 assertEquals(1, Array.prototype.concat.length); |
| 10 })(); | 10 })(); |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 var obj = new Proxy(target, handler); | 804 var obj = new Proxy(target, handler); |
| 805 | 805 |
| 806 log.length = 0; | 806 log.length = 0; |
| 807 assertEquals([obj], [].concat(obj)); | 807 assertEquals([obj], [].concat(obj)); |
| 808 assertEquals(1, log.length); | 808 assertEquals(1, log.length); |
| 809 for (var i in log) assertSame(target, log[i][1]); | 809 for (var i in log) assertSame(target, log[i][1]); |
| 810 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[0]); | 810 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[0]); |
| 811 | 811 |
| 812 log.length = 0; | 812 log.length = 0; |
| 813 assertEquals([obj], Array.prototype.concat.apply(obj)); | 813 assertEquals([obj], Array.prototype.concat.apply(obj)); |
| 814 assertEquals(1, log.length); | 814 assertEquals(2, log.length); // An extra read for the constructor |
| 815 for (var i in log) assertSame(target, log[i][1]); | 815 for (var i in log) assertSame(target, log[i][1]); |
| 816 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[0]); | 816 assertEquals(["get", target, "constructor", obj], log[0]); |
| 817 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[1]); |
| 817 })(); | 818 })(); |
| 818 | 819 |
| 819 | 820 |
| 820 (function testSpreadableArrayLikeProxy() { | 821 (function testSpreadableArrayLikeProxy() { |
| 821 var target = ["a", "b"]; | 822 var target = ["a", "b"]; |
| 822 target[Symbol.isConcatSpreadable] = undefined; | 823 target[Symbol.isConcatSpreadable] = undefined; |
| 823 var obj = new Proxy(target, handler); | 824 var obj = new Proxy(target, handler); |
| 824 | 825 |
| 825 log.length = 0; | 826 log.length = 0; |
| 826 assertEquals(["a", "b"], [].concat(obj)); | 827 assertEquals(["a", "b"], [].concat(obj)); |
| 827 assertEquals(6, log.length); | 828 assertEquals(6, log.length); |
| 828 for (var i in log) assertSame(target, log[i][1]); | 829 for (var i in log) assertSame(target, log[i][1]); |
| 829 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[0]); | 830 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[0]); |
| 830 assertEquals(["get", target, "length", obj], log[1]); | 831 assertEquals(["get", target, "length", obj], log[1]); |
| 831 assertEquals(["has", target, "0"], log[2]); | 832 assertEquals(["has", target, "0"], log[2]); |
| 832 assertEquals(["get", target, "0", obj], log[3]); | 833 assertEquals(["get", target, "0", obj], log[3]); |
| 833 assertEquals(["has", target, "1"], log[4]); | 834 assertEquals(["has", target, "1"], log[4]); |
| 834 assertEquals(["get", target, "1", obj], log[5]); | 835 assertEquals(["get", target, "1", obj], log[5]); |
| 835 | 836 |
| 836 log.length = 0; | 837 log.length = 0; |
| 837 assertEquals(["a", "b"], Array.prototype.concat.apply(obj)); | 838 assertEquals(["a", "b"], Array.prototype.concat.apply(obj)); |
| 838 assertEquals(6, log.length); | 839 assertEquals(7, log.length); |
| 839 for (var i in log) assertSame(target, log[i][1]); | 840 for (var i in log) assertSame(target, log[i][1]); |
| 840 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[0]); | 841 assertEquals(["get", target, "constructor", obj], log[0]); |
| 841 assertEquals(["get", target, "length", obj], log[1]); | 842 assertEquals(["get", target, Symbol.isConcatSpreadable, obj], log[1]); |
| 842 assertEquals(["has", target, "0"], log[2]); | 843 assertEquals(["get", target, "length", obj], log[2]); |
| 843 assertEquals(["get", target, "0", obj], log[3]); | 844 assertEquals(["has", target, "0"], log[3]); |
| 844 assertEquals(["has", target, "1"], log[4]); | 845 assertEquals(["get", target, "0", obj], log[4]); |
| 845 assertEquals(["get", target, "1", obj], log[5]); | 846 assertEquals(["has", target, "1"], log[5]); |
| 847 assertEquals(["get", target, "1", obj], log[6]); |
| 846 })(); | 848 })(); |
| 847 | 849 |
| 848 | 850 |
| 849 (function testSpreadableArrayLikeProxyWithNontrivialLength() { | 851 (function testSpreadableArrayLikeProxyWithNontrivialLength() { |
| 850 var getTrap = function(t, key) { | 852 var getTrap = function(t, key) { |
| 851 if (key === "length") return {[Symbol.toPrimitive]() {return 3}}; | 853 if (key === "length") return {[Symbol.toPrimitive]() {return 3}}; |
| 852 if (key === "2") return "baz"; | 854 if (key === "2") return "baz"; |
| 853 if (key === "3") return "bar"; | 855 if (key === "3") return "bar"; |
| 854 }; | 856 }; |
| 855 var target = []; | 857 var target = []; |
| 856 var obj = new Proxy(target, {get: getTrap, has: () => true}); | 858 var obj = new Proxy(target, {get: getTrap, has: () => true}); |
| 857 | 859 |
| 858 assertEquals([undefined, undefined, "baz"], [].concat(obj)); | 860 assertEquals([undefined, undefined, "baz"], [].concat(obj)); |
| 859 assertEquals([undefined, undefined, "baz"], Array.prototype.concat.apply(obj)) | 861 assertEquals([undefined, undefined, "baz"], Array.prototype.concat.apply(obj)) |
| 860 })(); | 862 })(); |
| 861 | 863 |
| 862 | 864 |
| 863 (function testSpreadableArrayLikeProxyWithBogusLength() { | 865 (function testSpreadableArrayLikeProxyWithBogusLength() { |
| 864 var getTrap = function(t, key) { | 866 var getTrap = function(t, key) { |
| 865 if (key === "length") return Symbol(); | 867 if (key === "length") return Symbol(); |
| 866 if (key === "2") return "baz"; | 868 if (key === "2") return "baz"; |
| 867 if (key === "3") return "bar"; | 869 if (key === "3") return "bar"; |
| 868 }; | 870 }; |
| 869 var target = []; | 871 var target = []; |
| 870 var obj = new Proxy(target, {get: getTrap, has: () => true}); | 872 var obj = new Proxy(target, {get: getTrap, has: () => true}); |
| 871 | 873 |
| 872 assertThrows(() => [].concat(obj), TypeError); | 874 assertThrows(() => [].concat(obj), TypeError); |
| 873 assertThrows(() => Array.prototype.concat.apply(obj), TypeError); | 875 assertThrows(() => Array.prototype.concat.apply(obj), TypeError); |
| 874 })(); | 876 })(); |
| OLD | NEW |