summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArseny Kapoulkine <arseny.kapoulkine@gmail.com>2017-06-15 23:52:56 -0700
committerArseny Kapoulkine <arseny.kapoulkine@gmail.com>2017-06-15 23:52:56 -0700
commitd2892be902b9cabe6e3f5732b82f6f2bef8e7d2f (patch)
tree3504f7e343f12e53e7dc8f5f7b34b3d14f324aae
parent95f013ba80fbe5a6c7423771d9c7715397f7585d (diff)
tests: Add xml_buffered_writer coverage test
This test triggers flush() condition for each optimized write() method.
-rw-r--r--tests/test_write.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/test_write.cpp b/tests/test_write.cpp
index 5cd92a5..e59b7ab 100644
--- a/tests/test_write.cpp
+++ b/tests/test_write.cpp
@@ -639,6 +639,30 @@ TEST_XML_FLAGS(write_roundtrip, "<node><child1 attr1='value1' attr2='value2'/><c
}
}
+TEST(write_flush_coverage)
+{
+ xml_document doc;
+
+ // this creates a node that uses short sequences of lengths 1-6 for output
+ xml_node n = doc.append_child(STR("n"));
+ n.text().set(STR("<&\""));
+ n.append_child(node_comment);
+
+ xml_attribute a = n.append_attribute(STR("a"));
+
+ size_t basel = save_narrow(doc, 0, encoding_auto).size();
+ size_t bufl = 10240;
+
+ for (size_t l = 0; l <= basel; ++l)
+ {
+ std::basic_string<pugi::char_t> pad(bufl - l, STR('v'));
+ a.set_value(pad.c_str());
+
+ std::string s = save_narrow(doc, 0, encoding_auto);
+ CHECK(s.size() == basel + bufl - l);
+ }
+}
+
#ifndef PUGIXML_NO_EXCEPTIONS
struct throwing_writer: pugi::xml_writer
{