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("removeAt"), { 17 setup: function() { 18 obj = T.newObject(); 19 observer = T.observer(obj); 20 } 21 }); 22 23 test("[X].removeAt(0) => [] + notify", function() { 24 25 var before = T.expected(1); 26 obj.replace(0,0, before); 27 observer.observe('[]', 'length') ; 28 29 obj.removeAt(0) ; 30 T.validateAfter(obj, [], observer, YES); 31 }); 32 33 test("[].removeAt(200) => OUT_OF_RANGE_EXCEPTION exception", function() { 34 var didThrow = NO ; 35 try { 36 obj.removeAt(200); 37 } catch (e) { 38 equals(e.message, SC.OUT_OF_RANGE_EXCEPTION, 'should throw SC.OUT_OF_RANGE_EXCEPTION'); 39 didThrow = YES ; 40 } 41 ok(didThrow, 'should raise exception'); 42 }); 43 44 test("[A,B].removeAt(0) => [B] + notify", function() { 45 var before = T.expected(2), 46 after = [before[1]]; 47 48 obj.replace(0,0,before); 49 observer.observe('[]', 'length') ; 50 51 obj.removeAt(0); 52 T.validateAfter(obj, after, observer, YES); 53 }); 54 55 test("[A,B].removeAt(1) => [A] + notify", function() { 56 var before = T.expected(2), 57 after = [before[0]]; 58 59 obj.replace(0,0,before); 60 observer.observe('[]', 'length') ; 61 62 obj.removeAt(1); 63 T.validateAfter(obj, after, observer, YES); 64 }); 65 66 test("[A,B,C].removeAt(1) => [A,C] + notify", function() { 67 var before = T.expected(3), 68 after = [before[0], before[2]]; 69 70 obj.replace(0,0,before); 71 observer.observe('[]', 'length') ; 72 73 obj.removeAt(1); 74 T.validateAfter(obj, after, observer, YES); 75 }); 76 77 test("[A,B,C,D].removeAt(1,2) => [A,D] + notify", function() { 78 var before = T.expected(4), 79 after = [before[0], before[3]]; 80 81 obj.replace(0,0,before); 82 observer.observe('[]', 'length') ; 83 84 obj.removeAt(1,2); 85 T.validateAfter(obj, after, observer, YES); 86 }); 87 88 test("[A,B,C,D].removeAt(IndexSet<0,2-3>) => [B] + notify", function() { 89 var before = T.expected(4), 90 after = [before[1]]; 91 92 obj.replace(0,0,before); 93 observer.observe('[]', 'length') ; 94 95 obj.removeAt(SC.IndexSet.create(0).add(2,2)); 96 T.validateAfter(obj, after, observer, YES); 97 }); 98 99 }); 100 101