Method configure takes const xmlNode pointer. Added testfilter2_2 which
[metaproxy-moved-to-github.git] / src / test_filter2.cpp
index 4b70368..3313d54 100644 (file)
@@ -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 <libxml/parser.h>
+#include <libxml/tree.h>
 
 #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 = "<?xml version=\"1.0\"?>\n"
+            "<filter type=\"constant\">\n"
+            " <value>2</value>\n"
+            "</filter>";
+        
+        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