diff --git a/tests/test_write.cpp b/tests/test_write.cpp index 8fbcc27..de77339 100644 --- a/tests/test_write.cpp +++ b/tests/test_write.cpp @@ -608,6 +608,31 @@ TEST_XML(write_no_empty_element_tags, "text\n\t\n\ttext\n\t\n\n"), STR("\t"), format_indent | format_no_empty_element_tags); } +TEST_XML_FLAGS(write_roundtrip, "premid<text&escapepostfin", parse_full) +{ + const unsigned int flagset[] = { format_indent, format_raw, format_no_declaration, format_indent_attributes, format_no_empty_element_tags }; + size_t flagcount = sizeof(flagset) / sizeof(flagset[0]); + + for (size_t i = 0; i < size_t(1 << flagcount); ++i) + { + unsigned int flags = 0; + + for (size_t j = 0; j < flagcount; ++j) + if (i & (1 << j)) + flags |= flagset[j]; + + std::string contents = write_narrow(doc, flags, encoding_utf8); + + pugi::xml_document verify; + CHECK(verify.load_buffer(contents.c_str(), contents.size(), parse_full)); + CHECK(test_write_narrow(verify, flags, encoding_utf8, contents.c_str(), contents.size())); + + pugi::xml_document verifyws; + CHECK(verifyws.load_buffer(contents.c_str(), contents.size(), parse_full | parse_ws_pcdata)); + CHECK(test_write_narrow(verifyws, flags, encoding_utf8, contents.c_str(), contents.size())); + } +} + #ifndef PUGIXML_NO_EXCEPTIONS struct throwing_writer: pugi::xml_writer {