
/*
	"Hemi" JavaScript Framework
	Engine for Web Applications 3.1
	Composite file "hemi.comp.js" release: 3.1.9
	Copyright 2002 - 2010. All Rights Reserved.
	Author: Stephen W. Cote
	Email: sw.cote@gmail.com
	Project: http://www.whitefrost.com/Hemi/
	BSD License: http://www.whitefrost.com/Hemi.license.txt
*/
(function(){H.include("hemi.object");H.include("hemi.util.logger");H.include("hemi.app.module");H.include("hemi.task");H.include("hemi.event");H.namespace("app.module.test",H,{service:null,serviceImpl:
function(){var t=this;H.prepareObject("test_module_service","3.1.9",0,t);H.util.logger.addLogger(t,"Test Module Service","Application Test Module Service","620");Hemi.event.addScopeBuffer(t);t.UnloadTest=function(v){var o,_m=H.app.module.service,i=0,k,_t=H.task.service;o=_m.getModuleByName(v);if(!o)return 0;for(;i<o.Impls.length;){k=_t.getTaskByName("TestSuite-"+o.Impls[i++]);H.task.service.endTask(k.task_id);}return H.app.module.service.UnloadModule(v);};t.NewTest=function(n,x,ft,fs,p,b){if(!n)return 0;if(!p)p="Tests/";var m=H.app.module.service.NewModule(n,x,p,t,(b?1:0),"test_module");m.o.sh=fs;m.o.th=ft;m.ResetSuite=function(){var a=m.TestMembers,k,h,i;if((i=m.p.ti)){m.p.ti=0;this.logDebug("Unset suite task:"+i);H.task.service.returnDependency(H.task.service.getTask(i));k=H.task.service.endTask(i,1);for(h=0;h<a.length;)H.task.service.clearDependency(m.p.ts+"-"+a[h++]);}m.p.ts="TestSuite-"+m.getObjectId();k=H.task.service.addTask(m.p.ts,"default","[nothing]","function",Hemi.registry.getApplyStatement(m,"handle_testsuite_task"));for(h=0;h<a.length;)H.task.service.addTaskDependency(k,m.p.ts+"-"+a[h++]);m.p.ti=k.task_id;this.logDebug("Reset suite task:"+k.task_id+" / "+k.task_state);};m.handle_testsuite_task=function(s,v){if(!m.p.ti){this.log("Ignore completion of disengaged task");return;}m.log("TestSuite "+m.name+" Completed");if(D.TF(m.o.sh))m.o.sh(m);};m.ResetSuite();return m;};t.handle_testsuite_task=function(o,v){};t.DecorateModuleContent=function(n,p,r){var s=[],b=[],a=r.match(/function\s*test\S*\(/gi),g;for(var m=0;a!=null&&m<a.length;m++){g=a[m].match(/function\s*(test\S*)\(/i);if(g&&g.length>1){s.push("\""+g[1]+"\"");b.push("this._X_"+g[1]+"=function(){var o=this._ST(\""+g[1]+"\");var b=false;try{this._TS(o,1);b="+g[1]+".apply(this,[o]);this._TS(o,2);if(D.TU(b))b=true;}catch(e){this._AM(o,e);o.error=1;}this._TS(o,3);if(b){End"+g[1]+"(b);};return o;};");b.push("function Continue"+g[1]+"(){var b=true,o=Module.getTestByName(\""+g[1]+"\");if(!o){Module.logWarning(\"Test "+g[1]+" result not found.\");return;}if(o.status==4){Module.logWarning(\"Attempt made to complete test "+g[1]+",which is already completed.\");return;}if(typeof HandleContinue"+g[1]+"==\"function\"){try{b=HandleContinue"+g[1]+".apply(Module,[o]);if(D.TU(b))b=true;}catch(e){Module._AM(o,e);o.error=1;}}if(b){End"+g[1]+"(b);};return o;}");b.push("\nfunction End"+g[1]+"(b){var o=Module.getTestByName(\""+g[1]+"\");if(!o){Module.logWarning(\"Test "+g[1]+" result not found.\");return;}Module._SP(o,b);Module._TS(o,4);Hemi.task.service.returnDependency(\"TestSuite-\"+Module.getObjectId()+\"-"+g[1]+"\");}\n");}}return "this.Assert=function(b,m){if(!b){throw m;}};"+"H.object.addObjectAccessor(this,\"test\");"+"H.util.logger.addLogger(this,\"Test Module\",\"Test Module Service\",\"621\");"+"this.TestMembers=["+s.join(",")+"];"+"this.getReport=function(){var a=[\""+n+" Test Results\"],m=this.getTests(),i=0,r;for(;i<m.length;){r=m[i++];if(!r)continue;var rt=(r.stop_time&&r.start_time?parseInt((r.stop_time.getTime()-r.start_time.getTime())/1000):0);a.push('Test:'+r.name+'('+rt+' sec)\\n\\tErrors:'+(r.error?'Yes':'No')+'\\n\\tMessages:');for(var p=0;p<r.messages.length;p++){a.push('\\n\\t\\t'+r.messages[p]);}}return a.join('\\n');};"+"this._ST=function(n){this.logDebug(\"Start Test \"+n);var o=this.getTestByName(n);if(o)o=this.removeTest(o);o={name:n,start_time:(new Date()),stop_time:0,messages:[],result:0,error:0,status:0,data:0};this.addNewTest(o,n);return o;};"+"this._SP=function(o,a){if(a==true)this.log(\"Test "+n+".\"+o.name+\" Succeeded\");else this.logWarning(\"Test "+n+".\"+o.name+\" Failed\");this.logDebug(\"Stop Test "+n+"\");o.stop_time=(new Date());o.result=a;};"+"this._AM=function(o,a){this.logError(\"Test "+n+":\"+a);o.messages.push(a);};"+"this.RunTest=function(s){var e=\""+n+"\",f=\"_X_\"+s;if(!this[f]){this.logError(\"Invalid test:\"+f);return false;}return this[f]();};"+"this.RunTests=function(){var o=H.task.service.getTask(this.p.ti);if(o.task_state>1)this.ResetSuite();Hemi.task.service.executeTaskByName(this.getProperties().ts);var e=\""+n+"\",i=0;for(;i<this.TestMembers.length;i++){this.RunTest(this.TestMembers[i]);}};"+"this._TS=function(o,s){if(o.status>=s)return;o.status=s;if(D.TF(this.o.th))this.o.th(this,o,s);};"+"this.getTestTask=function(){return Hemi.task.service.getTask(this.p.ti);};"+b.join("");};H.registry.service.addObject(t);t.r=4;}},1);}());
/* End Hemi Framework 3.1 */

