|
What this is
Other links
The source code
/*
* Copyright 2004 ThoughtWorks, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
function CommandHandlerFactory() {
this.actions = {};
this.asserts = {};
this.accessors = {};
var self = this;
this.registerAction = function(name, action, wait) {
var handler = new ActionHandler(action, wait);
this.actions[name] = handler;
}
this.registerAccessor = function(name, accessor) {
var handler = new AccessorHandler(accessor);
this.accessors[name] = handler;
}
this.registerAssert = function(name, assertion, haltOnFailure) {
var handler = new AssertHandler(assertion, haltOnFailure);
this.asserts[name] = handler;
}
this.getCommandHandler = function(name) {
return this.actions[name] || this.accessors[name] || this.asserts[name] || null;
}
this.registerAll = function(commandObject) {
registerAllActions(commandObject);
registerAllAsserts(commandObject);
registerAllAccessors(commandObject);
}
var registerAllActions = function(commandObject) {
for (var functionName in commandObject) {
if (/^do([A-Z].+)$/.exec(functionName) != null) {
var actionName = RegExp["$1"].toCamelCase();
// Register the action without the wait flag.
var action = commandObject[functionName];
self.registerAction(actionName, action, false);
// Register actionName + "AndWait" with the wait flag;
var waitActionName = actionName + "AndWait";
self.registerAction(waitActionName, action, true);
}
}
}
var registerAllAsserts = function(commandObject) {
for (var functionName in commandObject) {
if (/^assert([A-Z].+)$/.exec(functionName) != null) {
var assertName = functionName;
var verifyName = "verify" + RegExp["$1"];
var assert = commandObject[functionName];
self.registerAssert(assertName, assert, true);
self.registerAssert(verifyName, assert, false);
}
}
}
var registerAllAccessors = function(commandObject) {
for (var functionName in commandObject) {
if (/^get[A-Z].+$/.exec(functionName) != null) {
var accessor = commandObject[functionName];
self.registerAccessor(functionName, accessor);
}
}
}
}
// NOTE: The CommandHandler is effectively an abstract base for ActionHandler,
// AccessorHandler and AssertHandler.
function CommandHandler(type, haltOnFailure, executor) {
this.type = type;
this.haltOnFailure = haltOnFailure;
this.executor = executor;
}
CommandHandler.prototype.execute = function(seleniumApi, command) {
return new CommandResult(this.executor.call(seleniumApi, command.target, command.value));
}
function ActionHandler(action, wait) {
this.base = CommandHandler;
this.base("action", true, action);
if (wait) {
this.wait = true;
}
}
ActionHandler.prototype = new CommandHandler;
ActionHandler.prototype.execute = function(seleniumApi, command) {
if ( seleniumApi.browserbot.hasAlerts() ) {
throw new Error("There was an unexpected Alert! [" + seleniumApi.browserbot.getNextAlert() + "]");
}
var processState = this.executor.call(seleniumApi, command.target, command.value)
// If the handler didn't return a wait flag, check to see if the
// handler was registered with the wait flag.
if (processState == undefined && this.wait) {
processState = SELENIUM_PROCESS_WAIT;
}
return new CommandResult(processState);
}
function AccessorHandler(accessor) {
this.base = CommandHandler;
this.base("accessor", true, accessor);
}
AccessorHandler.prototype = new CommandHandler;
function AssertHandler(assertion, haltOnFailure) {
this.base = CommandHandler;
this.base("assert", haltOnFailure || false, assertion);
}
AssertHandler.prototype = new CommandHandler;
AssertHandler.prototype.execute = function(seleniumApi, command) {
var result = new CommandResult();
try {
var processState = this.executor.call(seleniumApi, command.target, command.value);
result.passed = true;
} catch (e) {
// If this is not a JsUnitException, or we should haltOnFailure, rethrow.
if (!e.isJsUnitException) {
throw e;
}
if (this.haltOnFailure) {
throw new Error(e.jsUnitMessage);
}
result.failed = true;
result.failureMessage = e.jsUnitMessage;
}
return result;
}
function CommandResult(processState) {
this.processState = processState;
this.result = "OK";
}
function SeleniumCommand(command, target, value) {
this.command = command;
this.target = target;
this.value = value;
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.