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

Side by Side Diff: test/mjsunit/es6/unscopables.js

Issue 807893002: ES6: Update unscopables to match spec (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: cleanup Created 6 years 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/contexts.cc ('k') | test/mjsunit/harmony/proxies-with-unscopables.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 var global = this; 5 var global = this;
6 var globalProto = Object.getPrototypeOf(global); 6 var globalProto = Object.getPrototypeOf(global);
7 7
8 // Number of objects being tested. There is an assert ensuring this is correct. 8 // Number of objects being tested. There is an assert ensuring this is correct.
9 var objectCount = 21; 9 var objectCount = 21;
10 10
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 assertEquals(5, y); 136 assertEquals(5, y);
137 assertEquals(3, z); 137 assertEquals(3, z);
138 } 138 }
139 139
140 object[Symbol.unscopables] = {x: 0, y: true}; 140 object[Symbol.unscopables] = {x: 0, y: true};
141 with (object) { 141 with (object) {
142 assertEquals(1, x); 142 assertEquals(1, x);
143 assertEquals(2, y); 143 assertEquals(2, y);
144 assertEquals(3, z); 144 assertEquals(3, z);
145 } 145 }
146
147 object[Symbol.unscopables] = {x: 0, y: undefined};
148 with (object) {
149 assertEquals(1, x);
150 assertEquals(5, y);
151 assertEquals(3, z);
152 }
146 } 153 }
147 runTest(TestBasics); 154 runTest(TestBasics);
148 155
149 156
150 function TestUnscopableChain(object) { 157 function TestUnscopableChain(object) {
151 var x = 1; 158 var x = 1;
152 object.x = 2; 159 object.x = 2;
153 160
154 with (object) { 161 with (object) {
155 assertEquals(2, x); 162 assertEquals(2, x);
156 } 163 }
157 164
158 object[Symbol.unscopables] = { 165 object[Symbol.unscopables] = {
159 __proto__: {x: true} 166 __proto__: {x: true}
160 }; 167 };
161 with (object) { 168 with (object) {
162 assertEquals(1, x); 169 assertEquals(1, x);
163 } 170 }
171
172 object[Symbol.unscopables] = {
173 __proto__: {x: undefined}
174 };
175 with (object) {
176 assertEquals(2, x);
177 }
164 } 178 }
165 runTest(TestUnscopableChain); 179 runTest(TestUnscopableChain);
166 180
167 181
168 function TestBasicsSet(object) { 182 function TestBasicsSet(object) {
169 var x = 1; 183 var x = 1;
170 object.x = 2; 184 object.x = 2;
171 185
172 with (object) { 186 with (object) {
173 assertEquals(2, x); 187 assertEquals(2, x);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 assertEquals(3, z); 229 assertEquals(3, z);
216 } 230 }
217 231
218 proto[Symbol.unscopables] = {y: true}; 232 proto[Symbol.unscopables] = {y: true};
219 object[Symbol.unscopables] = {x: true}; 233 object[Symbol.unscopables] = {x: true};
220 with (object) { 234 with (object) {
221 assertEquals(1, x); 235 assertEquals(1, x);
222 assertEquals(5, y); 236 assertEquals(5, y);
223 assertEquals(3, z); 237 assertEquals(3, z);
224 } 238 }
239
240 proto[Symbol.unscopables] = {y: true};
241 object[Symbol.unscopables] = {x: true, y: undefined};
242 with (object) {
243 assertEquals(1, x);
244 assertEquals(5, y);
245 assertEquals(3, z);
246 }
225 } 247 }
226 runTest(TestOnProto); 248 runTest(TestOnProto);
227 249
228 250
229 function TestSetBlockedOnProto(object, proto) { 251 function TestSetBlockedOnProto(object, proto) {
230 var x = 1; 252 var x = 1;
231 object.x = 2; 253 object.x = 2;
232 254
233 with (object) { 255 with (object) {
234 assertEquals(2, x); 256 assertEquals(2, x);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 with (object) { 356 with (object) {
335 for (var i = 0; i < 1000; i++) { 357 for (var i = 0; i < 1000; i++) {
336 if (i === 500) delete object[Symbol.unscopables].x; 358 if (i === 500) delete object[Symbol.unscopables].x;
337 assertEquals(i < 500 ? 1 : 2, x); 359 assertEquals(i < 500 ? 1 : 2, x);
338 } 360 }
339 } 361 }
340 } 362 }
341 TestChangeDuringWithWithPossibleOptimization4({}); 363 TestChangeDuringWithWithPossibleOptimization4({});
342 364
343 365
366 function TestChangeDuringWithWithPossibleOptimization4(object) {
367 var x = 1;
368 object.x = 2;
369 object[Symbol.unscopables] = {x: true};
370 with (object) {
371 for (var i = 0; i < 1000; i++) {
372 if (i === 500) object[Symbol.unscopables].x = undefined;
373 assertEquals(i < 500 ? 1 : 2, x);
374 }
375 }
376 }
377 TestChangeDuringWithWithPossibleOptimization4({});
378
379
344 function TestAccessorReceiver(object, proto) { 380 function TestAccessorReceiver(object, proto) {
345 var x = 'local'; 381 var x = 'local';
346 382
347 Object.defineProperty(proto, 'x', { 383 Object.defineProperty(proto, 'x', {
348 get: function() { 384 get: function() {
349 assertEquals(object, this); 385 assertEquals(object, this);
350 return this.x_; 386 return this.x_;
351 }, 387 },
352 configurable: true 388 configurable: true
353 }); 389 });
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 assertEquals(2, x); 561 assertEquals(2, x);
526 } 562 }
527 } 563 }
528 runTest(TestObjectsAsUnscopables); 564 runTest(TestObjectsAsUnscopables);
529 565
530 566
531 function TestAccessorOnUnscopables(object) { 567 function TestAccessorOnUnscopables(object) {
532 var x = 1; 568 var x = 1;
533 object.x = 2; 569 object.x = 2;
534 570
571 var calls = 0;
535 var unscopables = { 572 var unscopables = {
536 get x() { 573 get x() {
537 assertUnreachable(); 574 calls++;
575 return calls === 1 ? true : undefined;
538 } 576 }
539 }; 577 };
540 578
541 with (object) { 579 with (object) {
542 assertEquals(2, x); 580 assertEquals(2, x);
543 object[Symbol.unscopables] = unscopables; 581 object[Symbol.unscopables] = unscopables;
544 assertEquals(1, x); 582 assertEquals(1, x);
583 assertEquals(2, x);
545 } 584 }
585 assertEquals(2, calls);
546 } 586 }
547 runTest(TestAccessorOnUnscopables); 587 runTest(TestAccessorOnUnscopables);
548 588
549 589
550 function TestLengthUnscopables(object, proto) { 590 function TestLengthUnscopables(object, proto) {
551 var length = 2; 591 var length = 2;
552 with (object) { 592 with (object) {
553 assertEquals(1, length); 593 assertEquals(1, length);
554 object[Symbol.unscopables] = {length: true}; 594 object[Symbol.unscopables] = {length: true};
555 assertEquals(2, length); 595 assertEquals(2, length);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 throw new CustomError(); 692 throw new CustomError();
653 } 693 }
654 }); 694 });
655 assertThrows(function() { 695 assertThrows(function() {
656 with (object) { 696 with (object) {
657 x; 697 x;
658 } 698 }
659 }, CustomError); 699 }, CustomError);
660 } 700 }
661 TestGetUnscopablesGetterThrows(); 701 TestGetUnscopablesGetterThrows();
702
703
704 function TestGetUnscopablesGetterThrows2() {
705 var object = {
706 get x() {
707 assertUnreachable();
708 }
709 };
710 function CustomError() {}
711
712 object[Symbol.unscopables] = {
713 get x() {
714 throw new CustomError();
715 }
716 };
717 assertThrows(function() {
718 with (object) {
719 x;
720 }
721 }, CustomError);
722 }
723 TestGetUnscopablesGetterThrows();
OLDNEW
« no previous file with comments | « src/contexts.cc ('k') | test/mjsunit/harmony/proxies-with-unscopables.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698