var
gotoLabels= {};
var
whileLabels = {};
// overload the original Selenium reset function
Selenium.prototype.reset =
function
() {
// reset the labels
this
.initialiseLabels();
// proceed with original reset code
this
.defaultTimeout = Selenium.DEFAULT_TIMEOUT;
this
.browserbot.selectWindow(
"null"
);
this
.browserbot.resetPopups();
}
Selenium.prototype.initialiseLabels =
function
()
{
gotoLabels = {};
whileLabels = { ends: {}, whiles: {} };
var
command_rows = [];
var
numCommands = testCase.commands.length;
for
(
var
i = 0; i < numCommands; ++i) {
var
x = testCase.commands[i];
command_rows.push(x);
}
var
cycles = [];
for
(
var
i = 0; i < command_rows.length; i++ ) {
if
(command_rows[i].type ==
'command'
)
switch
( command_rows[i].command.toLowerCase() ) {
case
"label"
:
gotoLabels[ command_rows[i].target ] = i;
break
;
case
"while"
:
case
"endwhile"
:
cycles.push( [command_rows[i].command.toLowerCase(), i] )
break
;
}
}
var
i = 0;
while
( cycles.length ) {
if
( i >= cycles.length ) {
throw
new
Error(
"non-matching while/endWhile found"
);
}
switch
( cycles[i][0] ) {
case
"while"
:
if
( ( i+1 < cycles.length ) && (
"endwhile"
== cycles[i+1][0] ) ) {
// pair found
whileLabels.ends[ cycles[i+1][1] ] = cycles[i][1];
whileLabels.whiles[ cycles[i][1] ] = cycles[i+1][1];
cycles.splice( i, 2 );
i = 0;
}
else
++i;
break
;
case
"endwhile"
:
++i;
break
;
}
}
}
Selenium.prototype.continueFromRow =
function
( row_num )
{
if
(row_num == undefined || row_num ==
null
|| row_num < 0) {
throw
new
Error(
"Invalid row_num specified."
);
}
testCase.debugContext.debugIndex = row_num;
}
// do nothing. simple label
Selenium.prototype.doLabel =
function
(){};
Selenium.prototype.doGotolabel =
function
( label )
{
if
( undefined == gotoLabels[label] ) {
throw
new
Error(
"Specified label '"
+ label +
"' is not found."
);
}
this
.continueFromRow( gotoLabels[ label ] );
};
Selenium.prototype.doGoto = Selenium.prototype.doGotolabel;
Selenium.prototype.doGotoIf =
function
( condition, label )
{
if
( eval(condition) )
this
.doGotolabel( label );
}
Selenium.prototype.doWhile =
function
( condition )
{
if
( !eval(condition) ) {
var
last_row = testCase.debugContext.debugIndex;
var
end_while_row = whileLabels.whiles[ last_row ];
if
( undefined == end_while_row )
throw
new
Error(
"Corresponding 'endWhile' is not found."
);
this
.continueFromRow( end_while_row );
}
}
Selenium.prototype.doEndWhile =
function
()
{
var
last_row = testCase.debugContext.debugIndex;
var
while_row = whileLabels.ends[ last_row ] - 1;
if
( undefined == while_row )
throw
new
Error(
"Corresponding 'While' is not found."
);
this
.continueFromRow( while_row );
}