Added empty stream/buffer tests, fixed null buffer parsing in wchar_t mode

git-svn-id: http://pugixml.googlecode.com/svn/trunk@397 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-05-09 17:53:59 +00:00
parent 78057035d2
commit 464d0f4ff9
2 changed files with 54 additions and 3 deletions

View File

@ -922,10 +922,17 @@ namespace
{ {
const char_t* data = static_cast<const char_t*>(contents); const char_t* data = static_cast<const char_t*>(contents);
out_buffer = is_mutable ? const_cast<char_t*>(data) : static_cast<char_t*>(global_allocate(size > 0 ? size : 1)); if (is_mutable)
out_length = size / sizeof(char_t); {
out_buffer = const_cast<char_t*>(data);
}
else
{
out_buffer = static_cast<char_t*>(global_allocate(size > 0 ? size : 1));
if (!out_buffer) return false;
}
if (!out_buffer) return false; out_length = size / sizeof(char_t);
impl::convert_wchar_endian_swap(out_buffer, data, out_length); impl::convert_wchar_endian_swap(out_buffer, data, out_length);

View File

@ -71,6 +71,15 @@ TEST(document_load_stream_error)
CHECK(doc.load(iss).status == status_out_of_memory); CHECK(doc.load(iss).status == status_out_of_memory);
} }
TEST(document_load_stream_empty)
{
std::istringstream iss;
pugi::xml_document doc;
doc.load(iss); // parse result depends on STL implementation
CHECK(!doc.first_child());
}
TEST(document_load_stream_wide) TEST(document_load_stream_wide)
{ {
pugi::xml_document doc; pugi::xml_document doc;
@ -571,3 +580,38 @@ TEST(document_convert_invalid_utf16)
CHECK(test_parse_fail("\x00<\xde\x24", 4, encoding_utf16_be)); CHECK(test_parse_fail("\x00<\xde\x24", 4, encoding_utf16_be));
CHECK(test_parse_fail("<\x00\x24\xde", 4, encoding_utf16_le)); CHECK(test_parse_fail("<\x00\x24\xde", 4, encoding_utf16_le));
} }
TEST(document_load_buffer_empty)
{
encoding_t encodings[] =
{
encoding_auto,
encoding_utf8,
encoding_utf16_le,
encoding_utf16_be,
encoding_utf16,
encoding_utf32_le,
encoding_utf32_be,
encoding_utf32,
encoding_wchar
};
char buffer[1];
for (unsigned int i = 0; i < sizeof(encodings) / sizeof(encodings[0]); ++i)
{
encoding_t encoding = encodings[i];
xml_document doc;
CHECK(doc.load_buffer(buffer, 0, parse_default, encoding) && !doc.first_child());
CHECK(doc.load_buffer(0, 0, parse_default, encoding) && !doc.first_child());
CHECK(doc.load_buffer_inplace(buffer, 0, parse_default, encoding) && !doc.first_child());
CHECK(doc.load_buffer_inplace(0, 0, parse_default, encoding) && !doc.first_child());
void* own_buffer = pugi::get_memory_allocation_function()(1);
CHECK(doc.load_buffer_inplace_own(own_buffer, 0, parse_default, encoding) && !doc.first_child());
CHECK(doc.load_buffer_inplace_own(0, 0, parse_default, encoding) && !doc.first_child());
}
}