From: Adam Dickmeiss Date: Mon, 24 Oct 2005 09:53:06 +0000 (+0000) Subject: Method configure takes const xmlNode pointer. Added testfilter2_2 which X-Git-Tag: YP2.0.0.2~192 X-Git-Url: http://lists.indexdata.dk/?a=commitdiff_plain;h=6bc88ade75f56744b360e623243de9b5eafa0c3d;p=metaproxy-moved-to-github.git Method configure takes const xmlNode pointer. Added testfilter2_2 which tests this facility. --- diff --git a/src/filter.hpp b/src/filter.hpp index 45846f8..8f053b5 100644 --- a/src/filter.hpp +++ b/src/filter.hpp @@ -1,4 +1,4 @@ -/* $Id: filter.hpp,v 1.5 2005-10-16 16:05:44 adam Exp $ +/* $Id: filter.hpp,v 1.6 2005-10-24 09:53:06 adam Exp $ Copyright (c) 2005, Index Data. %LICENSE% @@ -8,6 +8,7 @@ #define FILTER_HPP #include +#include namespace yp2 { @@ -21,7 +22,7 @@ namespace yp2 { ///sends Package off to next Filter, returns altered Package virtual void process(Package & package) const = 0; - virtual void configure(){}; + virtual void configure(const xmlNode * ptr = 0) { } ; /// get function - right val in assignment std::string name() const { diff --git a/src/test_filter2.cpp b/src/test_filter2.cpp index 4b70368..3313d54 100644 --- a/src/test_filter2.cpp +++ b/src/test_filter2.cpp @@ -1,9 +1,11 @@ -/* $Id: test_filter2.cpp,v 1.9 2005-10-15 14:09:09 adam Exp $ +/* $Id: test_filter2.cpp,v 1.10 2005-10-24 09:53:06 adam Exp $ Copyright (c) 2005, Index Data. %LICENSE% */ +#include +#include #include "config.hpp" #include "filter.hpp" @@ -24,9 +26,81 @@ public: package.data() = 1234; package.move(); }; + void configure(const xmlNode* ptr = 0) { + m_ptr = ptr; + + BOOST_CHECK_EQUAL (ptr->type, XML_ELEMENT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *) ptr->name), "filter"); + + const struct _xmlAttr *attr; + + for (attr = ptr->properties; attr; attr = attr->next) + { + BOOST_CHECK_EQUAL( std::string((const char *)attr->name), "type"); + const xmlNode *val = attr->children; + BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *)val->content), "constant"); + } + const xmlNode *p = ptr->children; + for (; p; p = p->next) + { + if (p->type != XML_ELEMENT_NODE) + continue; + + BOOST_CHECK_EQUAL (p->type, XML_ELEMENT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *) p->name), "value"); + + const xmlNode *val = p->children; + BOOST_CHECK(val); + if (!val) + continue; + + BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *)val->content), "2"); + } + } +private: + bool parse_xml_text(const xmlNode *xml_ptr, bool &val); + bool parse_xml_text(const xmlNode *xml_ptr, std::string &val); +private: + const xmlNode *m_ptr; }; +bool FilterConstant::parse_xml_text(const xmlNode *xml_ptr, bool &val) +{ + std::string v; + if (!parse_xml_text(xml_ptr, v)) + return false; + if (v.length() == 1 && v[0] == '1') + val = true; + else + val = false; + return true; +} + +bool FilterConstant::parse_xml_text(const xmlNode *xml_ptr, std::string &val) +{ + xmlNodePtr ptr = (xmlNodePtr) xml_ptr; + bool found = false; + std::string v; + for(ptr = ptr->children; ptr; ptr = ptr->next) + if (ptr->type == XML_TEXT_NODE) + { + xmlChar *t = ptr->content; + if (t) + { + v += (const char *) t; + found = true; + } + } + if (found) + val = v; + return found; +} + +// This filter dose not have a configure function + class FilterDouble: public yp2::filter::Base { public: void process(yp2::Package & package) const { @@ -34,9 +108,9 @@ public: package.move(); }; }; + - -BOOST_AUTO_TEST_CASE( testfilter2 ) +BOOST_AUTO_TEST_CASE( testfilter2_1 ) { try { FilterConstant fc; @@ -89,6 +163,42 @@ BOOST_AUTO_TEST_CASE( testfilter2 ) } + +BOOST_AUTO_TEST_CASE( testfilter2_2 ) +{ + try { + FilterConstant fc; + + std::string some_xml = "\n" + "\n" + " 2\n" + ""; + + std::cout << some_xml << std::endl; + + xmlDocPtr doc = xmlParseMemory(some_xml.c_str(), some_xml.size()); + + BOOST_CHECK(doc); + + if (doc) + { + xmlNodePtr root_element = xmlDocGetRootElement(doc); + + fc.configure(root_element); + + FilterDouble fd; + } + } + catch (std::exception &e) { + std::cout << e.what() << "\n"; + BOOST_CHECK (false); + } + catch ( ...) { + BOOST_CHECK (false); + } + +} + /* * Local variables: * c-basic-offset: 4