﻿<?xml version="1.0" encoding="utf-8" ?>
<application-components>
	<application-component id = "testable">
		<![CDATA[
         component_init:function(){
			Hemi.include("hemi.app");
			Hemi.include("hemi.app.module");
			Hemi.include("hemi.app.module.test");
			Hemi.include("hemi.css");
			Hemi.css.loadStyleSheet("Styles/testsuite.css","TestSuite");
			this.scopeHandler("test_status",0,0,1);
			this.scopeHandler("test_suite",0,0,1);
			this.getObjects().testSuites = [];
			this.getObjects().testIcons = {};
			this.getObjects().tests = [];
			this.setupTests();
		},
		setupTests : function(){
			for(var i in this.getObjects().testSuites){
				Hemi.app.module.test.service.UnloadTest(i);
			}
			
			this.getObjects().testSuites = [];
			this.getObjects().testIcons = {};
			this.getObjects().tests = [];
			if(this.getObjects().testBox){
				document.body.removeChild(this.getObjects().testBox);
			}
			var oTB = document.createElement("div");
			var oTT = 0;
			var sTP = this.getProperties().testPath;
			var sA = Hemi.GetSpecifiedAttribute(this.getContainer(),"auto-test");
			if(sA && typeof this.getProperties().autoTest == "undefined"){
				this.getProperties().autoTest = (sA == "1" || sA == "true" ? 1 : 0);
			}
			if(!sTP){
				sTP = Hemi.GetSpecifiedAttribute(this.getContainer(),"test-path");
				if(!sTP) sTP = "Tests/";
				this.getProperties().testPath = sTP;
			}
			if(!this.getProperties().tests){
				var aT = Hemi.GetSpecifiedAttribute(this.getContainer(),"tests");
				this.getProperties().tests = aT;
			}
			if(this.getProperties().tests){
				this.getObjects().tests = this.getProperties().tests.split(",");
			}
			var sId = this.getProperties().testTarget;
			if(!sId)
				sId = (this.getContainer() ? Hemi.GetSpecifiedAttribute(this.getContainer(),"test-target") : 0);
				
			if(typeof sId == "string") oTT = document.getElementById(sId);
			else if (typeof sId == "object") oTT = sId;
			
			if(!oTT && this.getContainer()) oTT = this.getContainer();
				
			if(oTT){
				document.body.appendChild(oTB);
				this.getObjects().testBox = oTB;
				this.getObjects().testTarget = oTT;
				oTB.className = "test_box";
				oTB.style.top = (Hemi.css.getAbsoluteTop(oTT) - oTT.offsetHeight) + "px";
				oTB.style.left = Hemi.css.getAbsoluteLeft(oTT) + "px";
				var sId = this.getObjectId();
				var oBtn = document.createElement("input");
				oBtn.setAttribute("type","button");
				oBtn.setAttribute("value","X");
				oBtn.onclick = function(){
					var o = Hemi.registry.service.getObject(sId);
					document.body.removeChild(o.getObjects().testBox);
					o.getObjects().testBox = 0;
				};
				oTB.appendChild(oBtn);

				if(!this.getProperties().autoTest){
					
					oBtn = document.createElement("input");
					oBtn.setAttribute("type","button");
					oBtn.setAttribute("value","Run");
					oBtn.onclick = function(){
						var o = Hemi.registry.service.getObject(sId);
						o.RunTests();
					};
					oTB.appendChild(oBtn);
				}
			}
				
			this.LoadTests();
			if(this.getProperties().autoTest) this.RunTests();
		},
		component_destroy : function(){
			for(var i in this.getObjects().testSuites){
				//Hemi.app.module.test.service.UnloadTest(i);
				this.getObjects().testSuites[i].ResetSuite();
			}
			if(this.getObjects().testBox) document.body.removeChild(this.getObjects().testBox);		 
		},
		LoadTests : function(){
			var _p = this.getProperties(), _o = this.getObjects(), aM, n;
			for(var i = 0; i < _o.tests.length; i++){
				n = _o.tests[i];
				_o.testSuites[n] = Hemi.app.module.test.service.NewTest(_o.tests[i],_o.testTarget,this._prehandle_test_status, this._prehandle_test_suite, (_p.testText ? _p.testText : _p.testPath),_p.testText);
                _o.testSuites[n].getProperties().componentReferenceId = this.getObjectId();
				aM = _o.testSuites[n].TestMembers;
				for(var m = 0; m < aM.length; m++){
					this.RenderTest(n, aM[m]);
				}
			}
		},
		RenderTest : function(c, s){
			var _i = this.getObjects().testIcons;
				
			var oI = document.createElement("img");
			oI.setAttribute("width","20");
			oI.setAttribute("height","20");
		    oI.setAttribute("src",Hemi.hemi_base + "Graphics/star_empty.jpg");
			_i[c + "-" + s] = oI;
			this.getObjects().testBox.appendChild(oI);
		},
		RunTests : function(){
			var _t = this.getObjects().testSuites;
			for(var i in _t){
				_t[i].RunTests();
			}
		},
		_handle_test_status : function(t, m, i){
      //alert('status: ' + i);
			var sIco = (i * 25);
			if(m.error) sIco="error";
			this.getObjects().testIcons[t.name + "-" + m.name].src = Hemi.hemi_base + "Graphics/star_" + sIco + ".jpg";
			  
			/// Hemi.xml.setInnerXHTML(this.GetElementByRID(t.name + "-" + m.name + "-notes"),"Time: " + (m.stop_time.getTime() - m.start_time.getTime()) + "ms / Result: " + m.result);
      
		},
		_handle_test_suite : function(o){
			for(var i = 0; i < o.TestMembers.length; i++){
			var sIco = "hover";
			var oC = o.getTestByName(o.TestMembers[i]);
			if(oC.error) sIco = "error";
      //alert(sIco);
			this.getObjects().testIcons[o.name + "-" + o.TestMembers[i]].src = Hemi.hemi_base + "Graphics/star_" + sIco + ".jpg";
			}
		}
		]]>
	</application-component>
</application-components>

