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