Serializer edge case bug fix: very deep indents ignored indent_char
This commit is contained in:
parent
a983e47619
commit
1c1c789084
@ -162,7 +162,7 @@ class fancy_serializer
|
||||
const auto new_indent = (depth + 1) * style.indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, style.indent_char);
|
||||
}
|
||||
const int newline_len = (style.indent_step > 0);
|
||||
|
||||
@ -207,7 +207,7 @@ class fancy_serializer
|
||||
const auto new_indent = (depth + 1) * style.indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, style.indent_char);
|
||||
}
|
||||
const int newline_len = (style.indent_step > 0);
|
||||
|
||||
|
||||
@ -93,7 +93,7 @@ class serializer
|
||||
const auto new_indent = current_indent + indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, indent_char);
|
||||
}
|
||||
|
||||
// first n-1 elements
|
||||
@ -166,7 +166,7 @@ class serializer
|
||||
const auto new_indent = current_indent + indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, indent_char);
|
||||
}
|
||||
|
||||
// first n-1 elements
|
||||
|
||||
@ -9876,7 +9876,7 @@ class serializer
|
||||
const auto new_indent = current_indent + indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, indent_char);
|
||||
}
|
||||
|
||||
// first n-1 elements
|
||||
@ -9949,7 +9949,7 @@ class serializer
|
||||
const auto new_indent = current_indent + indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, indent_char);
|
||||
}
|
||||
|
||||
// first n-1 elements
|
||||
@ -10232,7 +10232,7 @@ class fancy_serializer
|
||||
const auto new_indent = (depth + 1) * style.indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, style.indent_char);
|
||||
}
|
||||
const int newline_len = (style.indent_step > 0);
|
||||
|
||||
@ -10277,7 +10277,7 @@ class fancy_serializer
|
||||
const auto new_indent = (depth + 1) * style.indent_step;
|
||||
if (JSON_UNLIKELY(indent_string.size() < new_indent))
|
||||
{
|
||||
indent_string.resize(indent_string.size() * 2, ' ');
|
||||
indent_string.resize(indent_string.size() * 2, style.indent_char);
|
||||
}
|
||||
const int newline_len = (style.indent_step > 0);
|
||||
|
||||
|
||||
@ -187,4 +187,39 @@ TEST_CASE("serialization")
|
||||
"]"
|
||||
);
|
||||
}
|
||||
|
||||
SECTION("indent_char is honored for deep indents in lists")
|
||||
{
|
||||
fancy_serializer_style style;
|
||||
style.indent_step = 300;
|
||||
style.indent_char = 'X';
|
||||
|
||||
auto str = fancy_to_string({1, {1}}, style);
|
||||
|
||||
std::string indent(300, 'X');
|
||||
CHECK(str ==
|
||||
"[\n" +
|
||||
indent + "1,\n" +
|
||||
indent + "[\n" +
|
||||
indent + indent + "1\n" +
|
||||
indent + "]\n" +
|
||||
"]");
|
||||
}
|
||||
|
||||
SECTION("indent_char is honored for deep indents in objects")
|
||||
{
|
||||
fancy_serializer_style style;
|
||||
style.indent_step = 300;
|
||||
style.indent_char = 'X';
|
||||
|
||||
auto str = fancy_to_string({{"key", {{"key", 1}}}}, style);
|
||||
|
||||
std::string indent(300, 'X');
|
||||
CHECK(str ==
|
||||
"{\n" +
|
||||
indent + "\"key\": {\n" +
|
||||
indent + indent + "\"key\": 1\n" +
|
||||
indent + "}\n" +
|
||||
"}");
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,6 +63,37 @@ TEST_CASE("serialization")
|
||||
}
|
||||
}
|
||||
|
||||
SECTION("indent_char is honored for deep indents in lists")
|
||||
{
|
||||
std::stringstream ss;
|
||||
json j = {1, {1}};
|
||||
ss << std::setw(300) << std::setfill('X') << j;
|
||||
|
||||
std::string indent(300, 'X');
|
||||
CHECK(ss.str() ==
|
||||
"[\n" +
|
||||
indent + "1,\n" +
|
||||
indent + "[\n" +
|
||||
indent + indent + "1\n" +
|
||||
indent + "]\n" +
|
||||
"]");
|
||||
}
|
||||
|
||||
SECTION("indent_char is honored for deep indents in objects")
|
||||
{
|
||||
std::stringstream ss;
|
||||
json j = {{"key", {{"key", 1}}}};
|
||||
ss << std::setw(300) << std::setfill('X') << j;
|
||||
|
||||
std::string indent(300, 'X');
|
||||
CHECK(ss.str() ==
|
||||
"{\n" +
|
||||
indent + "\"key\": {\n" +
|
||||
indent + indent + "\"key\": 1\n" +
|
||||
indent + "}\n" +
|
||||
"}");
|
||||
}
|
||||
|
||||
SECTION("operator>>")
|
||||
{
|
||||
SECTION("no given width")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user