From b14d878dd89bf9bff80e26ab3a94b6351683592b Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Mon, 22 Feb 2016 16:28:45 +0200 Subject: [PATCH 1/3] JUnit style tests result to file --- apps/tests/testRunner.ts | 49 +++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts index d23d81701..34d2c8205 100644 --- a/apps/tests/testRunner.ts +++ b/apps/tests/testRunner.ts @@ -5,6 +5,7 @@ import {topmost, Frame} from "ui/frame"; import {TextView} from "ui/text-view"; import * as platform from "platform"; import "./ui-test"; +import fs = require("file-system"); Frame.defaultAnimatedNavigation = false; @@ -113,20 +114,36 @@ var running = false; var testsQueue = new Array(); function printRunTestStats() { + let testFileContent = new Array(); + var j; - var testsCount = 0; var failedTestCount = 0; var failedTestInfo = []; - for (j = 0; j < testsQueue.length; j++) { - if (testsQueue[j].isTest) { - testsCount++; - if (!testsQueue[j].isPassed) { - failedTestCount++; - failedTestInfo.push(testsQueue[j].testName + " FAILED: " + testsQueue[j].errorMessage); - } + + let allTests = testsQueue.filter(t=> t.isTest); + + testFileContent.push(""); + testFileContent.push(``); + + for (j = 0; j < allTests.length; j++) { + let testName = allTests[j].testName; + + if (!allTests[j].isPassed) { + failedTestCount++; + + let errorMessage = allTests[j].errorMessage; + + failedTestInfo.push(allTests[j].testName + " FAILED: " + allTests[j].errorMessage); + + testFileContent.push(`${errorMessage}`); + + } else { + testFileContent.push(``); } } - let finalMessage = "=== ALL TESTS COMPLETE === \n" + (testsCount - failedTestCount) + " OK, " + failedTestCount + " failed" + "\n"; + + + let finalMessage = "=== ALL TESTS COMPLETE === \n" + (allTests.length - failedTestCount) + " OK, " + failedTestCount + " failed" + "\n"; TKUnit.write(finalMessage, messageType.info); for (j = 0; j < failedTestInfo.length; j++) { let failureMessage = failedTestInfo[j]; @@ -134,6 +151,12 @@ function printRunTestStats() { finalMessage += "\n" + failureMessage; } + testFileContent.push(""); + + let testFile = fs.File.fromPath(fs.path.join(fs.knownFolders.documents().path, "test-results.xml")); + testFile.writeTextSync(testFileContent.join("")); + let messageContainer = new TextView(); messageContainer.text = finalMessage; topmost().currentPage.content = messageContainer; @@ -156,7 +179,7 @@ export var runAll = function (testSelector?: string) { // TODO: We may schedule pending run requests return; } - + var singleModuleName, singleTestName; if (testSelector) { var pair = testSelector.split("."); @@ -168,7 +191,7 @@ export var runAll = function (testSelector?: string) { singleModuleName = singleModuleName.toLowerCase(); } } - + singleTestName = pair[1]; if (singleTestName) { if (singleTestName.length === 0) { @@ -178,7 +201,7 @@ export var runAll = function (testSelector?: string) { } } } - + console.log("TESTS: " + singleModuleName + " " + singleTestName); var totalSuccess = 0; @@ -205,7 +228,7 @@ export var runAll = function (testSelector?: string) { if (singleTestName && (singleTestName !== testName.toLowerCase())) { continue; } - + var testFunction = test[testName]; if ((typeof (testFunction) === "function") && (testName.substring(0, 4) == "test")) { if (test.setUp) { From 53c3ee568c28358627ae09de2ed8ba89e5c34add Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Tue, 23 Feb 2016 15:14:16 +0200 Subject: [PATCH 2/3] closing tag fixed and duration added --- apps/tests/TKUnit.ts | 4 ++++ apps/tests/testRunner.ts | 11 +++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/apps/tests/TKUnit.ts b/apps/tests/TKUnit.ts index 04e719afa..af2e7752e 100644 --- a/apps/tests/TKUnit.ts +++ b/apps/tests/TKUnit.ts @@ -27,6 +27,7 @@ export interface TestInfoEntry { isPassed: boolean; errorMessage: string; testTimeout: number; + duration: number; } export function time(): number { @@ -56,6 +57,7 @@ var runTest = function (testInfo: TestInfoEntry) { if (testInfo.isTest) { duration = time() - start; + testInfo.duration = duration; write("--- [" + testInfo.testName + "] OK, duration: " + duration, trace.messageType.info); testInfo.isPassed = true; } @@ -63,6 +65,7 @@ var runTest = function (testInfo: TestInfoEntry) { catch (e) { if (testInfo.isTest) { duration = time() - start; + testInfo.duration = duration; write("--- [" + testInfo.testName + "] FAILED: " + e.message + ", duration: " + duration, trace.messageType.error); testInfo.isPassed = false; testInfo.errorMessage = e.message; @@ -109,6 +112,7 @@ function runAsync(testInfo: TestInfoEntry, recursiveIndex: number, testTimeout?: let duration; var checkFinished = function () { duration = time() - testStartTime; + testInfo.duration = duration; if (isDone) { write("--- [" + testInfo.testName + "] OK, duration: " + duration, trace.messageType.info); //write("--- [" + testInfo.testName + "] took: " + (new Date().getTime() - testStartTime), trace.messageType.info); diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts index 34d2c8205..0905f31d6 100644 --- a/apps/tests/testRunner.ts +++ b/apps/tests/testRunner.ts @@ -127,6 +127,7 @@ function printRunTestStats() { for (j = 0; j < allTests.length; j++) { let testName = allTests[j].testName; + let duration = allTests[j].duration; if (!allTests[j].isPassed) { failedTestCount++; @@ -135,10 +136,10 @@ function printRunTestStats() { failedTestInfo.push(allTests[j].testName + " FAILED: " + allTests[j].errorMessage); - testFileContent.push(`${errorMessage}`); + testFileContent.push(`${errorMessage}`); } else { - testFileContent.push(``); + testFileContent.push(``); } } @@ -151,7 +152,7 @@ function printRunTestStats() { finalMessage += "\n" + failureMessage; } - testFileContent.push(""); testFileContent.push(""); let testFile = fs.File.fromPath(fs.path.join(fs.knownFolders.documents().path, "test-results.xml")); @@ -263,8 +264,9 @@ class TestInfo implements TKUnit.TestInfoEntry { isPassed: boolean; errorMessage: string; testTimeout: number; + duration: number; - constructor(testFunc, testInstance?: any, isTest?, testName?, isPassed?, errorMessage?, testTimeout?) { + constructor(testFunc, testInstance?: any, isTest?, testName?, isPassed?, errorMessage?, testTimeout?, duration?) { this.testFunc = testFunc; this.instance = testInstance || null; this.isTest = isTest || false; @@ -272,5 +274,6 @@ class TestInfo implements TKUnit.TestInfoEntry { this.isPassed = isPassed || false; this.errorMessage = errorMessage || ""; this.testTimeout = testTimeout; + this.duration = duration; } } From 6e1cb39a0e3d3f9145593e4a4881e2cce26153f2 Mon Sep 17 00:00:00 2001 From: Vladimir Enchev Date: Tue, 23 Feb 2016 17:45:45 +0200 Subject: [PATCH 3/3] duration converted to seconds --- apps/tests/testRunner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts index 0905f31d6..a8d481ff4 100644 --- a/apps/tests/testRunner.ts +++ b/apps/tests/testRunner.ts @@ -127,7 +127,7 @@ function printRunTestStats() { for (j = 0; j < allTests.length; j++) { let testName = allTests[j].testName; - let duration = allTests[j].duration; + let duration = allTests[j].duration / 1000; if (!allTests[j].isPassed) { failedTestCount++;