1 /* $Id: test_filter2.cpp,v 1.10 2005-10-24 09:53:06 adam Exp $
2 Copyright (c) 2005, Index Data.
7 #include <libxml/parser.h>
8 #include <libxml/tree.h>
13 #include "package.hpp"
17 #define BOOST_AUTO_TEST_MAIN
18 #include <boost/test/auto_unit_test.hpp>
20 using namespace boost::unit_test;
23 class FilterConstant: public yp2::filter::Base {
25 void process(yp2::Package & package) const {
26 package.data() = 1234;
29 void configure(const xmlNode* ptr = 0) {
32 BOOST_CHECK_EQUAL (ptr->type, XML_ELEMENT_NODE);
33 BOOST_CHECK_EQUAL(std::string((const char *) ptr->name), "filter");
35 const struct _xmlAttr *attr;
37 for (attr = ptr->properties; attr; attr = attr->next)
39 BOOST_CHECK_EQUAL( std::string((const char *)attr->name), "type");
40 const xmlNode *val = attr->children;
41 BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE);
42 BOOST_CHECK_EQUAL(std::string((const char *)val->content), "constant");
44 const xmlNode *p = ptr->children;
45 for (; p; p = p->next)
47 if (p->type != XML_ELEMENT_NODE)
50 BOOST_CHECK_EQUAL (p->type, XML_ELEMENT_NODE);
51 BOOST_CHECK_EQUAL(std::string((const char *) p->name), "value");
53 const xmlNode *val = p->children;
58 BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE);
59 BOOST_CHECK_EQUAL(std::string((const char *)val->content), "2");
63 bool parse_xml_text(const xmlNode *xml_ptr, bool &val);
64 bool parse_xml_text(const xmlNode *xml_ptr, std::string &val);
70 bool FilterConstant::parse_xml_text(const xmlNode *xml_ptr, bool &val)
73 if (!parse_xml_text(xml_ptr, v))
75 if (v.length() == 1 && v[0] == '1')
82 bool FilterConstant::parse_xml_text(const xmlNode *xml_ptr, std::string &val)
84 xmlNodePtr ptr = (xmlNodePtr) xml_ptr;
87 for(ptr = ptr->children; ptr; ptr = ptr->next)
88 if (ptr->type == XML_TEXT_NODE)
90 xmlChar *t = ptr->content;
93 v += (const char *) t;
102 // This filter dose not have a configure function
104 class FilterDouble: public yp2::filter::Base {
106 void process(yp2::Package & package) const {
107 package.data() = package.data() * 2;
113 BOOST_AUTO_TEST_CASE( testfilter2_1 )
117 fc.name() = "FilterConstant";
119 fd.name() = "FilterDouble";
122 yp2::RouterChain router1;
124 // test filter set/get/exception
129 yp2::Session session;
131 yp2::Package pack(session, origin);
133 pack.router(router1).move();
135 BOOST_CHECK (pack.data() == 2468);
140 yp2::RouterChain router2;
145 yp2::Session session;
147 yp2::Package pack(session, origin);
149 pack.router(router2).move();
151 BOOST_CHECK (pack.data() == 1234);
156 catch (std::exception &e) {
157 std::cout << e.what() << "\n";
167 BOOST_AUTO_TEST_CASE( testfilter2_2 )
172 std::string some_xml = "<?xml version=\"1.0\"?>\n"
173 "<filter type=\"constant\">\n"
174 " <value>2</value>\n"
177 std::cout << some_xml << std::endl;
179 xmlDocPtr doc = xmlParseMemory(some_xml.c_str(), some_xml.size());
185 xmlNodePtr root_element = xmlDocGetRootElement(doc);
187 fc.configure(root_element);
192 catch (std::exception &e) {
193 std::cout << e.what() << "\n";
205 * indent-tabs-mode: nil
206 * c-file-style: "stroustrup"
208 * vim: shiftwidth=4 tabstop=8 expandtab