mirror of
https://github.com/nlohmann/json.git
synced 2026-07-21 19:23:03 +04:00
Flush serializer buffer in dump_escaped unit test
test-convenience failed (macOS finished first; the failure is platform-independent) because check_escaped() calls the internal serializer::dump_escaped() directly and then reads the output stream. Since dump_escaped() now writes into the serializer's internal write buffer, the bytes were still buffered and the stream was empty. Expose flush() under JSON_PRIVATE_UNLESS_TESTED (same visibility as dump_escaped) and flush in check_escaped() before inspecting the output. Per-string flushing inside dump_escaped() was rejected on purpose: it would defeat the buffering that makes object/array-heavy dumps faster. Library behavior is unchanged (flush()'s body is identical; only its access label moved). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XAYM1qhSA2FDaDcGfPW3fG Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
@@ -730,12 +730,17 @@ class serializer
|
||||
write_buffer_pos += length;
|
||||
}
|
||||
|
||||
JSON_PRIVATE_UNLESS_TESTED:
|
||||
/*!
|
||||
@brief flush the write buffer to the output adapter
|
||||
|
||||
Writing zero characters is a well-defined no-op for every output adapter, so
|
||||
the buffered length is passed through unconditionally (no empty-guard branch
|
||||
to leave uncovered).
|
||||
|
||||
@note dump_escaped() and dump_integer()/dump_float() write into the internal
|
||||
write buffer; callers that invoke them directly (rather than through the
|
||||
public dump()) must call flush() before inspecting the output.
|
||||
*/
|
||||
void flush()
|
||||
{
|
||||
@@ -743,6 +748,7 @@ class serializer
|
||||
write_buffer_pos = 0;
|
||||
}
|
||||
|
||||
private:
|
||||
/*!
|
||||
@brief count digits
|
||||
|
||||
|
||||
@@ -21313,12 +21313,17 @@ class serializer
|
||||
write_buffer_pos += length;
|
||||
}
|
||||
|
||||
JSON_PRIVATE_UNLESS_TESTED:
|
||||
/*!
|
||||
@brief flush the write buffer to the output adapter
|
||||
|
||||
Writing zero characters is a well-defined no-op for every output adapter, so
|
||||
the buffered length is passed through unconditionally (no empty-guard branch
|
||||
to leave uncovered).
|
||||
|
||||
@note dump_escaped() and dump_integer()/dump_float() write into the internal
|
||||
write buffer; callers that invoke them directly (rather than through the
|
||||
public dump()) must call flush() before inspecting the output.
|
||||
*/
|
||||
void flush()
|
||||
{
|
||||
@@ -21326,6 +21331,7 @@ class serializer
|
||||
write_buffer_pos = 0;
|
||||
}
|
||||
|
||||
private:
|
||||
/*!
|
||||
@brief count digits
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@ void check_escaped(const char* original, const char* escaped, const bool ensure_
|
||||
std::stringstream ss;
|
||||
json::serializer s(nlohmann::detail::output_adapter<char>(ss), ' ');
|
||||
s.dump_escaped(original, ensure_ascii);
|
||||
s.flush(); // dump_escaped writes into the serializer's internal buffer
|
||||
CHECK(ss.str() == escaped);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user