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

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

Issue 11554019: Object.observe: Make array length and other magic data properties work correctly. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressing Michael's comments Created 8 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 | Annotate | Revision Log
« no previous file with comments | « src/v8natives.js ('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 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
529 (function(){ return arguments })(), 529 (function(){ return arguments })(),
530 (function(){ "use strict"; return arguments })(), 530 (function(){ "use strict"; return arguments })(),
531 Object(1), Object(true), Object("bla"), 531 Object(1), Object(true), Object("bla"),
532 new Date(), 532 new Date(),
533 Object, Function, Date, RegExp, 533 Object, Function, Date, RegExp,
534 new Set, new Map, new WeakMap, 534 new Set, new Map, new WeakMap,
535 new ArrayBuffer(10), new Int32Array(5), 535 new ArrayBuffer(10), new Int32Array(5),
536 createProxy(Proxy.create, null), 536 createProxy(Proxy.create, null),
537 createProxy(Proxy.createFunction, function(){}), 537 createProxy(Proxy.createFunction, function(){}),
538 ]; 538 ];
539 var properties = ["a", "1", 1, "length", "prototype"]; 539 var properties = ["a", "1", 1, "length", "prototype", "name", "caller"];
540 540
541 // Cases that yield non-standard results. 541 // Cases that yield non-standard results.
542 // TODO(observe): ...or don't work yet.
543 function blacklisted(obj, prop) { 542 function blacklisted(obj, prop) {
544 return (obj instanceof Int32Array && prop == 1) || 543 return (obj instanceof Int32Array && prop == 1) ||
545 (obj instanceof Int32Array && prop === "length") || 544 (obj instanceof Int32Array && prop === "length") ||
546 (obj instanceof ArrayBuffer && prop == 1) || 545 (obj instanceof ArrayBuffer && prop == 1)
547 // TODO(observe): oldValue when reconfiguring array length
548 (obj instanceof Array && prop === "length")
549 } 546 }
550 547
551 for (var i in objects) for (var j in properties) { 548 for (var i in objects) for (var j in properties) {
552 var obj = objects[i]; 549 var obj = objects[i];
553 var prop = properties[j]; 550 var prop = properties[j];
554 if (blacklisted(obj, prop)) continue; 551 if (blacklisted(obj, prop)) continue;
555 var desc = Object.getOwnPropertyDescriptor(obj, prop); 552 var desc = Object.getOwnPropertyDescriptor(obj, prop);
556 print("***", typeof obj, stringifyNoThrow(obj), prop); 553 print("***", typeof obj, stringifyNoThrow(obj), prop);
557 if (!desc || desc.configurable) 554 if (!desc || desc.configurable)
558 TestObserveConfigurable(obj, prop); 555 TestObserveConfigurable(obj, prop);
(...skipping 15 matching lines...) Expand all
574 //slow_arr[500000000] = 'hello'; 571 //slow_arr[500000000] = 'hello';
575 Object.defineProperty(arr, '0', {configurable: false}); 572 Object.defineProperty(arr, '0', {configurable: false});
576 Object.defineProperty(arr, '2', {get: function(){}}); 573 Object.defineProperty(arr, '2', {get: function(){}});
577 Object.defineProperty(arr2, '0', {get: function(){}, configurable: false}); 574 Object.defineProperty(arr2, '0', {get: function(){}, configurable: false});
578 Object.observe(arr, observer.callback); 575 Object.observe(arr, observer.callback);
579 Object.observe(arr2, observer.callback); 576 Object.observe(arr2, observer.callback);
580 Object.observe(arr3, observer.callback); 577 Object.observe(arr3, observer.callback);
581 arr.length = 2; 578 arr.length = 2;
582 arr.length = 0; 579 arr.length = 0;
583 arr.length = 10; 580 arr.length = 10;
581 Object.defineProperty(arr, 'length', {writable: false});
584 arr2.length = 0; 582 arr2.length = 0;
585 arr2.length = 1; // no change expected 583 arr2.length = 1; // no change expected
584 Object.defineProperty(arr2, 'length', {value: 1, writable: false});
586 arr3.length = 0; 585 arr3.length = 0;
587 Object.defineProperty(arr3, 'length', {value: 5}); 586 Object.defineProperty(arr3, 'length', {value: 5});
588 Object.defineProperty(arr3, 'length', {value: 10, writable: false}); 587 Object.defineProperty(arr3, 'length', {value: 10, writable: false});
589 Object.deliverChangeRecords(observer.callback); 588 Object.deliverChangeRecords(observer.callback);
590 observer.assertCallbackRecords([ 589 observer.assertCallbackRecords([
591 { object: arr, name: '3', type: 'deleted', oldValue: 'd' }, 590 { object: arr, name: '3', type: 'deleted', oldValue: 'd' },
592 { object: arr, name: '2', type: 'deleted' }, 591 { object: arr, name: '2', type: 'deleted' },
593 { object: arr, name: 'length', type: 'updated', oldValue: 4 }, 592 { object: arr, name: 'length', type: 'updated', oldValue: 4 },
594 { object: arr, name: '1', type: 'deleted', oldValue: 'b' }, 593 { object: arr, name: '1', type: 'deleted', oldValue: 'b' },
595 { object: arr, name: 'length', type: 'updated', oldValue: 2 }, 594 { object: arr, name: 'length', type: 'updated', oldValue: 2 },
596 { object: arr, name: 'length', type: 'updated', oldValue: 1 }, 595 { object: arr, name: 'length', type: 'updated', oldValue: 1 },
596 { object: arr, name: 'length', type: 'reconfigured', oldValue: 10 },
597 { object: arr2, name: '1', type: 'deleted', oldValue: 'beta' }, 597 { object: arr2, name: '1', type: 'deleted', oldValue: 'beta' },
598 { object: arr2, name: 'length', type: 'updated', oldValue: 2 }, 598 { object: arr2, name: 'length', type: 'updated', oldValue: 2 },
599 { object: arr2, name: 'length', type: 'reconfigured', oldValue: 1 },
599 { object: arr3, name: '2', type: 'deleted', oldValue: 'goodbye' }, 600 { object: arr3, name: '2', type: 'deleted', oldValue: 'goodbye' },
600 { object: arr3, name: '0', type: 'deleted', oldValue: 'hello' }, 601 { object: arr3, name: '0', type: 'deleted', oldValue: 'hello' },
601 { object: arr3, name: 'length', type: 'updated', oldValue: 6 }, 602 { object: arr3, name: 'length', type: 'updated', oldValue: 6 },
602 { object: arr3, name: 'length', type: 'updated', oldValue: 0 }, 603 { object: arr3, name: 'length', type: 'updated', oldValue: 0 },
603 { object: arr3, name: 'length', type: 'updated', oldValue: 5 }, 604 { object: arr3, name: 'length', type: 'reconfigured', oldValue: 5 },
604 // TODO(adamk): This record should be merged with the above
605 { object: arr3, name: 'length', type: 'reconfigured' },
606 ]); 605 ]);
607 606
608 // Assignments in loops (checking different IC states). 607 // Assignments in loops (checking different IC states).
609 reset(); 608 reset();
610 var obj = {}; 609 var obj = {};
611 Object.observe(obj, observer.callback); 610 Object.observe(obj, observer.callback);
612 for (var i = 0; i < 5; i++) { 611 for (var i = 0; i < 5; i++) {
613 obj["a" + i] = i; 612 obj["a" + i] = i;
614 } 613 }
615 Object.deliverChangeRecords(observer.callback); 614 Object.deliverChangeRecords(observer.callback);
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 var count = oldSize > newSize ? oldSize - newSize : 0; 936 var count = oldSize > newSize ? oldSize - newSize : 0;
938 observer.assertRecordCount(count + 1); 937 observer.assertRecordCount(count + 1);
939 var lengthRecord = observer.records[count]; 938 var lengthRecord = observer.records[count];
940 assertSame(arr, lengthRecord.object); 939 assertSame(arr, lengthRecord.object);
941 assertEquals('length', lengthRecord.name); 940 assertEquals('length', lengthRecord.name);
942 assertEquals('updated', lengthRecord.type); 941 assertEquals('updated', lengthRecord.type);
943 assertSame(oldSize, lengthRecord.oldValue); 942 assertSame(oldSize, lengthRecord.oldValue);
944 } 943 }
945 } 944 }
946 945
946 // TODO(rossberg): Still flaky on buildbots, disable for now...
947 /*
947 for (var b1 = 0; b1 < 2; ++b1) 948 for (var b1 = 0; b1 < 2; ++b1)
948 for (var b2 = 0; b2 < 2; ++b2) 949 for (var b2 = 0; b2 < 2; ++b2)
949 for (var n1 = 0; n1 < 3; ++n1) 950 for (var n1 = 0; n1 < 3; ++n1)
950 for (var n2 = 0; n2 < 3; ++n2) 951 for (var n2 = 0; n2 < 3; ++n2)
951 TestFastElementsLength(b1 != 0, b2 != 0, 20*n1, 20*n2); 952 TestFastElementsLength(b1 != 0, b2 != 0, 20*n1, 20*n2);
953 */
OLDNEW
« no previous file with comments | « src/v8natives.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698