diff options
| author | arseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640> | 2009-10-20 21:39:43 +0000 | 
|---|---|---|
| committer | arseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640> | 2009-10-20 21:39:43 +0000 | 
| commit | 0ceaa38aeb258b6cc055fa002f718a921d52c6ab (patch) | |
| tree | 868027b15390ee6fea0c395dc522b531d35ea03f | |
| parent | 009f3d50d2736b0b7d2457d9aa67cd967f39e316 (diff) | |
tests: Added forgotten test files
git-svn-id: http://pugixml.googlecode.com/svn/trunk@168 99668b35-9821-0410-8761-19e4c4f06640
| -rw-r--r-- | tests/test_memory.cpp | 66 | ||||
| -rw-r--r-- | tests/test_unicode.cpp | 37 | 
2 files changed, 103 insertions, 0 deletions
diff --git a/tests/test_memory.cpp b/tests/test_memory.cpp new file mode 100644 index 0000000..8f2d41b --- /dev/null +++ b/tests/test_memory.cpp @@ -0,0 +1,66 @@ +#include "common.hpp"
 +
 +namespace
 +{
 +	char buffer[8];
 +	int allocate_count = 0;
 +	int deallocate_count = 0;
 +
 +	void* allocate(size_t size)
 +	{
 +		CHECK(size == 8);
 +		++allocate_count;
 +		return buffer;
 +	}
 +
 +	void deallocate(void* ptr)
 +	{
 +		CHECK(ptr == buffer);
 +		++deallocate_count;
 +	}
 +}
 +
 +TEST(custom_memory_management)
 +{
 +	// remember old functions
 +	allocation_function old_allocate = get_memory_allocation_function();
 +	deallocation_function old_deallocate = get_memory_deallocation_function();
 +
 +	// replace functions
 +	set_memory_management_functions(allocate, deallocate);
 +
 +	try
 +	{
 +		{
 +			// parse document
 +			xml_document doc;
 +			CHECK(doc.load("<node/>"));
 +	
 +			CHECK(allocate_count == 1);
 +			CHECK(deallocate_count == 0);
 +			CHECK_STRING(buffer, "<node\0>");
 +
 +			// modify document
 +			doc.child("node").set_name("foobars");
 +
 +			CHECK(allocate_count == 2);
 +			CHECK(deallocate_count == 0);
 +			CHECK_STRING(buffer, "foobars");
 +		}
 +
 +		CHECK(allocate_count == 2);
 +		CHECK(deallocate_count == 2);
 +		CHECK_STRING(buffer, "foobars");
 +
 +		// restore old functions
 +		set_memory_management_functions(old_allocate, old_deallocate);
 +	}
 +	catch (const char* error)
 +	{
 +		// restore old functions
 +		set_memory_management_functions(old_allocate, old_deallocate);
 +
 +		// rethrow
 +		throw error;
 +	}
 +}
 diff --git a/tests/test_unicode.cpp b/tests/test_unicode.cpp new file mode 100644 index 0000000..b763355 --- /dev/null +++ b/tests/test_unicode.cpp @@ -0,0 +1,37 @@ +#include "common.hpp"
 +
 +// letters taken from http://www.utf8-chartable.de/
 +
 +TEST(as_utf16)
 +{
 +	// valid 1-byte, 2-byte and 3-byte inputs
 +	CHECK(as_utf16("?\xd0\x80\xe2\x80\xbd") == L"?\x0400\x203D");
 +	
 +	// invalid 1-byte input
 +	CHECK(as_utf16("\xb0") == L" ");
 +	
 +	// valid 4-byte input
 +	std::wstring b4 = as_utf16("\xf2\x97\x98\xa4 \xf4\x80\x8f\xbf");
 +	CHECK(b4.size() == 3 && b4[0] == (wchar_t)0x97624 && b4[1] == L' ' && b4[2] == (wchar_t)0x1003ff);
 +
 +	// invalid 5-byte input
 +	std::wstring b5 = as_utf16("\xf8\nbcd");
 +	CHECK(b5 == L" \nbcd");
 +}
 +
 +TEST(as_utf8)
 +{
 +	// valid 1-byte, 2-byte and 3-byte outputs
 +	CHECK(as_utf8(L"?\x0400\x203D") == "?\xd0\x80\xe2\x80\xbd");
 +	
 +	// valid 4-byte output
 +#if 0
 +	// requires 4-byte wchar_t :(
 +	CHECK(as_utf8(L"\x97624 \x1003ff") == "\xf2\x97\x98\xa4 \xf4\x80\x8f\xbf");
 +#endif
 +}
 +
 +TEST_XML(parse_bom_utf8, "\xef\xbb\xbf<node/>")
 +{
 +	CHECK_NODE(doc, "<node />");
 +}
  | 
