/* Copyright (c) 2007, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt version: 2.3.0 */ YAHOO.namespace("tool");YAHOO.tool.TestLogger=function(element,config){YAHOO.tool.TestLogger.superclass.constructor.call(this,element,config);this.init();};YAHOO.lang.extend(YAHOO.tool.TestLogger,YAHOO.widget.LogReader,{footerEnabled:true,newestOnTop:false,formatMsg:function(message){var category=message.category;var text=this.html2Text(message.msg);return"

"+category.toUpperCase()+" "+text+"

";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);} this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(testRunner){if(this._runner){this.clearTestRunner();} this._runner=testRunner;testRunner.subscribe(testRunner.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);testRunner.subscribe(testRunner.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(data){var TestRunner=YAHOO.tool.TestRunner;var message="";var messageType="";switch(data.type){case TestRunner.BEGIN_EVENT:message="Testing began at "+(new Date()).toString()+".";messageType="info";break;case TestRunner.COMPLETE_EVENT:message="Testing completed at "+(new Date()).toString()+".\nPassed:" +data.results.passed+" Failed:"+data.results.failed+" Total:"+data.results.total;messageType="info";break;case TestRunner.TEST_FAIL_EVENT:message=data.testName+": "+data.error.getMessage();messageType="fail";break;case TestRunner.TEST_IGNORE_EVENT:message=data.testName+": ignored.";messageType="ignore";break;case TestRunner.TEST_PASS_EVENT:message=data.testName+": passed.";messageType="pass";break;case TestRunner.TEST_SUITE_BEGIN_EVENT:message="Test suite \""+data.testSuite.name+"\" started.";messageType="info";break;case TestRunner.TEST_SUITE_COMPLETE_EVENT:message="Test suite \""+data.testSuite.name+"\" completed.\nPassed:" +data.results.passed+" Failed:"+data.results.failed+" Total:"+data.results.total;messageType="info";break;case TestRunner.TEST_CASE_BEGIN_EVENT:message="Test case \""+data.testCase.name+"\" started.";messageType="info";break;case TestRunner.TEST_CASE_COMPLETE_EVENT:message="Test case \""+data.testCase.name+"\" completed.\nPassed:" +data.results.passed+" Failed:"+data.results.failed+" Total:"+data.results.total;messageType="info";break;default:message="Unexpected event "+data.type;message="info";} YAHOO.log(message,messageType,"TestRunner");}});YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function TestRunner(){TestRunner.superclass.constructor.apply(this,arguments);this.items=[];var events=[this.TEST_CASE_BEGIN_EVENT,this.TEST_CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUITE_COMPLETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var i=0;i0){YAHOO.util.Assert.fail(message||"Array should be empty.");}},isNotEmpty:function(actual,message){if(actual.length===0){YAHOO.util.Assert.fail(message||"Array should not be empty.");}},itemsAreSame:function(expected,actual,message){var len=Math.max(expected.length,actual.length);for(var i=0;i=0;i--){if(haystack[i]===needle){YAHOO.util.Assert.areEqual(index,i,message||"Value exists at index "+i+" but should be at index "+index+".");return;}} YAHOO.util.Assert.fail(message||"Value doesn't exist in array.");}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(expected,actual,message){var properties=[];for(var property in expected){properties.push(property);} for(var i=0;i0)?charCode:keyCode;target.fireEvent("on"+type,event);}else{throw new Error("simulateKeyEvent(): No event simulation framework present.");}},simulateMouseEvent:function(target,type,bubbles,cancelable,view,detail,screenX,screenY,clientX,clientY,ctrlKey,altKey,shiftKey,metaKey,button,relatedTarget) {target=YAHOO.util.Dom.get(target);if(!target){throw new Error("simulateMouseEvent(): Invalid target.");} if(YAHOO.lang.isString(type)){type=type.toLowerCase();switch(type){case"mouseover":case"mouseout":case"mousedown":case"mouseup":case"click":case"dblclick":case"mousemove":break;default:throw new Error("simulateMouseEvent(): Event type '"+type+"' not supported.");}}else{throw new Error("simulateMouseEvent(): Event type must be a string.");} if(!YAHOO.lang.isBoolean(bubbles)){bubbles=true;} if(!YAHOO.lang.isBoolean(cancelable)){cancelable=(type!="mousemove");} if(!YAHOO.lang.isObject(view)){view=window;} if(!YAHOO.lang.isNumber(detail)){detail=1;} if(!YAHOO.lang.isNumber(screenX)){screenX=0;} if(!YAHOO.lang.isNumber(screenY)){screenY=0;} if(!YAHOO.lang.isNumber(clientX)){clientX=0;} if(!YAHOO.lang.isNumber(clientY)){clientY=0;} if(!YAHOO.lang.isBoolean(ctrlKey)){ctrlKey=false;} if(!YAHOO.lang.isBoolean(altKey)){altKey=false;} if(!YAHOO.lang.isBoolean(shiftKey)){shiftKey=false;} if(!YAHOO.lang.isBoolean(metaKey)){metaKey=false;} if(!YAHOO.lang.isNumber(button)){button=0;} if(YAHOO.lang.isFunction(document.createEvent)){var event=document.createEvent("MouseEvents");if(event.initMouseEvent){event.initMouseEvent(type,bubbles,cancelable,view,detail,screenX,screenY,clientX,clientY,ctrlKey,altKey,shiftKey,metaKey,button,relatedTarget);}else{event=document.createEvent("UIEvents");event.initEvent(type,bubbles,cancelable);event.view=view;event.detail=detail;event.screenX=screenX;event.screenY=screenY;event.clientX=clientX;event.clientY=clientY;event.ctrlKey=ctrlKey;event.altKey=altKey;event.metaKey=metaKey;event.shiftKey=shiftKey;event.button=button;event.relatedTarget=relatedTarget;} if(relatedTarget&&!event.relatedTarget){if(type=="mouseout"){event.toElement=relatedTarget;}else if(type=="mouseover"){event.fromElement=relatedTarget;}} target.dispatchEvent(event);}else if(YAHOO.lang.isObject(document.createEventObject)){event=document.createEventObject();event.bubbles=bubbles;event.cancelable=cancelable;event.view=view;event.detail=detail;event.screenX=screenX;event.screenY=screenY;event.clientX=clientX;event.clientY=clientY;event.ctrlKey=ctrlKey;event.altKey=altKey;event.metaKey=metaKey;event.shiftKey=shiftKey;switch(button){case 0:event.button=1;break;case 1:event.button=4;break;case 2:break;default:event.button=0;} event.relatedTarget=relatedTarget;target.fireEvent("on"+type,event);}else{throw new Error("simulateMouseEvent(): No event simulation framework present.");}},fireMouseEvent:function(target,type,options) {options=options||{};this.simulateMouseEvent(target,type,options.bubbles,options.cancelable,options.view,options.detail,options.screenX,options.screenY,options.clientX,options.clientY,options.ctrlKey,options.altKey,options.shiftKey,options.metaKey,options.button,options.relatedTarget);},click:function(target,options){this.fireMouseEvent(target,"click",options);},dblclick:function(target,options){this.fireMouseEvent(target,"dblclick",options);},mousedown:function(target,options){this.fireMouseEvent(target,"mousedown",options);},mousemove:function(target,options){this.fireMouseEvent(target,"mousemove",options);},mouseout:function(target,options){this.fireMouseEvent(target,"mouseout",options);},mouseover:function(target,options){this.fireMouseEvent(target,"mouseover",options);},mouseup:function(target,options){this.fireMouseEvent(target,"mouseup",options);},fireKeyEvent:function(type,target,options) {options=options||{};this.simulateKeyEvent(target,type,options.bubbles,options.cancelable,options.view,options.ctrlKey,options.altKey,options.shiftKey,options.metaKey,options.keyCode,options.charCode);},keydown:function(target,options){this.fireKeyEvent("keydown",target,options);},keypress:function(target,options){this.fireKeyEvent("keypress",target,options);},keyup:function(target,options){this.fireKeyEvent("keyup",target,options);}};YAHOO.namespace("tool");YAHOO.tool.TestManager={TEST_PAGE_BEGIN_EVENT:"testpagebegin",TEST_PAGE_COMPLETE_EVENT:"testpagecomplete",TEST_MANAGER_BEGIN_EVENT:"testmanagerbegin",TEST_MANAGER_COMPLETE_EVENT:"testmanagercomplete",_curPage:null,_frame:null,_logger:null,_timeoutId:0,_pages:[],_results:null,_handleTestRunnerComplete:function(data){this.fireEvent(this.TEST_PAGE_COMPLETE_EVENT,{page:this._curPage,results:data.results});this._processResults(this._curPage,data.results);this._logger.clearTestRunner();if(this._pages.length){this._timeoutId=setTimeout(function(){YAHOO.tool.TestManager._run();},1000);}},_processResults:function(page,results){var r=this._results;r.page_results[page]=results;if(results.passed){r.pages_passed++;r.tests_passed+=results.passed;} if(results.failed){r.pages_failed++;r.tests_failed+=results.failed;r.failed.push(page);}else{r.passed.push(page);} if(!this._pages.length){this.fireEvent(this.TEST_MANAGER_COMPLETE_EVENT,this._results);}},_run:function(){this._curPage=this._pages.shift();this.fireEvent(this.TEST_PAGE_BEGIN_EVENT,this._curPage);this._frame.location.replace(this._curPage);},load:function(){if(parent.YAHOO.tool.TestManager!==this){parent.YAHOO.tool.TestManager.load();}else{if(this._frame){var TestRunner=this._frame.YAHOO.tool.TestRunner;this._logger.setTestRunner(TestRunner);TestRunner.subscribe(TestRunner.COMPLETE_EVENT,this._handleTestRunnerComplete,this,true);TestRunner.run();}}},setPages:function(pages){this._pages=pages;},start:function(){if(!this._initialized){this.createEvent(this.TEST_PAGE_BEGIN_EVENT);this.createEvent(this.TEST_PAGE_COMPLETE_EVENT);this.createEvent(this.TEST_MANAGER_BEGIN_EVENT);this.createEvent(this.TEST_MANAGER_COMPLETE_EVENT);if(!this._frame){var frame=document.createElement("iframe");frame.style.visibility="hidden";frame.style.position="absolute";document.body.appendChild(frame);this._frame=frame.contentWindow||frame.contentDocument.ownerWindow;} if(!this._logger){this._logger=new YAHOO.tool.TestLogger();} this._initialized=true;} this._results={pages_passed:0,pages_failed:0,tests_passed:0,tests_failed:0,passed:[],failed:[],page_results:{}};this.fireEvent(this.TEST_MANAGER_BEGIN_EVENT,null);this._run();},stop:function(){clearTimeout(this._timeoutId);}};YAHOO.lang.augmentObject(YAHOO.tool.TestManager,YAHOO.util.EventProvider.prototype);YAHOO.register("yuitest",YAHOO.tool.TestRunner,{version:"2.3.0",build:"442"});