#include "cru/xml/XmlNode.hpp" #include "cru/xml/XmlParser.hpp" #include using namespace cru::xml; TEST(CruXmlParserTest, Simple) { XmlParser parser(u""); auto n = parser.Parse(); ASSERT_EQ(n->GetTag(), u"root"); ASSERT_EQ(n->GetAttributes().empty(), true); ASSERT_EQ(n->GetChildCount(), 0); delete n; } TEST(CruXmlParserTest, SimpleWithAttribute) { XmlParser parser(u""); auto n = parser.Parse(); ASSERT_EQ(n->GetTag(), u"root"); ASSERT_EQ(n->GetAttribute(u"a1"), u"v1"); ASSERT_EQ(n->GetAttribute(u"a2"), u"v2"); ASSERT_EQ(n->GetChildCount(), 0); delete n; } TEST(CruXmlParserTest, SimpleSelfClosing) { XmlParser parser(u""); auto n = parser.Parse(); ASSERT_EQ(n->GetTag(), u"root"); ASSERT_EQ(n->GetAttribute(u"a1"), u"v1"); ASSERT_EQ(n->GetAttribute(u"a2"), u"v2"); ASSERT_EQ(n->GetChildCount(), 0); delete n; } TEST(CruXmlParserTest, NestedElement) { XmlParser parser( u""); auto n = parser.Parse(); ASSERT_EQ(n->GetChildren().size(), 2); ASSERT_EQ(n->GetChildAt(0)->AsElement()->GetTag(), u"c1"); ASSERT_EQ(n->GetChildAt(1)->AsElement()->GetTag(), u"c2"); ASSERT_EQ(n->GetChildAt(0)->AsElement()->GetChildCount(), 1); ASSERT_EQ(n->GetChildAt(0)->AsElement()->GetChildAt(0)->AsElement()->GetTag(), u"d1"); ASSERT_EQ(n->GetChildAt(1)->AsElement()->GetChildCount(), 2); ASSERT_EQ(n->GetChildAt(1)->AsElement()->GetChildAt(0)->AsElement()->GetTag(), u"d2"); ASSERT_EQ(n->GetChildAt(1)->AsElement()->GetChildAt(1)->AsElement()->GetTag(), u"d3"); delete n; } TEST(CruXmlParserTest, SimpleText) { XmlParser parser(u"text"); auto n = parser.Parse(); ASSERT_EQ(n->GetChildCount(), 1); ASSERT_EQ(n->GetChildAt(0)->AsText()->GetText(), u"text"); delete n; } TEST(CruXmlParserTest, Whitespace) { XmlParser parser(u"\t\t\n\t\t\ttext test\n\t\t\t\t"); auto n = parser.Parse(); ASSERT_EQ(n->GetChildCount(), 1); ASSERT_EQ(n->GetChildAt(0)->AsText()->GetText(), u"text test"); delete n; } TEST(CruXmlParserTest, Complex) { XmlParser parser( uR"( t1 t2 text test t2 )"); auto n = parser.Parse(); ASSERT_EQ(n->GetAttribute(u"a1"), u"v1"); ASSERT_EQ(n->GetChildCount(), 2); ASSERT_EQ(n->GetChildAt(0)->AsElement()->GetTag(), u"c1"); ASSERT_EQ(n->GetChildAt(0)->AsElement()->GetChildCount(), 1); auto c2 = n->GetChildAt(1)->AsElement(); ASSERT_EQ(c2->GetTag(), u"c2"); ASSERT_EQ(c2->GetAttribute(u"a2"), u"v2"); ASSERT_EQ(c2->GetAttribute(u"a3"), u"v3"); ASSERT_EQ(c2->GetChildAt(0)->AsText()->GetText(), u"t1"); auto d2 = c2->GetChildAt(1)->AsElement(); ASSERT_EQ(d2->GetTag(), u"d2"); ASSERT_EQ(d2->GetAttribute(u"a4"), u"v4"); ASSERT_EQ(c2->GetChildAt(2)->AsText()->GetText(), u"text test"); ASSERT_EQ(c2->GetChildAt(3)->AsElement()->GetTag(), u"d3"); ASSERT_EQ(c2->GetChildAt(4)->AsText()->GetText(), u"t2"); delete n; }