diff options
| author | Martin Hořeňovský | 2017-03-02 16:16:17 +0100 |
|---|---|---|
| committer | Martin Hořeňovský | 2017-03-02 16:16:17 +0100 |
| commit | 40f6a5b8a478d8cc6f226e81086247a37f4c8e65 (patch) | |
| tree | 070243eb6c4046e4bc97f81abbc75c3669677a80 /include | |
| parent | 95b0eb2b6c94f28540ee57fccd98914c749baa1e (diff) | |
| download | catch3-40f6a5b8a478d8cc6f226e81086247a37f4c8e65.tar.gz | |
Added duration reporting to compact reporter
Also made the duration formatting code available to all reporters.
Closes #780
Diffstat (limited to 'include')
| -rw-r--r-- | include/reporters/catch_reporter_bases.hpp | 22 | ||||
| -rw-r--r-- | include/reporters/catch_reporter_compact.hpp | 9 | ||||
| -rw-r--r-- | include/reporters/catch_reporter_console.hpp | 19 |
3 files changed, 29 insertions, 21 deletions
diff --git a/include/reporters/catch_reporter_bases.hpp b/include/reporters/catch_reporter_bases.hpp index 6e854064..8fc8554b 100644 --- a/include/reporters/catch_reporter_bases.hpp +++ b/include/reporters/catch_reporter_bases.hpp @@ -11,10 +11,32 @@ #include "../internal/catch_interfaces_reporter.h" #include <cstring> +#include <cfloat> +#include <cstdio> #include <assert.h> namespace Catch { + namespace { + // Because formatting using c++ streams is stateful, drop down to C is required + // Alternatively we could use stringstream, but its performance is... not good. + std::string getFormattedDuration( double duration ) { + // Max exponent + 1 is required to represent the whole part + // + 1 for decimal point + // + 3 for the 3 decimal places + // + 1 for null terminator + const size_t maxDoubleSize = DBL_MAX_10_EXP + 1 + 1 + 3 + 1; + char buffer[maxDoubleSize]; +#ifdef _MSC_VER + sprintf_s(buffer, "%.3f", duration); +#else + sprintf(buffer, "%.3f", duration); +#endif + return std::string(buffer); + } + } + + struct StreamingReporterBase : SharedImpl<IStreamingReporter> { StreamingReporterBase( ReporterConfig const& _config ) diff --git a/include/reporters/catch_reporter_compact.hpp b/include/reporters/catch_reporter_compact.hpp index 66db9078..11e3b7c6 100644 --- a/include/reporters/catch_reporter_compact.hpp +++ b/include/reporters/catch_reporter_compact.hpp @@ -37,8 +37,7 @@ namespace Catch { stream << "No test cases matched '" << spec << '\'' << std::endl; } - virtual void assertionStarting( AssertionInfo const& ) { - } + virtual void assertionStarting( AssertionInfo const& ) {} virtual bool assertionEnded( AssertionStats const& _assertionStats ) { AssertionResult const& result = _assertionStats.assertionResult; @@ -59,6 +58,12 @@ namespace Catch { return true; } + virtual void sectionEnded(SectionStats const& _sectionStats) CATCH_OVERRIDE { + if (m_config->showDurations() == ShowDurations::Always) { + stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl; + } + } + virtual void testRunEnded( TestRunStats const& _testRunStats ) { printTotals( _testRunStats.totals ); stream << '\n' << std::endl; diff --git a/include/reporters/catch_reporter_console.hpp b/include/reporters/catch_reporter_console.hpp index 6a3bd646..224cbc9d 100644 --- a/include/reporters/catch_reporter_console.hpp +++ b/include/reporters/catch_reporter_console.hpp @@ -18,25 +18,6 @@ namespace Catch { - namespace { - // Because formatting using c++ streams is stateful, drop down to C is required - // Alternatively we could use stringstream, but its performance is... not good. - std::string getFormattedDuration( double duration ) { - // Max exponent + 1 is required to represent the whole part - // + 1 for decimal point - // + 3 for the 3 decimal places - // + 1 for null terminator - const size_t maxDoubleSize = DBL_MAX_10_EXP + 1 + 1 + 3 + 1; - char buffer[maxDoubleSize]; -#ifdef _MSC_VER - sprintf_s(buffer, "%.3f", duration); -#else - sprintf(buffer, "%.3f", duration); -#endif - return std::string(buffer); - } - } - struct ConsoleReporter : StreamingReporterBase { ConsoleReporter( ReporterConfig const& _config ) |