description(
"Test of array sort with toString() override that throws exception."
);
var size = 200;
var digits = 3;
var exceptionString = 'From toString()';
var catchArg = "";
var a = new Array(size);
function do_gc() {
if (window.GCController)
return GCController.collect();
for (var i = 0; i < 1000; i++)
new String(i);
}
function Item(val) {
this.value = val;
}
function toString_throw() {
var s = this.value.toString();
if (this.value >= size/2)
throw(exceptionString);
s = ('0000' + s).slice(-digits);
return s;
}
function test() {
for (var i = 0; i < a.length; i++) {
a[i] = new Item(a.length - i - 1);
a[i].toString = toString_throw;
}
try {
a.sort();
} catch(err) {
catchArg = err;
shouldBe("catchArg", "exceptionString");
do_gc();
return;
}
debug('ERROR: Never got toString() exception');
}
test();