blob: 0d3ab1d76afdcc3058636af6a96b99f1e567c863 (
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#include "cru/xml/XmlNode.h"
#include "cru/xml/XmlParser.h"
#include <catch2/catch_test_macros.hpp>
using namespace cru::xml;
TEST_CASE("CruXmlParserTest Simple", "[xml]") {
XmlParser parser("<root></root>");
auto n = parser.Parse();
REQUIRE(n->GetTag() == "root");
REQUIRE(n->GetAttributes().empty() == true);
REQUIRE(n->GetChildCount() == 0);
delete n;
}
TEST_CASE("CruXmlParserTest SimpleWithAttribute", "[xml]") {
XmlParser parser("<root a1=\"v1\" a2=\"v2\"></root>");
auto n = parser.Parse();
REQUIRE(n->GetTag() == "root");
REQUIRE(n->GetAttributeValue("a1") == "v1");
REQUIRE(n->GetAttributeValue("a2") == "v2");
REQUIRE(n->GetChildCount() == 0);
delete n;
}
TEST_CASE("CruXmlParserTest SimpleSelfClosing", "[xml]") {
XmlParser parser("<root a1=\"v1\" a2=\"v2\"/>");
auto n = parser.Parse();
REQUIRE(n->GetTag() == "root");
REQUIRE(n->GetAttributeValue("a1") == "v1");
REQUIRE(n->GetAttributeValue("a2") == "v2");
REQUIRE(n->GetChildCount() == 0);
delete n;
}
TEST_CASE("CruXmlParserTest NestedElement", "[xml]") {
XmlParser parser(
"<root><c1><d1></d1></c1><c2><d2></d2><d3></d3></c2></root>");
auto n = parser.Parse();
REQUIRE(n->GetChildren().size() == 2);
REQUIRE(n->GetChildAt(0)->AsElement()->GetTag() == "c1");
REQUIRE(n->GetChildAt(1)->AsElement()->GetTag() == "c2");
REQUIRE(n->GetChildAt(0)->AsElement()->GetChildCount() == 1);
REQUIRE(n->GetChildAt(0)->AsElement()->GetChildAt(0)->AsElement()->GetTag() ==
"d1");
REQUIRE(n->GetChildAt(1)->AsElement()->GetChildCount() == 2);
REQUIRE(n->GetChildAt(1)->AsElement()->GetChildAt(0)->AsElement()->GetTag() ==
"d2");
REQUIRE(n->GetChildAt(1)->AsElement()->GetChildAt(1)->AsElement()->GetTag() ==
"d3");
delete n;
}
TEST_CASE("CruXmlParserTest SimpleText", "[xml]") {
XmlParser parser("<root>text</root>");
auto n = parser.Parse();
REQUIRE(n->GetChildCount() == 1);
REQUIRE(n->GetChildAt(0)->AsText()->GetText() == "text");
delete n;
}
TEST_CASE("CruXmlParserTest Whitespace", "[xml]") {
XmlParser parser("\t\t<root>\n\t\t\ttext test\n\t\t</root>\t\t");
auto n = parser.Parse();
REQUIRE(n->GetChildCount() == 1);
REQUIRE(n->GetChildAt(0)->AsText()->GetText() == "text test");
delete n;
}
TEST_CASE("CruXmlParserTest Comment", "[xml]") {
XmlParser parser("<!-- comment -->");
auto n = parser.Parse();
REQUIRE(n->IsCommentNode());
REQUIRE(n->AsComment()->GetText() == "comment");
delete n;
}
TEST_CASE("CruXmlParserTest Complex", "[xml]") {
XmlParser parser(
R"(
<root a1="v1">
<c1>
<d1>
</d1>
</c1>
<c2 a2="v2" a3="v3">
t1
<d2 a4="v4"> t2 </d2>
text test
<d3></d3>
t2
</c2>
<!-- comment -->
</root>
)");
auto n = parser.Parse();
REQUIRE(n->GetAttributeValue("a1") == "v1");
REQUIRE(n->GetChildCount() == 3);
REQUIRE(n->GetChildAt(0)->AsElement()->GetTag() == "c1");
REQUIRE(n->GetChildAt(0)->AsElement()->GetChildCount() == 1);
auto c2 = n->GetChildAt(1)->AsElement();
REQUIRE(c2->GetTag() == "c2");
REQUIRE(c2->GetAttributeValue("a2") == "v2");
REQUIRE(c2->GetAttributeValue("a3") == "v3");
REQUIRE(c2->GetChildAt(0)->AsText()->GetText() == "t1");
auto d2 = c2->GetChildAt(1)->AsElement();
REQUIRE(d2->GetTag() == "d2");
REQUIRE(d2->GetAttributeValue("a4") == "v4");
REQUIRE(c2->GetChildAt(2)->AsText()->GetText() == "text test");
REQUIRE(c2->GetChildAt(3)->AsElement()->GetTag() == "d3");
REQUIRE(c2->GetChildAt(4)->AsText()->GetText() == "t2");
REQUIRE(n->GetChildAt(2)->IsCommentNode());
REQUIRE(n->GetChildAt(2)->AsComment()->GetText() == "comment");
delete n;
}
|