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

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

Issue 11369151: Minimal implementation and tests of observable array methods (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 1 month 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/array.js ('K') | « src/builtins.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 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 Object.observe(arr3, observer.callback); 352 Object.observe(arr3, observer.callback);
353 arr.length = 2; 353 arr.length = 2;
354 arr.length = 0; 354 arr.length = 0;
355 arr.length = 10; 355 arr.length = 10;
356 arr2.length = 0; 356 arr2.length = 0;
357 arr2.length = 1; // no change expected 357 arr2.length = 1; // no change expected
358 arr3.length = 0; 358 arr3.length = 0;
359 Object.defineProperty(arr3, 'length', {value: 5}); 359 Object.defineProperty(arr3, 'length', {value: 5});
360 Object.defineProperty(arr3, 'length', {value: 10, writable: false}); 360 Object.defineProperty(arr3, 'length', {value: 10, writable: false});
361 Object.deliverChangeRecords(observer.callback); 361 Object.deliverChangeRecords(observer.callback);
362 observer.records.forEach(function(r){print(JSON.stringify(r))});
363 observer.assertCallbackRecords([ 362 observer.assertCallbackRecords([
364 { object: arr, name: '3', type: 'deleted', oldValue: 'd' }, 363 { object: arr, name: '3', type: 'deleted', oldValue: 'd' },
365 // TODO(adamk): oldValue should not be present below 364 // TODO(adamk): oldValue should not be present below
366 { object: arr, name: '2', type: 'deleted', oldValue: undefined }, 365 { object: arr, name: '2', type: 'deleted', oldValue: undefined },
367 { object: arr, name: 'length', type: 'updated', oldValue: 4 }, 366 { object: arr, name: 'length', type: 'updated', oldValue: 4 },
368 { object: arr, name: '1', type: 'deleted', oldValue: 'b' }, 367 { object: arr, name: '1', type: 'deleted', oldValue: 'b' },
369 { object: arr, name: 'length', type: 'updated', oldValue: 2 }, 368 { object: arr, name: 'length', type: 'updated', oldValue: 2 },
370 { object: arr, name: 'length', type: 'updated', oldValue: 1 }, 369 { object: arr, name: 'length', type: 'updated', oldValue: 1 },
371 { object: arr2, name: '1', type: 'deleted', oldValue: 'beta' }, 370 { object: arr2, name: '1', type: 'deleted', oldValue: 'beta' },
372 { object: arr2, name: 'length', type: 'updated', oldValue: 2 }, 371 { object: arr2, name: 'length', type: 'updated', oldValue: 2 },
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 { object: arr, name: '3', type: 'new' }, 423 { object: arr, name: '3', type: 'new' },
425 { object: arr, name: 'length', type: 'updated', oldValue: 3 }, 424 { object: arr, name: 'length', type: 'updated', oldValue: 3 },
426 { object: arr, name: '100', type: 'new' }, 425 { object: arr, name: '100', type: 'new' },
427 { object: arr, name: 'length', type: 'updated', oldValue: 4 }, 426 { object: arr, name: 'length', type: 'updated', oldValue: 4 },
428 { object: arr, name: '200', type: 'new' }, 427 { object: arr, name: '200', type: 'new' },
429 { object: arr, name: 'length', type: 'updated', oldValue: 101 }, 428 { object: arr, name: 'length', type: 'updated', oldValue: 101 },
430 { object: arr, name: '400', type: 'new' }, 429 { object: arr, name: '400', type: 'new' },
431 { object: arr, name: 'length', type: 'updated', oldValue: 201 }, 430 { object: arr, name: 'length', type: 'updated', oldValue: 201 },
432 { object: arr, name: '50', type: 'new' }, 431 { object: arr, name: '50', type: 'new' },
433 ]); 432 ]);
433
434 // Tests for array methods, first on arrays and then on plain objects
435 //
436 // === ARRAYS ===
437 //
438 // Push
439 reset();
440 var array = [1, 2];
441 Object.observe(array, observer.callback);
442 array.push(3, 4);
443 Object.deliverChangeRecords(observer.callback);
444 observer.assertCallbackRecords([
445 { object: array, name: '2', type: 'new' },
446 { object: array, name: 'length', type: 'updated', oldValue: 2 },
447 { object: array, name: '3', type: 'new' },
448 { object: array, name: 'length', type: 'updated', oldValue: 3 },
449 ]);
450
451 // Pop
452 reset();
453 var array = [1, 2];
454 Object.observe(array, observer.callback);
455 array.pop();
456 array.pop();
457 Object.deliverChangeRecords(observer.callback);
458 observer.assertCallbackRecords([
459 { object: array, name: '1', type: 'deleted', oldValue: 2 },
460 { object: array, name: 'length', type: 'updated', oldValue: 2 },
461 { object: array, name: '0', type: 'deleted', oldValue: 1 },
462 { object: array, name: 'length', type: 'updated', oldValue: 1 },
463 ]);
464
465 // Shift
466 reset();
467 var array = [1, 2];
468 Object.observe(array, observer.callback);
469 array.shift();
470 array.shift();
471 Object.deliverChangeRecords(observer.callback);
472 observer.assertCallbackRecords([
473 { object: array, name: '0', type: 'updated', oldValue: 1 },
474 { object: array, name: '1', type: 'deleted', oldValue: 2 },
475 { object: array, name: 'length', type: 'updated', oldValue: 2 },
476 { object: array, name: '0', type: 'deleted', oldValue: 2 },
477 { object: array, name: 'length', type: 'updated', oldValue: 1 },
478 ]);
479
480 // Unshift
481 reset();
482 var array = [1, 2];
483 Object.observe(array, observer.callback);
484 array.unshift(3, 4);
485 Object.deliverChangeRecords(observer.callback);
486 observer.assertCallbackRecords([
487 { object: array, name: '3', type: 'new' },
488 { object: array, name: 'length', type: 'updated', oldValue: 2 },
489 { object: array, name: '2', type: 'new' },
490 { object: array, name: '0', type: 'updated', oldValue: 1 },
491 { object: array, name: '1', type: 'updated', oldValue: 2 },
492 ]);
493
494 // Splice
495 reset();
496 var array = [1, 2, 3];
497 Object.observe(array, observer.callback);
498 array.splice(1, 1, 4, 5);
499 Object.deliverChangeRecords(observer.callback);
500 observer.assertCallbackRecords([
501 { object: array, name: '3', type: 'new' },
502 { object: array, name: 'length', type: 'updated', oldValue: 3 },
503 { object: array, name: '1', type: 'updated', oldValue: 2 },
504 { object: array, name: '2', type: 'updated', oldValue: 3 },
505 ]);
506
507 //
508 // === PLAIN OBJECTS ===
509 //
510 // Push
511 reset()
512 var array = {0: 1, 1: 2, length: 2}
513 Object.observe(array, observer.callback);
514 Array.prototype.push.call(array, 3, 4);
515 Object.deliverChangeRecords(observer.callback);
516 observer.assertCallbackRecords([
517 { object: array, name: '2', type: 'new' },
518 { object: array, name: '3', type: 'new' },
519 { object: array, name: 'length', type: 'updated', oldValue: 2 },
520 ]);
521
522 // Pop
523 reset()
524 var array = {0: 1, 1: 2, length: 2};
525 Object.observe(array, observer.callback);
526 Array.prototype.pop.call(array);
527 Array.prototype.pop.call(array);
528 Object.deliverChangeRecords(observer.callback);
529 observer.assertCallbackRecords([
530 { object: array, name: '1', type: 'deleted', oldValue: 2 },
531 { object: array, name: 'length', type: 'updated', oldValue: 2 },
532 { object: array, name: '0', type: 'deleted', oldValue: 1 },
533 { object: array, name: 'length', type: 'updated', oldValue: 1 },
534 ]);
535
536 // Shift
537 reset()
538 var array = {0: 1, 1: 2, length: 2};
539 Object.observe(array, observer.callback);
540 Array.prototype.shift.call(array);
541 Array.prototype.shift.call(array);
542 Object.deliverChangeRecords(observer.callback);
543 observer.assertCallbackRecords([
544 { object: array, name: '0', type: 'updated', oldValue: 1 },
545 { object: array, name: '1', type: 'deleted', oldValue: 2 },
546 { object: array, name: 'length', type: 'updated', oldValue: 2 },
547 { object: array, name: '0', type: 'deleted', oldValue: 2 },
548 { object: array, name: 'length', type: 'updated', oldValue: 1 },
549 ]);
550
551 // Unshift
552 reset()
553 var array = {0: 1, 1: 2, length: 2};
554 Object.observe(array, observer.callback);
555 Array.prototype.unshift.call(array, 3, 4);
556 Object.deliverChangeRecords(observer.callback);
557 observer.assertCallbackRecords([
558 { object: array, name: '3', type: 'new' },
559 { object: array, name: '2', type: 'new' },
560 { object: array, name: '0', type: 'updated', oldValue: 1 },
561 { object: array, name: '1', type: 'updated', oldValue: 2 },
562 { object: array, name: 'length', type: 'updated', oldValue: 2 },
563 ]);
564
565 // Splice
566 reset()
567 var array = {0: 1, 1: 2, 2: 3, length: 3};
568 Object.observe(array, observer.callback);
569 Array.prototype.splice.call(array, 1, 1, 4, 5);
570 Object.deliverChangeRecords(observer.callback);
571 observer.assertCallbackRecords([
572 { object: array, name: '3', type: 'new' },
573 { object: array, name: '1', type: 'updated', oldValue: 2 },
574 { object: array, name: '2', type: 'updated', oldValue: 3 },
575 { object: array, name: 'length', type: 'updated', oldValue: 3 },
576 ]);
OLDNEW
« src/array.js ('K') | « src/builtins.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698