Read-only mirrors. Development, issues and pull requests are on GitHub.

summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorTyson Jones2025-03-15 02:42:04 +0100
committerMartin Hořeňovský2025-07-02 14:13:07 +0200
commitbd2d918f328ddb916202f4952b25cf809434b290 (patch)
tree668af35f8913e95710255e2ace7fd501a69f500d /src
parentd134b0cae3033c4ddc027fae6f76c66e8b0a6a73 (diff)
downloadcatch3-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.cpp23
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 )