diff options
Diffstat (limited to 'longbow/src/LongBow/Reporting/Android/longBowReport_Testing.c')
-rwxr-xr-x | longbow/src/LongBow/Reporting/Android/longBowReport_Testing.c | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/longbow/src/LongBow/Reporting/Android/longBowReport_Testing.c b/longbow/src/LongBow/Reporting/Android/longBowReport_Testing.c new file mode 100755 index 00000000..dd3835e8 --- /dev/null +++ b/longbow/src/LongBow/Reporting/Android/longBowReport_Testing.c @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + */ +#include <config.h> + +#include <stdio.h> +#include <assert.h> + +#ifdef __ANDROID__ +#include <android/log.h> +#define printf(...) __android_log_print(ANDROID_LOG_DEBUG, "CCNx", __VA_ARGS__); +#endif + +#include <LongBow/Reporting/longBowReport_Testing.h> +#include <LongBow/private/longBow_String.h> + +static const LongBowTestRunner * +_testRunnerSilent(const LongBowTestRunner *testRunner) +{ + LongBowStatus status = longBowTestRunner_GetStatus(testRunner); + + printf("%s %s\n", longBowTestRunner_GetName(testRunner), longBowStatus_ToString(status)); + return testRunner; +} + +static const LongBowTestRunner * +_testRunnerDetail(const LongBowTestRunner *testRunner) +{ + size_t nFixtures = longBowTestRunner_GetFixtureCount(testRunner); + + printf("\r\n"); + printf("%s: %zd fixture%s\r\n", longBowTestRunner_GetName(testRunner), nFixtures, (nFixtures == 1 ? "" : "s")); + + for (size_t i = 0; i < nFixtures; i++) { + LongBowTestFixture *fixture = longBowTestRunner_GetFixture(testRunner, i); + longBowReportTesting_TestFixture(fixture); + } + return testRunner; +} + +const LongBowTestRunner * +longBowReportTesting_TestRunner(const LongBowTestRunner *testRunner) +{ + if (longBowConfig_GetBoolean(longBowTestRunner_GetConfiguration(testRunner), false, "silent")) { + return _testRunnerSilent(testRunner); + } else { + return _testRunnerDetail(testRunner); + } +} + +static unsigned int +_totalSucceeded(const LongBowTestFixtureSummary *summary) +{ + return summary->totalSucceeded + summary->totalWarned + summary->totalTearDownWarned; +} + +static unsigned int +_totalWarned(const LongBowTestFixtureSummary *summary) +{ + return summary->totalWarned + summary->totalTearDownWarned; +} + +static unsigned int +_totalFailed(const LongBowTestFixtureSummary *summary) +{ + return summary->totalFailed + summary->totalSignalled + summary->totalStopped + summary->totalTearDownFailed; +} + +static unsigned int +_totalIncomplete(const LongBowTestFixtureSummary *summary) +{ + return summary->totalSetupFailed + summary->totalSkipped + summary->totalUnimplemented; +} + +static void +_reportSummary(const LongBowTestFixture *testFixture) +{ + const LongBowTestFixtureSummary *summary = longBowTestFixture_GetSummary(testFixture); + + char *fixtureString = longBowTestFixture_ToString(testFixture); + + printf("%s: Ran %u test case%s.", fixtureString, summary->totalTested, summary->totalTested == 1 ? "" : "s"); + free(fixtureString); + + if (summary->totalTested > 0) { + printf(" %d%% (%d) succeeded", _totalSucceeded(summary) * 100 / summary->totalTested, _totalSucceeded(summary)); + + if (_totalWarned(summary) > 0) { + printf(" %d%% (%d) with warnings", _totalWarned(summary) * 100 / _totalSucceeded(summary), _totalWarned(summary)); + } + if (_totalFailed(summary) != 0) { + printf(", %d%% (%d) failed", _totalFailed(summary) * 100 / summary->totalTested, _totalFailed(summary)); + } + if (_totalIncomplete(summary) > 0) { + printf(", %d%% (%d) incomplete", _totalIncomplete(summary) * 100 / summary->totalTested, _totalIncomplete(summary)); + } + } + printf("\n"); +} + +const LongBowTestFixture * +longBowReportTesting_TestFixture(const LongBowTestFixture *testFixture) +{ + size_t nTestCases = longBowTestFixture_GetTestCaseCount(testFixture); + + _reportSummary(testFixture); + + for (size_t i = 0; i < nTestCases; i++) { + LongBowTestCase *testCase = longBowTestFixture_GetTestCase(testFixture, i); + longBowReportTesting_TestCase(testCase); + } + return testFixture; +} + +const LongBowTestCase * +longBowReportTesting_TestCase(const LongBowTestCase *testCase) +{ + LongBowRuntimeResult *testCaseResult = longBowTestCase_GetActualResult(testCase); + + char *rusageString = longBowReportRuntime_RUsageToString(longBowRuntimeResult_GetRUsage(testCaseResult)); + + char *elapsedTimeString = longBowReportRuntime_TimevalToString(longBowRuntimeResult_GetElapsedTime(testCaseResult)); + + char *statusString = longBowStatus_ToString(longBowTestCase_GetActualResult(testCase)->status); + char *testCaseString = longBowTestCase_ToString(testCase); + + LongBowString *string = longBowString_CreateFormat("%10s %s %s %zd %s\n", + testCaseString, + elapsedTimeString, + rusageString, + longBowRuntimeResult_GetEventEvaluationCount(longBowTestCase_GetActualResult(testCase)), + statusString); + longBowString_Write(string, stdout); + longBowString_Destroy(&string); + + free(testCaseString); + free(statusString); + free(elapsedTimeString); + free(rusageString); + + return testCase; +} + +void +longBowReportTesting_DisplayTestCaseResult(const LongBowTestCase *testCase) +{ + const LongBowRuntimeResult *testCaseResult = longBowTestCase_GetActualResult(testCase); + + switch (testCaseResult->status) { + case LongBowStatus_UNTESTED: printf("X"); break; + case LONGBOW_STATUS_SUCCEEDED: printf("."); break; + case LONGBOW_STATUS_SKIPPED: printf("S"); break; + case LongBowStatus_WARNED: printf("W"); break; + case LONGBOW_STATUS_SETUP_FAILED: printf("s"); break; + case LONGBOW_STATUS_TEARDOWN_FAILED: printf("t"); break; + case LongBowStatus_TEARDOWN_WARNED: printf("w"); break; + case LONGBOW_STATUS_FAILED: printf("F"); break; + case LongBowStatus_STOPPED: printf("T"); break; + case LongBowStatus_UNIMPLEMENTED: printf("U"); break; + case LongBowStatus_IMPOTENT: printf("I"); break; + default: + if (testCaseResult->status >= LongBowStatus_SIGNALLED) { + printf("K"); + } else { + printf("?"); + } + } + fflush(stdout); +} + +void +longBowReportTesting_Trace(const char *restrict format, ...) +{ + va_list ap; + va_start(ap, format); + char *message; + if (vasprintf(&message, format, ap) == -1) { + return; + } + va_end(ap); + + printf("%s\n", message); + free(message); +} |