#ifndef STEP_TEST_H #define STEP_TEST_H #include "../CppUnit/framework/TestCase.h" #include "../CppUnit/framework/TestSuite.h" #include "../CppUnit/framework/TestCaller.h" #include #include template class StepTest : public TestCase { typedef string_adaptor SA; Arabica::DOM::DOMImplementation factory_; Arabica::DOM::Document document_; Arabica::DOM::Element root_; Arabica::DOM::Element element1_; Arabica::DOM::Element element2_; Arabica::DOM::Element element3_; Arabica::DOM::Attr attr_; public: StepTest(const std::string& name) : TestCase(name) { } // StepTest void setUp() { factory_ = Arabica::SimpleDOM::DOMImplementation::getDOMImplementation(); document_ = factory_.createDocument(SA::construct_from_utf8(""), SA::construct_from_utf8("root"), 0); root_ = document_.getDocumentElement(); element1_ = document_.createElement(SA::construct_from_utf8("child1")); element2_ = document_.createElement(SA::construct_from_utf8("child2")); element3_ = document_.createElement(SA::construct_from_utf8("child3")); element1_.setAttribute(SA::construct_from_utf8("one"), SA::construct_from_utf8("1")); element2_.setAttribute(SA::construct_from_utf8("one"), SA::construct_from_utf8("1")); element2_.setAttribute(SA::construct_from_utf8("two"), SA::construct_from_utf8("1")); element2_.setAttribute(SA::construct_from_utf8("three"), SA::construct_from_utf8("1")); element2_.setAttribute(SA::construct_from_utf8("four"), SA::construct_from_utf8("1")); attr_ = element1_.getAttributeNode(SA::construct_from_utf8("one")); root_.appendChild(element1_); root_.appendChild(element2_); root_.appendChild(element3_); } // setUp void test1() { using namespace Arabica::XPath; XPathExpression step(new impl::TestStepExpression(CHILD, new impl::AnyNodeTest())); XPathValue value = step.evaluate(root_); const NodeSet& set = value.asNodeSet(); assertEquals(set.size(), 3); assertTrue(set[0] == element1_); assertTrue(set[1] == element2_); assertTrue(set[2] == element3_); } // test1 void test2() { using namespace Arabica::XPath; XPathExpression step(new impl::TestStepExpression(ATTRIBUTE, new impl::AnyNodeTest())); NodeSet set = step.evaluateAsNodeSet(element2_); assertEquals(4, set.size()); Arabica::DOM::Attr attr = static_cast >(set[0]); assertTrue(attr.getNodeName() == SA::construct_from_utf8("one")); attr = static_cast >(set[1]); assertTrue(attr.getNodeName() == SA::construct_from_utf8("two")); attr = static_cast >(set[2]); assertTrue(attr.getNodeName() == SA::construct_from_utf8("three")); attr = static_cast >(set[3]); assertTrue(attr.getNodeName() == SA::construct_from_utf8("four")); } // test2 void test3() { using namespace Arabica::XPath; XPathExpression step(new impl::TestStepExpression(CHILD, new impl::NameNodeTest(SA::construct_from_utf8("child2")))); XPathValue value = step.evaluate(root_); const NodeSet& set = value.asNodeSet(); assertEquals(1, set.size()); assertTrue(set[0] == element2_); } // test3 }; // class StepTest template TestSuite* StepTest_suite() { TestSuite* suiteOfTests = new TestSuite; suiteOfTests->addTest(new TestCaller >("test1", &StepTest::test1)); suiteOfTests->addTest(new TestCaller >("test2", &StepTest::test2)); suiteOfTests->addTest(new TestCaller >("test3", &StepTest::test3)); return suiteOfTests; } // StepTest_suite #endif