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

Side by Side Diff: test/mjsunit/es6/typedarray-of.js

Issue 1470193002: Array/TypedArray/ArrayBuffer method subclassing and @@species (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase Created 4 years, 11 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
« no previous file with comments | « src/runtime/runtime-typedarray.cc ('k') | test/mjsunit/harmony/species.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // Based on Mozilla Array.of() tests at http://dxr.mozilla.org/mozilla-central/s ource/js/src/jit-test/tests/collections 5 // Based on Mozilla Array.of() tests at http://dxr.mozilla.org/mozilla-central/s ource/js/src/jit-test/tests/collections
6 6
7 'use strict';
8
7 var typedArrayConstructors = [ 9 var typedArrayConstructors = [
8 Uint8Array, 10 Uint8Array,
9 Int8Array, 11 Int8Array,
10 Uint16Array, 12 Uint16Array,
11 Int16Array, 13 Int16Array,
12 Uint32Array, 14 Uint32Array,
13 Int32Array, 15 Int32Array,
14 Uint8ClampedArray, 16 Uint8ClampedArray,
15 Float32Array, 17 Float32Array,
16 Float64Array]; 18 Float64Array];
(...skipping 27 matching lines...) Expand all
44 } 46 }
45 47
46 var aux = []; 48 var aux = [];
47 for (var i = 0; i < 100; i++) 49 for (var i = 0; i < 100; i++)
48 aux[i] = i; 50 aux[i] = i;
49 51
50 a = constructor.of.apply(constructor, aux); 52 a = constructor.of.apply(constructor, aux);
51 assertEquals(aux.length, a.length); 53 assertEquals(aux.length, a.length);
52 assertArrayEquals(aux, a); 54 assertArrayEquals(aux, a);
53 55
54 // %TypedArray%.of can be transplanted to other constructors. 56 // %TypedArray%.of can be called on subclasses of TypedArrays
55 var hits = 0; 57 var hits = 0;
56 function Bag(length) { 58 class Bag extends constructor {
57 assertEquals(arguments.length, 1); 59 constructor(length) {
58 assertEquals(length, 2); 60 super(length);
59 this.length = length; 61 assertEquals(arguments.length, 1);
60 hits++; 62 assertEquals(length, 2);
63 hits++;
64 }
61 } 65 }
62 Bag.of = constructor.of;
63 66
64 hits = 0; 67 hits = 0;
65 a = Bag.of("zero", "one"); 68 a = Bag.of(5, 6);
66 assertEquals(1, hits); 69 assertEquals(1, hits);
67 assertEquals(2, a.length); 70 assertEquals(2, a.length);
68 assertArrayEquals(["zero", "one"], a); 71 assertArrayEquals([5, 6], a);
69 assertEquals(Bag.prototype, a.__proto__); 72 assertEquals(Bag.prototype, a.__proto__);
70 73
71 hits = 0; 74 hits = 0;
72 actual = constructor.of.call(Bag, "zero", "one"); 75 var actual = constructor.of.call(Bag, 5, 6);
73 assertEquals(1, hits); 76 assertEquals(1, hits);
74 assertEquals(2, a.length); 77 assertEquals(2, a.length);
75 assertArrayEquals(["zero", "one"], a); 78 assertArrayEquals([5, 6], a);
76 assertEquals(Bag.prototype, a.__proto__); 79 assertEquals(Bag.prototype, a.__proto__);
77 80
78 // %TypedArray%.of does not trigger prototype setters. 81 // %TypedArray%.of does not trigger prototype setters.
79 // (It defines elements rather than assigning to them.) 82 // (It defines elements rather than assigning to them.)
80 var status = "pass"; 83 var status = "pass";
81 Object.defineProperty(constructor.prototype, "0", { 84 Object.defineProperty(constructor.prototype, "0", {
82 set: function(v) { status = "fail"; } 85 set: function(v) { status = "fail"; }
83 }); 86 });
84 assertEquals(1, constructor.of(1)[0], 1); 87 assertEquals(1, constructor.of(1)[0], 1);
85 assertEquals("pass", status); 88 assertEquals("pass", status);
86 89
87 // Note that %TypedArray%.of does not trigger "length" setter itself, as 90 // Note that %TypedArray%.of does not trigger "length" setter itself, as
88 // it relies on the constructor to set "length" to the value passed to it. 91 // it relies on the constructor to set "length" to the value passed to it.
89 // If the constructor does not assign "length", the setter should not be 92 // If the constructor does not assign "length", the setter should not be
90 // invoked. 93 // invoked.
91 94
92 // Setter on the newly created object. 95 // Setter on the newly created object.
93 function Pack() { 96 class Pack extends constructor {
94 Object.defineProperty(this, "length", { 97 constructor(length) {
95 set: function (v) { status = "fail"; } 98 super(length);
96 }); 99 Object.defineProperty(this, "length", {
100 set: function (v) { status = "fail"; }
101 });
102 }
97 } 103 }
98 Pack.of = constructor.of; 104 var pack = Pack.of(5, 6, 7, 8);
99 var pack = Pack.of("wolves", "cards", "cigarettes", "lies");
100 assertEquals("pass", status); 105 assertEquals("pass", status);
101 106
102 // when the setter is on the new object's prototype 107 // when the setter is on the new object's prototype
103 function Bevy() {} 108 class Bevy extends constructor {}
104 Object.defineProperty(Bevy.prototype, "length", { 109 Object.defineProperty(Bevy.prototype, "length", {
105 set: function (v) { status = "fail"; } 110 set: function (v) { status = "fail"; }
106 }); 111 });
107 Bevy.of = constructor.of; 112 var bevy = Bevy.of(3);
108 var bevy = Bevy.of("quail");
109 assertEquals("pass", status); 113 assertEquals("pass", status);
110 114
111 // Check superficial features of %TypedArray%.of. 115 // Check superficial features of %TypedArray%.of.
112 var desc = Object.getOwnPropertyDescriptor(constructor.__proto__, "of"); 116 var desc = Object.getOwnPropertyDescriptor(constructor.__proto__, "of");
113 117
114 assertEquals(desc.configurable, false); 118 assertEquals(desc.configurable, false);
115 assertEquals(desc.enumerable, false); 119 assertEquals(desc.enumerable, false);
116 assertEquals(desc.writable, false); 120 assertEquals(desc.writable, false);
117 assertEquals(constructor.of.length, 0); 121 assertEquals(constructor.of.length, 0);
118 122
119 // %TypedArray%.of is not a constructor. 123 // %TypedArray%.of is not a constructor.
120 assertThrows(function() { new constructor.of(); }, TypeError); 124 assertThrows(function() { new constructor.of(); }, TypeError);
121 125
122 // For receivers which are not constructors %TypedArray%.of does not 126 // For receivers which are not constructors %TypedArray%.of does not
123 // allocate a typed array using a default constructor, but throws an 127 // allocate a typed array using a default constructor, but throws an
124 // exception. Note that this is different from Array.of, which uses 128 // exception. Note that this is different from Array.of, which uses
125 // Array as default constructor. 129 // Array as default constructor.
126 for (var x of [undefined, null, false, true, "cow", 42, 3.14]) { 130 for (var x of [undefined, null, false, true, "cow", 42, 3.14]) {
127 assertThrows(function () { constructor.of.call(x); }, TypeError); 131 assertThrows(function () { constructor.of.call(x); }, TypeError);
128 } 132 }
129 } 133 }
130 134
131 for (var constructor of typedArrayConstructors) { 135 for (var constructor of typedArrayConstructors) {
132 TestTypedArrayOf(constructor); 136 TestTypedArrayOf(constructor);
133 } 137 }
OLDNEW
« no previous file with comments | « src/runtime/runtime-typedarray.cc ('k') | test/mjsunit/harmony/species.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698