summaryrefslogtreecommitdiff
path: root/tests/test_short_wchar.cpp
blob: 2892495e613459766e005858bcdb5067d34b50e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#if defined(__GNUC__) && __WCHAR_MAX__ == 0xffff
#define PUGIXML_HEADER_ONLY
#define PUGIXML_WCHAR_MODE
#define PUGIXML_NO_STL
#define pugi pugisw

#include "test.hpp"

#include <string.h>

using namespace pugi;

TEST(short_wchar_parse_utf32_be)
{
	xml_document doc;
	CHECK(doc.load_buffer("\x00\x00\xfe\xff\x00\x00\x00t\x00\x00\x00o\x00\x00\x00s\x00\x00\x00t", 20, parse_fragment));

	const char_t* text = doc.text().get();

	CHECK(text[0] == 't');
	CHECK(text[1] == 'o');
	CHECK(text[2] == 's');
	CHECK(text[3] == 't');
	CHECK(text[4] == 0);
}

TEST(short_wchar_parse_utf32_le)
{
	xml_document doc;
	CHECK(doc.load_buffer("\xff\xfe\x00\x00t\x00\x00\x00o\x00\x00\x00s\x00\x00\x00t\x00\x00\x00", 20, parse_fragment));

	const char_t* text = doc.text().get();

	CHECK(text[0] == 't');
	CHECK(text[1] == 'o');
	CHECK(text[2] == 's');
	CHECK(text[3] == 't');
	CHECK(text[4] == 0);
}

struct buffer_writer: xml_writer
{
	char buffer[128];
	size_t offset;

	buffer_writer(): offset(0)
	{
	}

	virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE
	{
		CHECK(offset + size <= sizeof(buffer));

		memcpy(buffer + offset, data, size);
		offset += size;
	}
};

TEST(short_wchar_output_utf32_be)
{
	xml_document doc;
	doc.append_child(node_doctype);

	buffer_writer writer;
	doc.print(writer, L"", format_raw, encoding_utf32_be);

	CHECK(memcmp(writer.buffer, "\0\0\0<\0\0\0!\0\0\0D\0\0\0O\0\0\0C\0\0\0T\0\0\0Y\0\0\0P\0\0\0E\0\0\0>", 40) == 0);
}

TEST(short_wchar_output_utf32_le)
{
	xml_document doc;
	doc.append_child(node_doctype);

	buffer_writer writer;
	doc.print(writer, L"", format_raw, encoding_utf32_le);

	CHECK(memcmp(writer.buffer, "<\0\0\0!\0\0\0D\0\0\0O\0\0\0C\0\0\0T\0\0\0Y\0\0\0P\0\0\0E\0\0\0>\0\0\0", 40) == 0);
}
#endif