From 67beec4ee460f806acfe0097f509f6536885b31f Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 20 Jan 2026 16:40:23 -0500 Subject: [PATCH] xo-indentlog: fix log_streambuf unit test + string_view operator --- .../include/xo/indentlog/log_streambuf.hpp | 3 +++ xo-indentlog/utest/log_streambuf.test.cpp | 20 ++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/xo-indentlog/include/xo/indentlog/log_streambuf.hpp b/xo-indentlog/include/xo/indentlog/log_streambuf.hpp index 36166fce..e9672f47 100644 --- a/xo-indentlog/include/xo/indentlog/log_streambuf.hpp +++ b/xo-indentlog/include/xo/indentlog/log_streambuf.hpp @@ -4,6 +4,7 @@ #include "print/quoted_char.hpp" #include +#include #include #include // e.g. for std::memcpy() #include @@ -71,6 +72,8 @@ namespace xo { bool debug_flag() const { return debug_flag_; } + operator std::basic_string_view () const { return std::basic_string_view(this->pbase(), this->pptr()); } + void reset_stream() { char * p_lo = &(this->buf_v_[0]); char * p_hi = p_lo + this->capacity(); diff --git a/xo-indentlog/utest/log_streambuf.test.cpp b/xo-indentlog/utest/log_streambuf.test.cpp index 656d8b97..fc3968be 100644 --- a/xo-indentlog/utest/log_streambuf.test.cpp +++ b/xo-indentlog/utest/log_streambuf.test.cpp @@ -5,12 +5,14 @@ #include "print/tag.hpp" #include "print/quoted.hpp" #include +#include //#include namespace ut { using xo::xtag; using xo::scope; using xo::log_streambuf; + using std::string_view; using std::cerr; using std::endl; @@ -68,28 +70,32 @@ namespace ut { log_streambuf> sbuf(z, false); std::ostream ss(&sbuf); - ss <<"empty log_streambuf"; - ss << xtag("sbuf.lo", (void*)sbuf.lo()); - ss << xtag("sbuf.hi", (void*)sbuf.hi()); + ss << "empty log_streambuf"; + ss << xtag("sbuf.lo", (void*)nullptr); + ss << xtag("sbuf.hi", (void*)nullptr); ss << xtag("sbuf.color_escape_chars", sbuf._color_escape_chars()); //REQUIRE(sbuf.lo() == sbuf.pbase()); + auto expected = string_view("empty log_streambuf :sbuf.lo 0 :sbuf.hi 0 :sbuf.color_escape_chars 0"); + + REQUIRE(string_view(sbuf) == expected); + /* sbuf size will have been expanded */ REQUIRE(sbuf.capacity() == 128); - REQUIRE(sbuf.pos() == 82); + REQUIRE(sbuf.pos() == expected.size()); REQUIRE(sbuf._solpos() == 0); - REQUIRE(sbuf.lpos() == 82); + REQUIRE(sbuf.lpos() == expected.size()); // note: log_streambuf doesn't get control on every character ss << '\n'; REQUIRE(sbuf.capacity() == 128); - REQUIRE(sbuf.pos() == 83); + REQUIRE(sbuf.pos() == expected.size() + 1); REQUIRE(sbuf.lpos() == 0); // note: solpos: updated b/c of call to lazy sbuf.lpos() - REQUIRE(sbuf._solpos() == 83); + REQUIRE(sbuf._solpos() == expected.size() + 1); } // write test cases with some random strings.