/* * Copyright (C) 2016 Edward d'Auvergne * * This file is part of the program FlightGear. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include "fgCompilerOutputter.hxx" #include "formatting.hxx" using namespace std; // Create a new class instance. fgCompilerOutputter * fgCompilerOutputter::defaultOutputter(CppUnit::TestResultCollector *result, vector *capt, const clock_t *clock, CppUnit::OStream &stream) { return new fgCompilerOutputter(result, capt, clock, stream); } // Printout for each failed test. void fgCompilerOutputter::printFailureDetail(CppUnit::TestFailure *failure) { // Declarations. TestIOCapt test_io; vector::iterator test_iter; // Initial separator. fg_stream << string(WIDTH_DIVIDER, '=') << endl; // Test info. fg_stream << (failure->isError() ? "ERROR: " : "FAIL: ") << failure->failedTestName() << endl; fg_stream << string(WIDTH_DIVIDER, '-') << endl; fg_stream << (failure->isError() ? "Error" : "Assertion") << ": "; printFailureLocation(failure->sourceLine()); printFailureMessage(failure); // The captured IO for this test. test_iter = find_if(io_capt->begin(), io_capt->end(), matchTestName(failure->failedTestName())); if (test_iter != io_capt->end()) test_io = *test_iter; // Default IO streams. fg_stream << string(WIDTH_DIVIDER, '-') << endl; fg_stream << "STDOUT and STDERR:" << endl; fg_stream << test_io.stdio << endl; // SG_LOG IO streams. fg_stream << string(WIDTH_DIVIDER, '-') << endl; fg_stream << "SG_LOG:" << endl; fg_stream << test_io.sg_log << endl; } // Detailed printout after a failed run of the test suite. void fgCompilerOutputter::printFailureReport() { // Custom printouts for each failed test. printFailuresList(); // A summary with timing info. printSuiteStats(); // Final summary. fg_stream << endl << "[ FAILED ]" << endl << endl; fg_stream.flush(); } // Printout of the test suite stats. void fgCompilerOutputter::printSuiteStats() { // A divider. fg_stream << string(WIDTH_DIVIDER, '-') << endl; // Timing and test count line. fg_stream << "Ran " << fg_result->runTests() << " tests"; streamsize prec = fg_stream.precision(); fg_stream << setprecision(3); fg_stream << " in " << ((double)*suite_timer)/CLOCKS_PER_SEC << " seconds." << endl; fg_stream << setprecision(prec); // Failure line. if (!fg_result->wasSuccessful()) { fg_stream << endl << "Failures = " << fg_result->testFailures() << endl; fg_stream << "Errors = " << fg_result->testErrors() << endl; } } // Print a summary after a successful run of the test suite. void fgCompilerOutputter::printSuccess() { // A summary with timing info. printSuiteStats(); // Final summary. fg_stream << endl << "[ OK ]" << endl << endl; fg_stream.flush(); }