diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/CMakeLists.txt | 1 | ||||
-rw-r--r-- | test/xml/CMakeLists.txt | 6 | ||||
-rw-r--r-- | test/xml/ParserTest.cpp | 135 |
3 files changed, 142 insertions, 0 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3b9567cd..455aad90 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,6 +7,7 @@ target_link_libraries(cru_test_base INTERFACE GTest::gtest GTest::gtest_main) add_subdirectory(common) add_subdirectory(platform) +add_subdirectory(xml) if(WIN32) add_subdirectory(win) diff --git a/test/xml/CMakeLists.txt b/test/xml/CMakeLists.txt new file mode 100644 index 00000000..a8dfa264 --- /dev/null +++ b/test/xml/CMakeLists.txt @@ -0,0 +1,6 @@ +add_executable(cru_xml_test + ParserTest.cpp +) +target_link_libraries(cru_xml_test PRIVATE cru_xml cru_test_base) + +gtest_discover_tests(cru_xml_test) diff --git a/test/xml/ParserTest.cpp b/test/xml/ParserTest.cpp new file mode 100644 index 00000000..01098b7c --- /dev/null +++ b/test/xml/ParserTest.cpp @@ -0,0 +1,135 @@ +#include "cru/xml/XmlNode.hpp" +#include "cru/xml/XmlParser.hpp" + +#include <gtest/gtest.h> + +using namespace cru::xml; + +TEST(CruXmlParserTest, Simple) { + XmlParser parser(u"<root></root>"); + auto n = parser.Parse(); + ASSERT_EQ(n->GetTag(), u"root"); + ASSERT_EQ(n->GetAttributes().empty(), true); + ASSERT_EQ(n->GetChildren().size(), 0); + delete n; +} + +TEST(CruXmlParserTest, SimpleWithAttribute) { + XmlParser parser(u"<root a1=\"v1\" a2=\"v2\"></root>"); + auto n = parser.Parse(); + ASSERT_EQ(n->GetTag(), u"root"); + ASSERT_EQ(n->GetAttributes().at(u"a1"), u"v1"); + ASSERT_EQ(n->GetAttributes().at(u"a2"), u"v2"); + ASSERT_EQ(n->GetChildren().size(), 0); + delete n; +} + +TEST(CruXmlParserTest, SimpleSelfClosing) { + XmlParser parser(u"<root a1=\"v1\" a2=\"v2\"/>"); + auto n = parser.Parse(); + ASSERT_EQ(n->GetTag(), u"root"); + ASSERT_EQ(n->GetAttributes().at(u"a1"), u"v1"); + ASSERT_EQ(n->GetAttributes().at(u"a2"), u"v2"); + ASSERT_EQ(n->GetChildren().size(), 0); + delete n; +} + +TEST(CruXmlParserTest, NestedElement) { + XmlParser parser( + u"<root><c1><d1></d1></c1><c2><d2></d2><d3></d3></c2></root>"); + auto n = parser.Parse(); + ASSERT_EQ(n->GetChildren().size(), 2); + ASSERT_EQ(static_cast<XmlElementNode*>(n->GetChildren().at(0))->GetTag(), + u"c1"); + ASSERT_EQ(static_cast<XmlElementNode*>(n->GetChildren().at(1))->GetTag(), + u"c2"); + ASSERT_EQ(static_cast<XmlElementNode*>(n->GetChildren().at(0)) + ->GetChildren() + .size(), + 1); + ASSERT_EQ(static_cast<XmlElementNode*>( + static_cast<XmlElementNode*>(n->GetChildren().at(0)) + ->GetChildren() + .at(0)) + ->GetTag(), + u"d1"); + ASSERT_EQ(static_cast<XmlElementNode*>(n->GetChildren().at(1)) + ->GetChildren() + .size(), + 2); + ASSERT_EQ(static_cast<XmlElementNode*>( + static_cast<XmlElementNode*>(n->GetChildren().at(1)) + ->GetChildren() + .at(0)) + ->GetTag(), + u"d2"); + ASSERT_EQ(static_cast<XmlElementNode*>( + static_cast<XmlElementNode*>(n->GetChildren().at(1)) + ->GetChildren() + .at(1)) + ->GetTag(), + u"d3"); + delete n; +} + +TEST(CruXmlParserTest, SimpleText) { + XmlParser parser(u"<root>text</root>"); + auto n = parser.Parse(); + ASSERT_EQ(n->GetChildren().size(), 1); + ASSERT_EQ(static_cast<XmlTextNode*>(n->GetChildren().at(0))->GetText(), + u"text"); + delete n; +} + +TEST(CruXmlParserTest, Whitespace) { + XmlParser parser(u"\t\t<root>\n\t\t\ttext test\n\t\t</root>\t\t"); + auto n = parser.Parse(); + ASSERT_EQ(n->GetChildren().size(), 1); + ASSERT_EQ(static_cast<XmlTextNode*>(n->GetChildren().at(0))->GetText(), + u"text test"); + delete n; +} + +TEST(CruXmlParserTest, Complex) { + XmlParser parser( + uR"( +<root a1="v1"> + <c1> + <d1> + </d1> + </c1> + <c2 a2="v2" a3="v3"> + t1 + <d2 a4="v4"> t2 </d2> + text test + <d3></d3> + t2 + </c2> +</root> + )"); + auto n = parser.Parse(); + ASSERT_EQ(n->GetAttributes().at(u"a1"), u"v1"); + ASSERT_EQ(n->GetChildren().size(), 2); + ASSERT_EQ(static_cast<XmlElementNode*>(n->GetChildren().at(0))->GetTag(), + u"c1"); + ASSERT_EQ(static_cast<XmlElementNode*>(n->GetChildren().at(0)) + ->GetChildren() + .size(), + 1); + auto c2 = static_cast<XmlElementNode*>(n->GetChildren().at(1)); + ASSERT_EQ(c2->GetTag(), u"c2"); + ASSERT_EQ(c2->GetAttributes().at(u"a2"), u"v2"); + ASSERT_EQ(c2->GetAttributes().at(u"a3"), u"v3"); + ASSERT_EQ(static_cast<XmlTextNode*>(c2->GetChildren().at(0))->GetText(), + u"t1"); + auto d2 = static_cast<XmlElementNode*>(c2->GetChildren().at(1)); + ASSERT_EQ(d2->GetTag(), u"d2"); + ASSERT_EQ(d2->GetAttributes().at(u"a4"), u"v4"); + ASSERT_EQ(static_cast<XmlTextNode*>(c2->GetChildren().at(2))->GetText(), + u"text test"); + ASSERT_EQ(static_cast<XmlElementNode*>(c2->GetChildren().at(3))->GetTag(), + u"d3"); + ASSERT_EQ(static_cast<XmlTextNode*>(c2->GetChildren().at(4))->GetText(), + u"t2"); + delete n; +} |