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

Side by Side Diff: test/mjsunit/harmony/object-observe.js

Issue 11820004: Object.observe: don't unnecessarily emit oldValue for reconfigurations of data properties (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 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 | Annotate | Revision Log
« src/objects.cc ('K') | « src/objects.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 delete obj.a; 364 delete obj.a;
365 Object.defineProperty(obj, "a", {value: 11, configurable: true}); 365 Object.defineProperty(obj, "a", {value: 11, configurable: true});
366 Object.deliverChangeRecords(observer.callback); 366 Object.deliverChangeRecords(observer.callback);
367 observer.assertCallbackRecords([ 367 observer.assertCallbackRecords([
368 { object: obj, name: "a", type: "updated", oldValue: 1 }, 368 { object: obj, name: "a", type: "updated", oldValue: 1 },
369 { object: obj, name: "a", type: "updated", oldValue: 2 }, 369 { object: obj, name: "a", type: "updated", oldValue: 2 },
370 { object: obj, name: "a", type: "deleted", oldValue: 3 }, 370 { object: obj, name: "a", type: "deleted", oldValue: 3 },
371 { object: obj, name: "a", type: "new" }, 371 { object: obj, name: "a", type: "new" },
372 { object: obj, name: "a", type: "updated", oldValue: 4 }, 372 { object: obj, name: "a", type: "updated", oldValue: 4 },
373 { object: obj, name: "a", type: "updated", oldValue: 5 }, 373 { object: obj, name: "a", type: "updated", oldValue: 5 },
374 { object: obj, name: "a", type: "reconfigured", oldValue: 6 }, 374 { object: obj, name: "a", type: "reconfigured" },
375 { object: obj, name: "a", type: "updated", oldValue: 6 }, 375 { object: obj, name: "a", type: "updated", oldValue: 6 },
376 { object: obj, name: "a", type: "reconfigured", oldValue: 8 }, 376 { object: obj, name: "a", type: "reconfigured", oldValue: 8 },
377 { object: obj, name: "a", type: "reconfigured", oldValue: 7 }, 377 { object: obj, name: "a", type: "reconfigured", oldValue: 7 },
378 { object: obj, name: "a", type: "reconfigured" }, 378 { object: obj, name: "a", type: "reconfigured" },
379 { object: obj, name: "a", type: "reconfigured" }, 379 { object: obj, name: "a", type: "reconfigured" },
380 { object: obj, name: "a", type: "reconfigured" }, 380 { object: obj, name: "a", type: "reconfigured" },
381 { object: obj, name: "a", type: "deleted" }, 381 { object: obj, name: "a", type: "deleted" },
382 { object: obj, name: "a", type: "new" }, 382 { object: obj, name: "a", type: "new" },
383 { object: obj, name: "a", type: "reconfigured" }, 383 { object: obj, name: "a", type: "reconfigured" },
384 { object: obj, name: "a", type: "updated", oldValue: 9 }, 384 { object: obj, name: "a", type: "updated", oldValue: 9 },
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 delete obj[1]; 422 delete obj[1];
423 Object.defineProperty(obj, "1", {value: 11, configurable: true}); 423 Object.defineProperty(obj, "1", {value: 11, configurable: true});
424 Object.deliverChangeRecords(observer.callback); 424 Object.deliverChangeRecords(observer.callback);
425 observer.assertCallbackRecords([ 425 observer.assertCallbackRecords([
426 { object: obj, name: "1", type: "updated", oldValue: 1 }, 426 { object: obj, name: "1", type: "updated", oldValue: 1 },
427 { object: obj, name: "1", type: "updated", oldValue: 2 }, 427 { object: obj, name: "1", type: "updated", oldValue: 2 },
428 { object: obj, name: "1", type: "deleted", oldValue: 3 }, 428 { object: obj, name: "1", type: "deleted", oldValue: 3 },
429 { object: obj, name: "1", type: "new" }, 429 { object: obj, name: "1", type: "new" },
430 { object: obj, name: "1", type: "updated", oldValue: 4 }, 430 { object: obj, name: "1", type: "updated", oldValue: 4 },
431 { object: obj, name: "1", type: "updated", oldValue: 5 }, 431 { object: obj, name: "1", type: "updated", oldValue: 5 },
432 { object: obj, name: "1", type: "reconfigured", oldValue: 6 }, 432 { object: obj, name: "1", type: "reconfigured" },
433 { object: obj, name: "1", type: "updated", oldValue: 6 }, 433 { object: obj, name: "1", type: "updated", oldValue: 6 },
434 { object: obj, name: "1", type: "reconfigured", oldValue: 8 }, 434 { object: obj, name: "1", type: "reconfigured", oldValue: 8 },
435 { object: obj, name: "1", type: "reconfigured", oldValue: 7 }, 435 { object: obj, name: "1", type: "reconfigured", oldValue: 7 },
436 { object: obj, name: "1", type: "reconfigured" }, 436 { object: obj, name: "1", type: "reconfigured" },
437 { object: obj, name: "1", type: "reconfigured" }, 437 { object: obj, name: "1", type: "reconfigured" },
438 { object: obj, name: "1", type: "reconfigured" }, 438 { object: obj, name: "1", type: "reconfigured" },
439 { object: obj, name: "1", type: "deleted" }, 439 { object: obj, name: "1", type: "deleted" },
440 { object: obj, name: "1", type: "new" }, 440 { object: obj, name: "1", type: "new" },
441 { object: obj, name: "1", type: "reconfigured" }, 441 { object: obj, name: "1", type: "reconfigured" },
442 { object: obj, name: "1", type: "updated", oldValue: 9 }, 442 { object: obj, name: "1", type: "updated", oldValue: 9 },
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 delete obj[prop]; 486 delete obj[prop];
487 Object.defineProperty(obj, prop, {value: 11, configurable: true}); 487 Object.defineProperty(obj, prop, {value: 11, configurable: true});
488 Object.deliverChangeRecords(observer.callback); 488 Object.deliverChangeRecords(observer.callback);
489 observer.assertCallbackRecords([ 489 observer.assertCallbackRecords([
490 { object: obj, name: prop, type: "updated", oldValue: 1 }, 490 { object: obj, name: prop, type: "updated", oldValue: 1 },
491 { object: obj, name: prop, type: "updated", oldValue: 2 }, 491 { object: obj, name: prop, type: "updated", oldValue: 2 },
492 { object: obj, name: prop, type: "deleted", oldValue: 3 }, 492 { object: obj, name: prop, type: "deleted", oldValue: 3 },
493 { object: obj, name: prop, type: "new" }, 493 { object: obj, name: prop, type: "new" },
494 { object: obj, name: prop, type: "updated", oldValue: 4 }, 494 { object: obj, name: prop, type: "updated", oldValue: 4 },
495 { object: obj, name: prop, type: "updated", oldValue: 5 }, 495 { object: obj, name: prop, type: "updated", oldValue: 5 },
496 { object: obj, name: prop, type: "reconfigured", oldValue: 6 }, 496 { object: obj, name: prop, type: "reconfigured" },
497 { object: obj, name: prop, type: "updated", oldValue: 6 }, 497 { object: obj, name: prop, type: "updated", oldValue: 6 },
498 { object: obj, name: prop, type: "reconfigured", oldValue: 8 }, 498 { object: obj, name: prop, type: "reconfigured", oldValue: 8 },
499 { object: obj, name: prop, type: "reconfigured", oldValue: 7 }, 499 { object: obj, name: prop, type: "reconfigured", oldValue: 7 },
500 { object: obj, name: prop, type: "reconfigured" }, 500 { object: obj, name: prop, type: "reconfigured" },
501 { object: obj, name: prop, type: "reconfigured" }, 501 { object: obj, name: prop, type: "reconfigured" },
502 { object: obj, name: prop, type: "reconfigured" }, 502 { object: obj, name: prop, type: "reconfigured" },
503 { object: obj, name: prop, type: "reconfigured" }, 503 { object: obj, name: prop, type: "reconfigured" },
504 { object: obj, name: prop, type: "reconfigured" }, 504 { object: obj, name: prop, type: "reconfigured" },
505 { object: obj, name: prop, type: "deleted" }, 505 { object: obj, name: prop, type: "deleted" },
506 { object: obj, name: prop, type: "new" }, 506 { object: obj, name: prop, type: "new" },
(...skipping 23 matching lines...) Expand all
530 Object.defineProperty(obj, prop, {value: 7}); 530 Object.defineProperty(obj, prop, {value: 7});
531 Object.defineProperty(obj, prop, {enumerable: desc.enumerable}); // ignored 531 Object.defineProperty(obj, prop, {enumerable: desc.enumerable}); // ignored
532 Object.defineProperty(obj, prop, {writable: false}); 532 Object.defineProperty(obj, prop, {writable: false});
533 obj[prop] = 7; // ignored 533 obj[prop] = 7; // ignored
534 Object.deliverChangeRecords(observer.callback); 534 Object.deliverChangeRecords(observer.callback);
535 observer.assertCallbackRecords([ 535 observer.assertCallbackRecords([
536 { object: obj, name: prop, type: "updated", oldValue: 1 }, 536 { object: obj, name: prop, type: "updated", oldValue: 1 },
537 { object: obj, name: prop, type: "updated", oldValue: 4 }, 537 { object: obj, name: prop, type: "updated", oldValue: 4 },
538 { object: obj, name: prop, type: "updated", oldValue: 5 }, 538 { object: obj, name: prop, type: "updated", oldValue: 5 },
539 { object: obj, name: prop, type: "updated", oldValue: 6 }, 539 { object: obj, name: prop, type: "updated", oldValue: 6 },
540 { object: obj, name: prop, type: "reconfigured", oldValue: 7 }, 540 { object: obj, name: prop, type: "reconfigured" },
541 ]); 541 ]);
542 Object.unobserve(obj, observer.callback); 542 Object.unobserve(obj, observer.callback);
543 } 543 }
544 544
545 function createProxy(create, x) { 545 function createProxy(create, x) {
546 var handler = { 546 var handler = {
547 getPropertyDescriptor: function(k) { 547 getPropertyDescriptor: function(k) {
548 for (var o = this.target; o; o = Object.getPrototypeOf(o)) { 548 for (var o = this.target; o; o = Object.getPrototypeOf(o)) {
549 var desc = Object.getOwnPropertyDescriptor(o, k); 549 var desc = Object.getOwnPropertyDescriptor(o, k);
550 if (desc) return desc; 550 if (desc) return desc;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 Object.defineProperty(arr3, 'length', {value: 5}); 650 Object.defineProperty(arr3, 'length', {value: 5});
651 Object.defineProperty(arr3, 'length', {value: 10, writable: false}); 651 Object.defineProperty(arr3, 'length', {value: 10, writable: false});
652 Object.deliverChangeRecords(observer.callback); 652 Object.deliverChangeRecords(observer.callback);
653 observer.assertCallbackRecords([ 653 observer.assertCallbackRecords([
654 { object: arr, name: '3', type: 'deleted', oldValue: 'd' }, 654 { object: arr, name: '3', type: 'deleted', oldValue: 'd' },
655 { object: arr, name: '2', type: 'deleted' }, 655 { object: arr, name: '2', type: 'deleted' },
656 { object: arr, name: 'length', type: 'updated', oldValue: 4 }, 656 { object: arr, name: 'length', type: 'updated', oldValue: 4 },
657 { object: arr, name: '1', type: 'deleted', oldValue: 'b' }, 657 { object: arr, name: '1', type: 'deleted', oldValue: 'b' },
658 { object: arr, name: 'length', type: 'updated', oldValue: 2 }, 658 { object: arr, name: 'length', type: 'updated', oldValue: 2 },
659 { object: arr, name: 'length', type: 'updated', oldValue: 1 }, 659 { object: arr, name: 'length', type: 'updated', oldValue: 1 },
660 { object: arr, name: 'length', type: 'reconfigured', oldValue: 10 }, 660 { object: arr, name: 'length', type: 'reconfigured' },
661 { object: arr2, name: '1', type: 'deleted', oldValue: 'beta' }, 661 { object: arr2, name: '1', type: 'deleted', oldValue: 'beta' },
662 { object: arr2, name: 'length', type: 'updated', oldValue: 2 }, 662 { object: arr2, name: 'length', type: 'updated', oldValue: 2 },
663 { object: arr2, name: 'length', type: 'reconfigured', oldValue: 1 }, 663 { object: arr2, name: 'length', type: 'reconfigured', oldValue: 1 },
664 { object: arr3, name: '2', type: 'deleted', oldValue: 'goodbye' }, 664 { object: arr3, name: '2', type: 'deleted', oldValue: 'goodbye' },
665 { object: arr3, name: '0', type: 'deleted', oldValue: 'hello' }, 665 { object: arr3, name: '0', type: 'deleted', oldValue: 'hello' },
666 { object: arr3, name: 'length', type: 'updated', oldValue: 6 }, 666 { object: arr3, name: 'length', type: 'updated', oldValue: 6 },
667 { object: arr3, name: 'length', type: 'updated', oldValue: 0 }, 667 { object: arr3, name: 'length', type: 'updated', oldValue: 0 },
668 { object: arr3, name: 'length', type: 'updated', oldValue: 1 }, 668 { object: arr3, name: 'length', type: 'updated', oldValue: 1 },
669 { object: arr3, name: 'length', type: 'updated', oldValue: 2 }, 669 { object: arr3, name: 'length', type: 'updated', oldValue: 2 },
670 { object: arr3, name: 'length', type: 'updated', oldValue: 1 }, 670 { object: arr3, name: 'length', type: 'updated', oldValue: 1 },
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1045 for (var n1 = 0; n1 < 3; ++n1) 1045 for (var n1 = 0; n1 < 3; ++n1)
1046 for (var n2 = 0; n2 < 3; ++n2) 1046 for (var n2 = 0; n2 < 3; ++n2)
1047 for (var i in mutation) 1047 for (var i in mutation)
1048 TestFastElementsLength(mutation[i], b1 != 0, b2 != 0, 20*n1, 20*n2); 1048 TestFastElementsLength(mutation[i], b1 != 0, b2 != 0, 20*n1, 20*n2);
1049 1049
1050 for (var b1 = 0; b1 < 2; ++b1) 1050 for (var b1 = 0; b1 < 2; ++b1)
1051 for (var b2 = 0; b2 < 2; ++b2) 1051 for (var b2 = 0; b2 < 2; ++b2)
1052 for (var n = 0; n < 3; ++n) 1052 for (var n = 0; n < 3; ++n)
1053 for (var i in mutationByIncr) 1053 for (var i in mutationByIncr)
1054 TestFastElementsLength(mutationByIncr[i], b1 != 0, b2 != 0, 7*n, 7*n+1); 1054 TestFastElementsLength(mutationByIncr[i], b1 != 0, b2 != 0, 7*n, 7*n+1);
OLDNEW
« src/objects.cc ('K') | « src/objects.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698