Skip to content

Commit

Permalink
Merge pull request #1411 from sproutcore/team/nicolasbadia/out-of-range
Browse files Browse the repository at this point in the history
Improves out of range exception message
  • Loading branch information
mauritslamers committed Feb 5, 2017
2 parents 18da4bd + 21b849f commit c2fb0ef
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 59 deletions.
56 changes: 28 additions & 28 deletions frameworks/runtime/debug/test_suites/array/insertAt.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
sc_require('debug/test_suites/array/base');

SC.ArraySuite.define(function(T) {

var observer, obj ;

module(T.desc("insertAt"), {
setup: function() {
obj = T.newObject();
Expand All @@ -23,99 +23,99 @@ SC.ArraySuite.define(function(T) {
test("[].insertAt(0, X) => [X] + notify", function() {

var after = T.expected(1);

observer.observe('[]') ;
obj.insertAt(0, after) ;
T.validateAfter(obj, after, observer);
});
test("[].insertAt(200,X) => OUT_OF_RANGE_EXCEPTION exception", function() {

test("[].insertAt(200,X) => throw exception", function() {
var didThrow = NO ;
try {
obj.insertAt(200, T.expected(1));
} catch (e) {
equals(e.message, SC.OUT_OF_RANGE_EXCEPTION, 'should throw SC.OUT_OF_RANGE_EXCEPTION');
equals(e.message, "Index '200' is out of range 0-0", 'should throw an exception');
didThrow = YES ;
}
ok(didThrow, 'should raise exception');
});

test("[A].insertAt(0, X) => [X,A] + notify", function() {
var exp = T.expected(2),
var exp = T.expected(2),
before = exp.slice(0,1),
replace = exp[1],
after = [replace, before[0]];

obj.replace(0,0,before);
observer.observe('[]');

obj.insertAt(0, replace);
T.validateAfter(obj, after, observer);
});

test("[A].insertAt(1, X) => [A,X] + notify", function() {
var exp = T.expected(2),
var exp = T.expected(2),
before = exp.slice(0,1),
replace = exp[1],
after = [before[0], replace];

obj.replace(0,0,before);
observer.observe('[]');

obj.insertAt(1, replace);
T.validateAfter(obj, after, observer);
});

test("[A].insertAt(200,X) => OUT_OF_RANGE exception", function() {
test("[A].insertAt(200,X) => throw exception", function() {
obj.replace(0,0, T.expected(1)); // add an item

var didThrow = NO ;
try {
obj.insertAt(200, T.expected(1));
} catch (e) {
equals(e.message, SC.OUT_OF_RANGE_EXCEPTION, 'should throw SC.OUT_OF_RANGE_EXCEPTION');
equals(e.message, "Index '200' is out of range 0-1", 'should throw an exception');
didThrow = YES ;
}
ok(didThrow, 'should raise exception');
});

test("[A,B,C].insertAt(0,X) => [X,A,B,C] + notify", function() {
var exp = T.expected(4),
var exp = T.expected(4),
before = exp.slice(1),
replace = exp[0],
after = [replace, before[0], before[1], before[2]];

obj.replace(0,0,before);
observer.observe('[]');

obj.insertAt(0, replace);
T.validateAfter(obj, after, observer);
});

test("[A,B,C].insertAt(1,X) => [A,X,B,C] + notify", function() {
var exp = T.expected(4),
var exp = T.expected(4),
before = exp.slice(1),
replace = exp[0],
after = [before[0], replace, before[1], before[2]];

obj.replace(0,0,before);
observer.observe('[]');

obj.insertAt(1, replace);
T.validateAfter(obj, after, observer);
});

test("[A,B,C].insertAt(3,X) => [A,B,C,X] + notify", function() {
var exp = T.expected(4),
var exp = T.expected(4),
before = exp.slice(1),
replace = exp[0],
after = [before[0], before[1], before[2], replace];

obj.replace(0,0,before);
observer.observe('[]');

obj.insertAt(3, replace);
T.validateAfter(obj, after, observer);
});

});
47 changes: 23 additions & 24 deletions frameworks/runtime/debug/test_suites/array/removeAt.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
sc_require('debug/test_suites/array/base');

SC.ArraySuite.define(function(T) {

var observer, obj ;

module(T.desc("removeAt"), {
setup: function() {
obj = T.newObject();
Expand All @@ -25,76 +25,75 @@ SC.ArraySuite.define(function(T) {
var before = T.expected(1);
obj.replace(0,0, before);
observer.observe('[]', 'length') ;

obj.removeAt(0) ;
T.validateAfter(obj, [], observer, YES);
});
test("[].removeAt(200) => OUT_OF_RANGE_EXCEPTION exception", function() {

test("[].removeAt(200) => throw exception", function() {
var didThrow = NO ;
try {
obj.removeAt(200);
} catch (e) {
equals(e.message, SC.OUT_OF_RANGE_EXCEPTION, 'should throw SC.OUT_OF_RANGE_EXCEPTION');
equals(e.message, "Index '200' is out of range 0-0", 'should throw an exception');
didThrow = YES ;
}
ok(didThrow, 'should raise exception');
});

test("[A,B].removeAt(0) => [B] + notify", function() {
var before = T.expected(2),
var before = T.expected(2),
after = [before[1]];

obj.replace(0,0,before);
observer.observe('[]', 'length') ;

obj.removeAt(0);
T.validateAfter(obj, after, observer, YES);
});

test("[A,B].removeAt(1) => [A] + notify", function() {
var before = T.expected(2),
var before = T.expected(2),
after = [before[0]];

obj.replace(0,0,before);
observer.observe('[]', 'length') ;

obj.removeAt(1);
T.validateAfter(obj, after, observer, YES);
});

test("[A,B,C].removeAt(1) => [A,C] + notify", function() {
var before = T.expected(3),
var before = T.expected(3),
after = [before[0], before[2]];

obj.replace(0,0,before);
observer.observe('[]', 'length') ;

obj.removeAt(1);
T.validateAfter(obj, after, observer, YES);
});

test("[A,B,C,D].removeAt(1,2) => [A,D] + notify", function() {
var before = T.expected(4),
var before = T.expected(4),
after = [before[0], before[3]];

obj.replace(0,0,before);
observer.observe('[]', 'length') ;

obj.removeAt(1,2);
T.validateAfter(obj, after, observer, YES);
});

test("[A,B,C,D].removeAt(IndexSet<0,2-3>) => [B] + notify", function() {
var before = T.expected(4),
var before = T.expected(4),
after = [before[1]];

obj.replace(0,0,before);
observer.observe('[]', 'length') ;

obj.removeAt(SC.IndexSet.create(0).add(2,2));
T.validateAfter(obj, after, observer, YES);
});

});

});
10 changes: 3 additions & 7 deletions frameworks/runtime/mixins/array.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ sc_require('mixins/observable');
sc_require('mixins/enumerable');
sc_require('system/range_observer');

SC.OUT_OF_RANGE_EXCEPTION = "Index out of range";

SC.CoreArray = /** @lends SC.Array.prototype */ {

/**
Expand Down Expand Up @@ -138,7 +136,7 @@ SC.CoreArray = /** @lends SC.Array.prototype */ {
@param {Object} object object to insert
*/
insertAt: function (idx, object) {
if (idx > this.get('length')) throw new Error(SC.OUT_OF_RANGE_EXCEPTION);
if (idx > this.get('length')) throw new Error("Index '"+idx+"' is out of range 0-"+this.get('length'));
this.replace(idx, 0, [object]);
return this;
},
Expand All @@ -149,7 +147,7 @@ SC.CoreArray = /** @lends SC.Array.prototype */ {
index set.
If you pass a single index or a start and length that is beyond the
length this method will throw an SC.OUT_OF_RANGE_EXCEPTION
length this method will throw an error
@param {Number|SC.IndexSet} start index, start of range, or index set
@param {Number} length length of passing range
Expand All @@ -161,9 +159,7 @@ SC.CoreArray = /** @lends SC.Array.prototype */ {

if (typeof start === SC.T_NUMBER) {

if ((start < 0) || (start >= this.get('length'))) {
throw new Error(SC.OUT_OF_RANGE_EXCEPTION);
}
if ((start < 0) || (start >= this.get('length'))) throw new Error("Index '"+start+"' is out of range 0-"+this.get('length'));

// fast case
if (length === undefined) {
Expand Down

0 comments on commit c2fb0ef

Please sign in to comment.