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