function runTest(oTest) {
			function onLoad() {
				var oQUnit = oTest.frame.contentWindow.QUnit;

				oTest.frame.removeEventListener("load", onLoad);
				// see https://github.com/js-reporters/js-reporters (@since QUnit 2)
				oQUnit.on("runStart", function (oDetails) {
					oTest.testCounts = oDetails.testCounts;
					oTest.testCounts.finished = 0;
					oTest.infoNode.data = ": 0/" + oTest.testCounts.total;
				});
				oQUnit.on("testEnd", function () {
					oTest.testCounts.finished += 1;
					oTest.infoNode.data = ": " + oTest.testCounts.finished + "/"
						+ oTest.testCounts.total;
				});
				oQUnit.on("runEnd", function (oDetails) {
					oTest.testCounts = oDetails.testCounts;
					summary(oDetails.runtime, oTest);
					oTest.element.firstChild.classList.remove("running");
					if (oDetails.status === "failed") {
						oTest.element.firstChild.classList.add("failed");
						oFirstFailedTest = oFirstFailedTest || oTest;
					} else if (!mParameters.keepResults) {
						// remove iframe in order to free memory
						document.body.removeChild(oTest.frame);
						oTest.frame = undefined;
					}
					if (bVisible && oTest === oSelectedTest) {
						select(oTest); // unselect the test to make it invisible
					}
					iRunningTests -= 1;
					next();
				});
			}

			oTest.top = iTop;
			iTop += 1000;
			oTest.frame = document.createElement("iframe");
			oTest.frame.src = oTest.url;
			oTest.frame.setAttribute("height", "900");
			oTest.frame.setAttribute("width", "1600");
			oTest.frame.style.position = "fixed";
			oTest.frame.style.top = oTest.top + "px";
			document.body.appendChild(oTest.frame);
			oTest.element.firstChild.classList.add("running");
			iRunningTests += 1;
			oTest.frame.addEventListener("load", onLoad);
			if (bVisible) {
				select(oTest);
			}
		}
// at the frame's QUnit to observe the progress and notice when it's finished
at the frame's QUnit to observe the progress and notice when it's finished
at the frame ' s QUnit to observe the progress and notice when it ' s finished
function runTest(oTest) {
			function onLoad() {
				var oQUnit = oTest.frame.contentWindow.QUnit;
				oTest.frame.removeEventListener("load", onLoad);
				oQUnit.on("runStart", function (oDetails) {
					oTest.testCounts = oDetails.testCounts;
					oTest.testCounts.finished = 0;
					oTest.infoNode.data = ": 0/" + oTest.testCounts.total;
				});
				oQUnit.on("testEnd", function () {
					oTest.testCounts.finished += 1;
					oTest.infoNode.data = ": " + oTest.testCounts.finished + "/"
						+ oTest.testCounts.total;
				});
				oQUnit.on("runEnd", function (oDetails) {
					oTest.testCounts = oDetails.testCounts;
					summary(oDetails.runtime, oTest);
					oTest.element.firstChild.classList.remove("running");
					if (oDetails.status === "failed") {
						oTest.element.firstChild.classList.add("failed");
						oFirstFailedTest = oFirstFailedTest || oTest;
					} else if (!mParameters.keepResults) {
						document.body.removeChild(oTest.frame);
						oTest.frame = undefined;
					}
					if (bVisible && oTest === oSelectedTest) {
						select(oTest); 
					}
					iRunningTests -= 1;
					next();
				});
			}
			oTest.top = iTop;
			iTop += 1000;
			oTest.frame = document.createElement("iframe");
			oTest.frame.src = oTest.url;
			oTest.frame.setAttribute("height", "900");
			oTest.frame.setAttribute("width", "1600");
			oTest.frame.style.position = "fixed";
			oTest.frame.style.top = oTest.top + "px";
			document.body.appendChild(oTest.frame);
			oTest.element.firstChild.classList.add("running");
			iRunningTests += 1;
			oTest.frame.addEventListener("load", onLoad);
			if (bVisible) {
				select(oTest);
			}
		}
function runTest ( oTest ) { function onLoad ( ) { var oQUnit = oTest . frame . contentWindow . QUnit ; oTest . frame . removeEventListener ( "load" , onLoad ) ; oQUnit . on ( "runStart" , function ( oDetails ) { oTest . testCounts = oDetails . testCounts ; oTest . testCounts . finished = 0 ; oTest . infoNode . data = ": 0/" + oTest . testCounts . total ; } ) ; oQUnit . on ( "testEnd" , function ( ) { oTest . testCounts . finished += 1 ; oTest . infoNode . data = ": " + oTest . testCounts . finished + "/" + oTest . testCounts . total ; } ) ; oQUnit . on ( "runEnd" , function ( oDetails ) { oTest . testCounts = oDetails . testCounts ; summary ( oDetails . runtime , oTest ) ; oTest . element . firstChild . classList . remove ( "running" ) ; if ( oDetails . status === "failed" ) { oTest . element . firstChild . classList . add ( "failed" ) ; oFirstFailedTest = oFirstFailedTest || oTest ; } else if ( ! mParameters . keepResults ) { document . body . removeChild ( oTest . frame ) ; oTest . frame = undefined ; } if ( bVisible && oTest === oSelectedTest ) { select ( oTest ) ; } iRunningTests -= 1 ; next ( ) ; } ) ; } oTest . top = iTop ; iTop += 1000 ; oTest . frame = document . createElement ( "iframe" ) ; oTest . frame . src = oTest . url ; oTest . frame . setAttribute ( "height" , "900" ) ; oTest . frame . setAttribute ( "width" , "1600" ) ; oTest . frame . style . position = "fixed" ; oTest . frame . style . top = oTest . top + "px" ; document . body . appendChild ( oTest . frame ) ; oTest . element . firstChild . classList . add ( "running" ) ; iRunningTests += 1 ; oTest . frame . addEventListener ( "load" , onLoad ) ; if ( bVisible ) { select ( oTest ) ; } }
at the frame's QUnit to observe the progress and notice when it's finished
at the frame ' s QUnit to observe the progress and notice when it ' s finished
// see https://github.com/js-reporters/js-reporters (@since QUnit 2) // remove iframe in order to free memory // unselect the test to make it invisible