Author: ygrego Date: 2015-04-27 15:09:08 +0000 (Mon, 27 Apr 2015) New Revision: 1270 Url: http://forge.nuiton.org/projects/sandbox/repository/revisions/1270 Log: Addition of methods "displayGlobalTestResults", "totalPercentage" and "percentageCalculating". Modification of method "runAll" in order to launch method "totalPercentage" and declare object "currentResult" to calculate the number of tests failed and succeeded. Modification of method "runLoop" in order to reset the object "currentResult" when a other test object must be launch. Modification of method "displayInLineArray" in order to display a table containing results for each test section which has been launched. Modified: oipf/js/test/Test.js Modified: oipf/js/test/Test.js =================================================================== --- oipf/js/test/Test.js 2015-04-27 14:57:07 UTC (rev 1269) +++ oipf/js/test/Test.js 2015-04-27 15:09:08 UTC (rev 1270) @@ -409,15 +409,135 @@ label: "Call method 'and' of a 'Query' object.", method: "testOr" } + ]},{ + name: "ConfigurationTest", + object: new ConfigurationTest(), + tests: [ + { + label: "Call method 'setScreenSize' with right parameters(Type and value).", + method: "testSetScreenSize" + }, + { + label: "Call method 'setScreenSize' without parameters.", + method: "testSetScreenSizeWithoutParameters" + }, + { + label: "Call method 'setScreenSize' with 'String' parameters.", + method: "testSetScreenSizeWithUnexpectedTypeParameters" + }, + { + label: "Call method 'setScreenSize' with an excessive number of parameters.", + method: "testSetScreenSizeWithExcessiveParametersNumber" + }, + { + label: "Call method 'setTvStandard' with right parameters(Type and value).", + method: "testSetTvStandard" + }, + { + label: "Call method 'setTvStandard' without parameters.", + method: "testSetTvStandardWihtoutParameters" + }, + { + label: "Call method 'setTvStandard' with wrong parameters(Type).", + method: "testSetTvStandardWithUnexpectedTypeParameters" + }, + { + label: "Call method 'setTvStandard' with an excessive number of parameters.", + method: "testSetTvStandardWithExcessiveParametersNumber" + }, + { + label: "Call method 'setPvrSupport' with right parameters(Type and value).", + method: "testSetPvrSupport" + }, + { + label: "Call method 'setPvrSupport' without parameters.", + method: "testSetPvrSupportWithoutParameters" + }, + { + label: "Call method 'setPvrSupport' with wrong parameters(Type).", + method: "testSetPvrSupportWithUnexpectedTypeParameters" + }, + { + label: "Call method 'setPvrSupport' with an excessive number of parameters.", + method: "testSetPvrSupportWithExcessiveParametersNumber" + }, + { + label: "Call method 'setPowerState' with right parameters(Type and value).", + method: "testSetPowerState" + }, + { + label: "Call method 'setPowerState' without parameters.", + method: "testSetPowerStateWithoutParameters" + }, + { + label: "Call method 'setPowerState' with wrong parameters(Type).", + method: "testSetPowerStateWithUnexpectedTypeParameters" + }, + { + label: "Call method 'setPowerState' with an excessive number of parameters.", + method: "testSetPowerStateWithExcessiveParametersNumber" + }, + { + label: "Call method 'setDigestCredentials' with right parameters(Type and value).", + method: "testSetDigestCredentials" + }, + { + label: "Call method 'setDigestCredentials' without parameters.", + method: "testSetDigestCredentialsWithoutParameters" + }, + { + label: "Call method 'setDigestCredentials' with wrong parameters(Type).", + method: "testSetDigestCredentialsWithUnexpectedTypeParameters" + }, + { + label: "Call method 'setDigestCredentials' with an excessive number of parameters.", + method: "testSetDigestCredentialsWithExcessiveParametersNumber" + }, + { + label: "Call method 'clearDigestCredentials' with right parameters(Type and value).", + method: "testClearDigestCredentials" + }, + { + label: "Call method 'clearDigestCredentials' without parameters.", + method: "testClearDigestCredentialsWithoutParameters" + }, + { + label: "Call method 'clearDigestCredentials' with wrong parameters(Type).", + method: "testClearDigestCredentialsWithUnexpectedTypeParameters" + }, + { + label: "Call method 'clearDigestCredentials' with an excessive number of parameters.", + method: "testClearDigestCredentialsWithExcessiveParametersNumber" + }, + { + label: "Call method 'hasDigestCredentials' with right parameters(Type and value).", + method: "testHasDigestCredentials" + }, + { + label: "Call method 'hasDigestCredentials' without parameters.", + method: "testHasDigestCredentialsWithoutParameters" + }, + { + label: "Call method 'hasDigestCredentials' with wrong parameters(Type).", + method: "testHasDigestCredentialsWithUnexpectedTypeParameters" + }, + { + label: "Call method 'hasDigestCredentials' with an excessive number of parameters.", + method: "testHasDigestCredentialsWithExcessiveParametersNumber" + } ] }], init: function() { - }, runAll: function() { - this.runLoop(0, 0); + this.results = []; + this.currentResult = { + succeeded: 0, + failed: 0 + }; + this.runLoop(0, 0).then(this.totalPercentage.bind(this)); }, runLoop: function(indexObject, indexTest) { @@ -428,17 +548,98 @@ var self = this; var loop = function() { if (indexTest < tests.length - 1) { - self.runLoop(indexObject, indexTest + 1); - - } else if (indexObject < self.testsObjects.length -1) { - self.runLoop(indexObject + 1, 0); + return self.runLoop(indexObject, indexTest + 1); + + } else if (indexObject < self.testsObjects.length - 1) { + element.results = { + testName: "", + failed: 0, + succeeded: 0 + }; + element.results.testName = element.name; + element.results.failed = self.currentResult.failed; + element.results.succeeded = self.currentResult.succeeded; + self.currentResult.failed = 0; + self.currentResult.succeeded = 0; + return self.runLoop(indexObject + 1, 0); + } + if (indexObject == self.testsObjects.length - 1) { + element.results = { + testName: "", + failed: 0, + succeeded: 0 + }; + element.results.testName = element.name; + element.results.failed = self.currentResult.failed; + element.results.succeeded = self.currentResult.succeeded; + } }; - this.updateTestResult(tests[indexTest], object) + return this.updateTestResult(tests[indexTest], object) .then(loop).catch(loop); + }, + percentageCalculating: function(currentResult) { + this.round = Math.round.bind(Math); + var testNumber = currentResult.failed + currentResult.succeeded; + currentResult.failed = this.round((currentResult.failed/testNumber)*100); + currentResult.succeeded = this.round((currentResult.succeeded/testNumber)*100); + }, + + totalPercentage: function() { + this.resultsPercentageFailed = 0; + this.resultsPercentageSucceeded = 0; + + for (var i = 0, l = this.testsObjects.length; i < l; i++) { + + this.percentageCalculating(this.testsObjects[i].results); + this.resultsPercentageFailed += this.testsObjects[i].results.failed; + this.resultsPercentageSucceeded += this.testsObjects[i].results.succeeded; + } + this.resultsPercentageFailed = this.resultsPercentageFailed/this.testsObjects.length; + this.resultsPercentageSucceeded = this.resultsPercentageSucceeded/this.testsObjects.length; + this.displayGlobalTestResults(); + }, + + displayGlobalTestResults: function() { + var id = "globalTestResultsTable"; + var tableResult = document.getElementById(id); + var content; + content += "<thead>"; + content += "<tr>"; + content += "<th></th>"; + content += "<th>Succeeded (%)</th>"; + content += "<th>Failed (%)</th>"; + content += "</tr>"; + content += "</thead>"; + content += "<tbody>"; +// for (var i = 0, l = this.results.length; i < l; i++) { +// content += +// this.percentageCalculating(this.results[i]); +// this.result.percentageFailed += this.results[i].failed; +// this.result.percentageSucceeded += this.results[i].succeeded +// content += "<tr>"; +// content += "<th>" + this.results[i].testName + "<th>"; +// content += "<td>" + + "</td>"; +// content += "<td>" + + "</td>"; +// content += "</tr>"; +// } + content += "<tr>"; + content += "<th>Total</th>"; + content += "<td>" + this.resultsPercentageSucceeded + "</td>"; + content += "<td>" + this.resultsPercentageFailed + "</td>"; + content += "</tr>"; + content += "</tbody>"; + content += "</table>"; + + tableResult.innerHTML = content; + + var style = document.getElementById("globalTestResultsDiv").style; + style.display = (!style.display || style.display == "none") ? "block" : "none"; + }, + runSectionTest : function(indexObject, indexTest) { var element = this.testsObjects[indexObject]; var object = element.object; @@ -464,7 +665,18 @@ }, displayInLineArray: function() { - var content = "<div id='testsDisplay'><button id='runAllBtn'>Run All</button>"; + var content = "<div id='testsDisplay'>"; + content += "<div id='title'><h1> Test Page</h1></div>"; + content += "<div id='testControllerDiv'>"; + content += "<div id='titleTestControllerDiv'><h4>Test Controller<h4></div>"; + content += "<button id='runAllBtn'>Run All</button>"; + content += "<button id='stopAllBtn'>Stop All</button>"; + content += "<div id='globalTestResultsDiv'>"; + content += "<div id='titleGlobalTestResultsDiv'><h4>Global Test Results<h4></div>"; + content += "<table id='globalTestResultsTable'></table>"; + content += "</div>"; + content += "</div>"; + var testsObjects = this.testsObjects; content += "<div id=AllTestDiv>"; @@ -510,21 +722,20 @@ document.body.innerHTML = content; }, - - updateTestResult: function(currentTest, object) { console.group(currentTest["label"]); var timeStart = new Date(); var self = this; var result = false; - return new Promise(function(resolve, reject) { + var promiseTest = new Promise(function(resolve, reject) { try { timeout(5000) - .then(reject.bind(this, "No result returned.")) + .then(reject.bind(null, "No result returned.")) .then(function() { !result && object.afterTest && object.afterTest.bind(object); + self.currentResult && self.currentResult.failed++; }); object.beforeTest && object.beforeTest(resolve, reject); object[currentTest["method"]] && object[currentTest["method"]](resolve, reject); @@ -536,10 +747,12 @@ result = true; console.groupEnd(currentTest["label"]); var timeEnd = new Date(); + self.currentResult && self.currentResult.succeeded++; self.updateTestResultSuccess(timeStart, timeEnd, currentTest, val); object.afterTest && object.afterTest(); }) .catch(function(val) { + self.currentResult && self.currentResult.failed++; result = true; console.log(val); console.groupEnd(currentTest["label"]); @@ -547,6 +760,8 @@ self.updateTestResultError(timeStart, timeEnd, currentTest, val); object.afterTest && object.afterTest(); }); + + return promiseTest; }, updateTestResultSuccess: function(timeStart, timeEnd, currentTest, message) { @@ -561,7 +776,6 @@ document.getElementById(currentTest["method"] + "Duration").textContent = (timeEnd - timeStart).toFixed(2) + " ms"; } - });