QTest::toPrettyUnicode: remove magic numbers
Derive them from the chosen output buffer size instead, itself a symbolic constant. Pick-to: 6.5 Change-Id: I33aa351ba358b106b448f886b92e952e53bc75f9 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Jason McDonald <macadder1@gmail.com> (cherry picked from commit a14d3a49f0abed1d430edb96a272ca05a73f7dc5) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
5d2fab5663
commit
23ea13f9d9
@ -1647,26 +1647,31 @@ char *toPrettyCString(const char *p, qsizetype length)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
\fn char *toPrettyUnicode(QStringView string)
|
||||||
\internal
|
\internal
|
||||||
Returns the same QString but with only the ASCII characters still shown;
|
Returns the same QString but with only the ASCII characters still shown;
|
||||||
everything else is replaced with \c {\uXXXX}.
|
everything else is replaced with \c {\uXXXX}.
|
||||||
|
|
||||||
Similar to QDebug::putString().
|
Similar to QDebug::putString().
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
constexpr qsizetype PrettyUnicodeMaxOutputSize = 256;
|
||||||
|
|
||||||
char *toPrettyUnicode(QStringView string)
|
char *toPrettyUnicode(QStringView string)
|
||||||
{
|
{
|
||||||
auto p = string.utf16();
|
auto p = string.utf16();
|
||||||
auto length = string.size();
|
auto length = string.size();
|
||||||
// keep it simple for the vast majority of cases
|
// keep it simple for the vast majority of cases
|
||||||
bool trimmed = false;
|
bool trimmed = false;
|
||||||
auto buffer = std::make_unique<char[]>(256);
|
auto buffer = std::make_unique<char[]>(PrettyUnicodeMaxOutputSize);
|
||||||
const auto end = p + length;
|
const auto end = p + length;
|
||||||
char *dst = buffer.get();
|
char *dst = buffer.get();
|
||||||
|
|
||||||
*dst++ = '"';
|
*dst++ = '"';
|
||||||
for ( ; p != end; ++p) {
|
for ( ; p != end; ++p) {
|
||||||
if (dst - buffer.get() > 245) {
|
// escape sequence, closing quote, the three dots and NUL
|
||||||
// plus the quote, the three dots and NUL, it's 250, 251 or 255
|
constexpr qsizetype MaxIncrement = sizeof(R"(\uXXXX"...)"); // includes NUL
|
||||||
|
if (dst - buffer.get() > PrettyUnicodeMaxOutputSize - MaxIncrement) {
|
||||||
trimmed = true;
|
trimmed = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1677,7 +1682,6 @@ char *toPrettyUnicode(QStringView string)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write as an escape sequence
|
// write as an escape sequence
|
||||||
// this means we may advance dst to buffer.data() + 246 or 250
|
|
||||||
*dst++ = '\\';
|
*dst++ = '\\';
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case 0x22:
|
case 0x22:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user