#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; DOM::DOMImplementation factory_; DOM::Document document_; DOM::Element root_; DOM::Element element1_; DOM::Element element2_; DOM::Element element3_; DOM::Attr attr_; public: StepTest(const std::string& name) : TestCase(name) { } // StepTest void setUp() { factory_ = 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; XPathExpressionPtr step(new impl::TestStepExpression(CHILD, new impl::AnyNodeTest())); XPathValuePtr 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; XPathExpressionPtr step(new impl::TestStepExpression(ATTRIBUTE, new impl::AnyNodeTest())); NodeSet set = step->evaluateAsNodeSet(element2_); assertEquals(4, set.size()); 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; XPathExpressionPtr step(new impl::TestStepExpression(CHILD, new impl::NameNodeTest(SA::construct_from_utf8("child2")))); XPathValuePtr 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