Using XmlCheck
[Using instructions]

Class XmlCheck allows to check the contents of an XML tree/subtree. More...

Collaboration diagram for Using XmlCheck:


Detailed Description

Class XmlCheck allows to check the contents of an XML tree/subtree.


Supported features

Depends on

HowTo access XML nodes with TinyXml

 // Read XML string into XML document structure
 TiXmlDocument doc;
 doc.Parse(DEMO_XML_STRING);

 // Save XML document to file
 std::string filePath = MY_TEST_DIR + "/GeneratedXmlFile.xml";
 doc.SaveFile(filePath.c_str());

 // Read XML file into XML document structure
 TiXmlDocument docFromFile;
 docFromFile.LoadFile(filePath.c_str());

HowTo address subnodes with TinyXpath

/MyContainer/Group_B subnode Group_B
/MyContainer/Group_B/x first x element within Group_B
/MyContainer/Group_B/x[3] third x element within Group_B
/MyContainer/Group_B/x[last()] last x element of Group_B
/MyContainer/Country[@name='Germany'] first country with specific attribute 'name'
/MyContainer/Country[attribute::name='USA'] first country with specific attribute 'name' (explicit syntax)

Typical code snippets when used with Boost.Test

see also TestXmlCheckWithBoost

       BOOST_MESSAGE("\nComparing two XML trees");
       BOOST_CHECK(TTB::TheXmlCheck()->Compare(&docA,&docB));
       BOOST_MESSAGE(TTB::TheXmlCheck()->GetCompareResult());
       
       BOOST_MESSAGE("\nComparing two XML subtrees using XPath, ignoring time");
       TTB::TheXmlCheck()->IgnoreAttribute("time");
       BOOST_CHECK(TTB::TheXmlCheck()->Compare(
           TTB::XmlCheck::SubNodeFromXPath(docA.RootElement(), "/MyContainer/Group_B"),
           TTB::XmlCheck::SubNodeFromXPath(docB.RootElement(), "/MyContainer/Group_B")));
       BOOST_MESSAGE(TTB::TheXmlCheck()->GetCompareResult());
       

Typical code snippets when used with Boost.Test and TestToolBox::TestEvents

see also TestXmlCheckWithBoostExtensions

       TTB::TheXmlCheck()->IgnoreAttribute("date");
       TTB::TheXmlCheck()->IgnoreAttribute("time");
       TTB::TheXmlCheck()->IgnoreNode("date");
       TTB::TheXmlCheck()->UseAsDoubleAttribute("tolerance", true, 3);
       TTB::TheXmlCheck()->UseAsDoubleNode("x", true, 4);
       TTB::TheXmlCheck()->CheckNode(&doc);
       TTB_EXP("MyContainer");
       TTB_EXP("  Group_A");
       TTB_EXP("    Vector");
       TTB_EXP("      id: 1");
       TTB_EXP("      tolerance: 0.026");
       TTB_EXP("      This is the text of the first vector element");
       TTB_EXP("      x");
       TTB_EXP("        3.1424");
       TTB_EXP("    Vector");
       TTB_EXP("      id: 2");
       TTB_EXP("      tolerance: 0.026");
       TTB_EXP("      This is the text of the second vector element");
       TTB_EXP("      x");
       TTB_EXP("        1.3264");
       
       TTB::TheXmlCheck()->CheckSubNode(doc.RootElement(),""/MyContainer/Group_A/Vector[last()]");
       TTB_EXP("Vector");
       TTB_EXP("  id: 3");
       TTB_EXP("  tolerance: 1.357");
       TTB_EXP("  x");
       TTB_EXP("    6.28532");
        or as alternative syntax:
        TTB::TheXmlCheck()->CheckSubNode(
            TTB::XmlCheck::SubNodeFromXPath(doc.RootElement(),"/MyContainer/Group_A"),
            "Vector[last()]");
       or identifying XML contents via multiple attributes / multiple XPath expressions:
       XPath: Direct acess to third node hierarchy (street within town within country)
       TTB::TheXmlCheck()->CheckSubNode(doc.RootElement(),
           "Country[@name='Germany']",
           "Town[@name='Regensburg']",
           "Street[@name='LappersdorferStrasse']");
       TTB_EXP("Street");
       TTB_EXP("  name: LappersdorferStrasse");
       TTB_EXP("  Contents for LappersdorferStrasse in Regensburg, Germany");
       
       TTB::TheXmlCheck()->IgnoreAttribute("time");
       TTB::TheXmlCheck()->Compare(&docA,&docB);
       TTB_EXP("Difference detected");
       TTB_EXP("A: tolerance: 0.0258 (line: 7 col: 54, path: //MyContainer/Group_A/Vector)");
       TTB_EXP("B: tolerance: 0.8258 (line: 9 col: 54, path: //MyContainer/Group_A/Vector)");
       TTB::TheXmlCheck()->Compare(
           TTB::XmlCheck::SubNodeFromXPath(docA.RootElement(), "/MyContainer/Group_B"),
           TTB::XmlCheck::SubNodeFromXPath(docB.RootElement(), "/MyContainer/Group_B"));
       TTB_EXP("Difference detected");
       TTB_EXP("A: 3.132437 (line: 18 col: 8, path: //MyContainer/Group_B/x/3.132437/)");
       TTB_EXP("B: 12.132437 (line: 20 col: 8, path: //MyContainer/Group_B/x/12.132437/)");
       

Code usage

There are two main possibilities to use XmlCheck within your test applications:

See also:
XmlCheck.h (File documentation)
TestToolBox::XmlCheck (class documentation)
TestXmlCheckBasic (basic tests)
TestXmlCheckWithBoost (tests with Boost)
TestXmlCheckWithBoostExtensions (tests with Boost and TestToolBox::TestEvents)
Generated on Fri May 27 22:53:22 2011 for TestToolBox by  doxygen 1.6.3