var SECTION = "15.5.4.7-3";
var VERSION = "ECMA_2";
startTest();
var TITLE = "String.protoype.lastIndexOf";
writeHeaderToLog( SECTION + " "+ TITLE);
var testcases = getTestCases();
test();
function getTestCases() {
var array = new Array();
var item = 0;
array[item++] = new TestCase( SECTION,
"var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 0 )",
-1,
eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 0 )") );
array[item++] = new TestCase( SECTION,
"var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 1 )",
1,
eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 1 )") );
array[item++] = new TestCase( SECTION,
"var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 2 )",
1,
eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 2 )") );
array[item++] = new TestCase( SECTION,
"var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 10 )",
1,
eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 10 )") );
array[item++] = new TestCase( SECTION,
"var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r' )",
1,
eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r' )") );
return array;
}
function test() {
for ( tc = 0; tc < testcases.length; tc++ ) {
testcases[tc].passed = writeTestCaseResult(
testcases[tc].expect,
testcases[tc].actual,
testcases[tc].description +" = "+ testcases[tc].actual );
testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "
}
stopTest();
return ( testcases );
}
function LastIndexOf( string, search, position ) {
string = String( string );
search = String( search );
position = Number( position )
if ( isNaN( position ) ) {
position = Infinity;
} else {
position = ToInteger( position );
}
result5= string.length;
result6 = Math.min(Math.max(position, 0), result5);
result7 = search.length;
if (result7 == 0) {
return Math.min(position, result5);
}
result8 = -1;
for ( k = 0; k <= result6; k++ ) {
if ( k+ result7 > result5 ) {
break;
}
for ( j = 0; j < result7; j++ ) {
if ( string.charAt(k+j) != search.charAt(j) ){
break;
} else {
if ( j == result7 -1 ) {
result8 = k;
}
}
}
}
return result8;
}
function ToInteger( n ) {
n = Number( n );
if ( isNaN(n) ) {
return 0;
}
if ( Math.abs(n) == 0 || Math.abs(n) == Infinity ) {
return n;
}
var sign = ( n < 0 ) ? -1 : 1;
return ( sign * Math.floor(Math.abs(n)) );
}