| // ---------------------------------------------------------------------------- |
| // Copyright (C) 2002-2006 Marcin Kalicinski |
| // |
| // Distributed under the Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| // |
| // For more information, see www.boost.org |
| // ---------------------------------------------------------------------------- |
| #ifndef TEST_XML_PARSER_COMMON_HPP_INCLUDED |
| #define TEST_XML_PARSER_COMMON_HPP_INCLUDED |
| |
| #include "test_utils.hpp" |
| #include <boost/property_tree/xml_parser.hpp> |
| #include "xml_parser_test_data.hpp" |
| |
| struct ReadFuncWS |
| { |
| template<class Ptree> |
| void operator()(const std::string &filename, Ptree &pt) const |
| { |
| boost::property_tree::read_xml(filename, pt, |
| boost::property_tree::xml_parser::no_concat_text); |
| } |
| }; |
| |
| struct WriteFuncWS |
| { |
| template<class Ptree> |
| void operator()(const std::string &filename, const Ptree &pt) const |
| { |
| boost::property_tree::write_xml(filename, pt); |
| } |
| }; |
| |
| struct ReadFuncNS |
| { |
| template<class Ptree> |
| void operator()(const std::string &filename, Ptree &pt) const |
| { |
| boost::property_tree::read_xml(filename, pt, |
| boost::property_tree::xml_parser::trim_whitespace); |
| } |
| }; |
| |
| struct WriteFuncNS |
| { |
| template<class Ptree> |
| void operator()(const std::string &filename, const Ptree &pt) const |
| { |
| boost::property_tree::write_xml(filename, pt, std::locale(), |
| boost::property_tree::xml_writer_make_settings( |
| typename Ptree::key_type::value_type(' '), 4)); |
| } |
| }; |
| |
| template <typename Ch> int umlautsize(); |
| template <> inline int umlautsize<char>() { return 2; } |
| template <> inline int umlautsize<wchar_t>() { return 1; } |
| |
| template<class Ptree> |
| void test_xml_parser() |
| { |
| |
| using namespace boost::property_tree; |
| |
| generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS> |
| ( |
| ReadFuncWS(), WriteFuncWS(), ok_data_1, NULL, |
| "testok1.xml", NULL, "testok1out.xml", 2, 0, 5 |
| ); |
| |
| generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS> |
| ( |
| ReadFuncWS(), WriteFuncWS(), ok_data_2, NULL, |
| "testok2a.xml", NULL, "testok2aout.xml", 15, 23, 89 |
| ); |
| |
| generic_parser_test_ok<Ptree, ReadFuncNS, WriteFuncNS> |
| ( |
| ReadFuncNS(), WriteFuncNS(), ok_data_2, NULL, |
| "testok2b.xml", NULL, "testok2bout.xml", 6, 15, 8 |
| ); |
| |
| generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS> |
| ( |
| ReadFuncWS(), WriteFuncWS(), ok_data_3, NULL, |
| "testok3a.xml", NULL, "testok3aout.xml", 1662, 35377, 11706 |
| ); |
| |
| generic_parser_test_ok<Ptree, ReadFuncNS, WriteFuncNS> |
| ( |
| ReadFuncNS(), WriteFuncNS(), ok_data_3, NULL, |
| "testok3b.xml", NULL, "testok3bout.xml", 787, 31376, 3831 |
| ); |
| |
| generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS> |
| ( |
| ReadFuncWS(), WriteFuncWS(), ok_data_4, NULL, |
| "testok4.xml", NULL, "testok4out.xml", 11, 7, 74 |
| ); |
| |
| generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS> |
| ( |
| ReadFuncWS(), WriteFuncWS(), ok_data_5, NULL, |
| "testok5.xml", NULL, "testok5out.xml", |
| 3, umlautsize<typename Ptree::data_type::value_type>(), 12 |
| ); |
| |
| generic_parser_test_error<Ptree, ReadFuncWS, WriteFuncWS, xml_parser_error> |
| ( |
| ReadFuncWS(), WriteFuncWS(), error_data_1, NULL, |
| "testerr1.xml", NULL, "testerr1out.xml", 1 |
| ); |
| |
| generic_parser_test_error<Ptree, ReadFuncWS, WriteFuncWS, xml_parser_error> |
| ( |
| ReadFuncWS(), WriteFuncWS(), error_data_2, NULL, |
| "testerr2.xml", NULL, "testerr2out.xml", 2 |
| ); |
| |
| generic_parser_test_ok<Ptree, ReadFuncWS, WriteFuncWS> |
| ( |
| ReadFuncWS(), WriteFuncWS(), bug_data_pr2855, NULL, |
| "testpr2855.xml", NULL, "testpr2855out.xml", 3, 7, 14 |
| ); |
| |
| } |
| |
| #endif |