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 ); }