1 // ========================================================================== 2 // Project: SproutCore Costello - Property Observing Library 3 // Copyright: ©2006-2011 Strobe Inc. and contributors. 4 // Portions ©2008-2011 Apple Inc. All rights reserved. 5 // License: Licensed under MIT license (see license.js) 6 // ========================================================================== 7 8 /*globals module test ok equals same CoreTest */ 9 10 sc_require('debug/test_suites/array/base'); 11 12 SC.ArraySuite.define(function(T) { 13 14 var observer, obj ; 15 16 module(T.desc("replace"), { 17 setup: function() { 18 obj = T.newObject(); 19 observer = T.observer(obj); 20 } 21 }); 22 23 test("[].replace(0,0,'X') => ['X'] + notify", function() { 24 25 var exp = T.expected(1); 26 27 observer.observe('[]', 'length') ; 28 obj.replace(0,0,exp) ; 29 30 T.validateAfter(obj, exp, observer, YES); 31 }); 32 33 test("[A,B,C,D].replace(1,2,X) => [A,X,D] + notify", function() { 34 35 var exp = T.expected(5), 36 before = exp.slice(0,4), 37 replace = exp.slice(4), 38 after = [before[0], replace[0], before[3]]; 39 40 obj.replace(0,0, before) ; // precond 41 observer.observe('[]', 'length') ; 42 43 obj.replace(1,2,replace) ; 44 45 T.validateAfter(obj, after, observer, YES); 46 }); 47 48 test("[A,B,C,D].replace(1,2,[X,Y]) => [A,X,Y,D] + notify", function() { 49 50 // setup the before, after, and replace arrays. Use generated objects 51 var exp = T.expected(6), 52 before = exp.slice(0, 4), 53 replace = exp.slice(4), 54 after = [before[0], replace[0], replace[1], before[3]]; 55 56 obj.replace(0,0, before) ; 57 observer.observe('[]', 'length') ; 58 59 obj.replace(1,2, replace) ; 60 61 T.validateAfter(obj, after, observer, NO); 62 }); 63 64 test("[A,B].replace(1,0,[X,Y]) => [A,X,Y,B] + notify", function() { 65 66 // setup the before, after, and replace arrays. Use generated objects 67 var exp = T.expected(4), 68 before = exp.slice(0, 2), 69 replace = exp.slice(2), 70 after = [before[0], replace[0], replace[1], before[1]] ; 71 72 obj.replace(0,0, before); 73 observer.observe('[]', 'length') ; 74 75 obj.replace(1,0, replace) ; 76 77 T.validateAfter(obj, after, observer, YES); 78 }); 79 80 test("[A,B,C,D].replace(2,2) => [A,B] + notify", function() { 81 82 // setup the before, after, and replace arrays. Use generated objects 83 var before = T.expected(4), 84 after = [before[0], before[1]]; 85 86 obj.replace(0,0, before); 87 observer.observe('[]', 'length') ; 88 89 obj.replace(2,2) ; 90 91 T.validateAfter(obj, after, observer, YES); 92 }); 93 94 test("[].replace(0, 0, 'X') will call notify `[]` changed only once", function() { 95 var exp = T.expected(1), 96 callCount = 0; 97 98 obj.addObserver('[]', function () { 99 callCount++; 100 }); 101 102 obj.replace(0, 0, exp); 103 equals(callCount, 1, "expects the key '[]' to be notified only once"); 104 }); 105 106 }); 107