diff options
| author | Tyson Jones | 2025-03-15 02:42:04 +0100 |
|---|---|---|
| committer | Martin Hořeňovský | 2025-07-02 14:13:07 +0200 |
| commit | bd2d918f328ddb916202f4952b25cf809434b290 (patch) | |
| tree | 668af35f8913e95710255e2ace7fd501a69f500d /src | |
| parent | d134b0cae3033c4ddc027fae6f76c66e8b0a6a73 (diff) | |
| download | catch3-bd2d918f328ddb916202f4952b25cf809434b290.tar.gz | |
patched >2-digit tag-count padding in base reporter
Passing the CLI argument '--list-tags' outputs a list like:
```
All available tags:
11 [mytag]
4 [myothertag]
2 tags
```
However, the width of the tag-count column was previously hardcoded to 2, such that the formatting broke (with the tag names awkwardly misaligned/displaced) for 3+ digit tag counts. This occurred whenever a tag contains one hundred or more tests, and would result in formatting like:
```
All available tags:
11 [mytag]
100 [myjumbotag]
4 [myothertag]
3 tags
```
This patch pre-computes the maximum number of digits among the tag counts, expanding the padding when there are more than 100 tests in a tag (and handling when tags are empty). It now outputs e.g.
```
All available tags:
11 [mytag]
100 [myjumbotag]
4 [myothertag]
3 tags
```
Diffstat (limited to 'src')
| -rw-r--r-- | src/catch2/reporters/catch_reporter_helpers.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/catch2/reporters/catch_reporter_helpers.cpp b/src/catch2/reporters/catch_reporter_helpers.cpp index ffb32ffb..c710ac43 100644 --- a/src/catch2/reporters/catch_reporter_helpers.cpp +++ b/src/catch2/reporters/catch_reporter_helpers.cpp @@ -19,6 +19,7 @@ #include <algorithm> #include <cfloat> +#include <cmath> #include <cstdio> #include <ostream> #include <iomanip> @@ -182,9 +183,29 @@ namespace Catch { out << "All available tags:\n"; } + // minimum whitespace to pad tag counts, possibly overwritten below + size_t maxTagCountLen = 2; + + // determine necessary padding for tag count column + if ( ! tags.empty() ) { + const auto maxTagCount = + std::max_element( tags.begin(), + tags.end(), + []( auto const& lhs, auto const& rhs ) { + return lhs.count < rhs.count; + } ) + ->count; + + // more padding necessary for 3+ digits + if (maxTagCount >= 100) { + auto numDigits = 1 + std::floor( std::log10( maxTagCount ) ); + maxTagCountLen = static_cast<size_t>( numDigits ); + } + } + for ( auto const& tagCount : tags ) { ReusableStringStream rss; - rss << " " << std::setw( 2 ) << tagCount.count << " "; + rss << " " << std::setw( maxTagCountLen ) << tagCount.count << " "; auto str = rss.str(); auto wrapper = TextFlow::Column( tagCount.all() ) .initialIndent( 0 ) |