Files
edgetx-gx12/radio/src/tests/gtests.cpp
T

171 lines
4.5 KiB
C++

/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <memory>
#include "gtests.h"
#include "location.h"
using ::testing::TestEventListener;
using ::testing::EmptyTestEventListener;
using ::testing::Test;
using ::testing::TestCase;
using ::testing::TestEventListeners;
using ::testing::TestInfo;
using ::testing::TestPartResult;
using ::testing::UnitTest;
using ::testing::InitGoogleTest;
namespace {
void printColorCode(int color)
{
#if !GTEST_OS_WINDOWS
if (isatty(fileno(stdout)))
fprintf(stdout, "\033[0;%dm", color);
#endif
}
/**
* Replaces gtest's PrettyUnitTestResultPrinter with something less verbose.
* Uses the default printer if/when the messages might be interesting,
* e.g. for full error info or tests summary.
*/
class TersePrinter : public EmptyTestEventListener {
public:
explicit TersePrinter(TestEventListener * prettyPrinter)
: prettyPrinter(prettyPrinter), currentTestInfo(NULL)
{
}
void OnTestProgramStart(const UnitTest & unit_test)
{
prettyPrinter->OnTestProgramStart(unit_test);
}
void OnTestIterationStart(const UnitTest & unit_test, int iteration)
{
printColorCode(36);
fprintf(stdout, "############ ");
fprintf(stdout, "Running %d test(s) from %d test case(s), iteration: %d.\n", unit_test.test_to_run_count(), unit_test.test_case_to_run_count(), iteration + 1);
printColorCode(0);
fflush(stdout);
}
void OnTestCaseStart(const TestCase & test_case)
{
prettyPrinter->OnTestCaseStart(test_case);
}
void OnTestStart(const TestInfo & test_info)
{
currentTestInfo = &test_info;
}
void OnTestPartResult(const TestPartResult & test_part_result)
{
if (test_part_result.failed()) {
prettyPrinter->OnTestStart(*currentTestInfo);
prettyPrinter->OnTestPartResult(test_part_result);
}
}
void OnTestEnd(const TestInfo & test_info)
{
currentTestInfo = NULL;
if (test_info.result()->Failed()) {
prettyPrinter->OnTestEnd(test_info);
}
else {
printColorCode(32);
fprintf(stdout, "+");
printColorCode(0);
fflush(stdout);
}
}
void OnTestCaseEnd(const TestCase & test_case)
{
fprintf(stdout, "\n");
fflush(stdout);
}
void OnTestIterationEnd(const UnitTest & unit_test, int iteration)
{
prettyPrinter->OnTestIterationEnd(unit_test, iteration);
}
void OnTestProgramEnd(const UnitTest & unit_test)
{
prettyPrinter->OnTestProgramEnd(unit_test);
}
private:
// gtest's default unit test result printer.
std::unique_ptr<TestEventListener> prettyPrinter;
// The currently running TestInfo, if any.
const TestInfo * currentTestInfo;
};
} // anonymous namespace
int32_t lastAct = 0;
uint16_t simu_get_analog(uint8_t idx)
{
return 0;
}
void simuQueueAudio(const uint8_t*, uint32_t) {}
static char _stringResult[200];
const char * nchar2string(const char * string, int size)
{
if (size > (int)sizeof(_stringResult) ) {
return nullptr;
}
strncpy(_stringResult, string, size);
_stringResult[size] = '\0';
return _stringResult;
}
int main(int argc, char **argv)
{
simuInit();
simuFatfsSetPaths(TESTS_PATH, nullptr);
#if !defined(COLORLCD)
menuLevel = 0;
#endif
InitGoogleTest(&argc, argv);
// use --verbose option to revert to gtest's default output format
bool verbose = false;
if (argc > 1 && !strcmp(argv[1], "--verbose"))
verbose = true;
if (!verbose) {
TestEventListeners & listeners = UnitTest::GetInstance()->listeners();
TestEventListener * defaultPrinter = listeners.Release(listeners.default_result_printer());
listeners.Append(new TersePrinter(defaultPrinter));
}
#if defined(LIBOPENUI)
lcdInitDisplayDriver();
#endif
return RUN_ALL_TESTS();
}