// ---------------------------------------------------------------------------- // 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 // ---------------------------------------------------------------------------- #include "test_utils.hpp" #include /////////////////////////////////////////////////////////////////////////////// // Test data const char *ok_data_1 = ";Test file for info_parser\n" "\n" "key1 data1\n" "{\n" "\tkey data\n" "}\n" "#include \"testok1_inc.info\"\n" "key2 \"data2 \" {\n" "\tkey data\n" "}\n" "#\tinclude \"testok1_inc.info\"\n" "key3 \"data\"\n" "\t \"3\" {\n" "\tkey data\n" "}\n" "\t#include \"testok1_inc.info\"\n" "\n" "\"key4\" data4\n" "{\n" "\tkey data\n" "}\n" "#include \"testok1_inc.info\"\n" "\"key.5\" \"data.5\" { \n" "\tkey data \n" "}\n" "#\tinclude \"testok1_inc.info\"\n" "\"key6\" \"data\"\n" "\t \"6\" {\n" "\tkey data\n" "}\n" "\t#include \"testok1_inc.info\"\n" " \n" "key1 data1; comment\n" "{; comment\n" "\tkey data; comment\n" "}; comment\n" "#include \"testok1_inc.info\"\n" "key2 \"data2 \" {; comment\n" "\tkey data; comment\n" "}; comment\n" "#\tinclude \"testok1_inc.info\"\n" "key3 \"data\"; comment\n" "\t \"3\" {; comment\n" "\tkey data; comment\n" "}; comment\n" "\t#include \"testok1_inc.info\"\n" "\n" "\"key4\" data4; comment\n" "{; comment\n" "\tkey data; comment\n" "}; comment\n" "#include \"testok1_inc.info\"\n" "\"key.5\" \"data.5\" {; comment\n" "\tkey data; comment\n" "}; comment\n" "#\tinclude \"testok1_inc.info\"\n" "\"key6\" \"data\"; comment\n" "\t \"6\" {; comment\n" "\tkey data; comment\n" "}; comment\n" "\t#include \"testok1_inc.info\"\n" "\\\\key\\t7 data7\\n\\\"data7\\\"\n" "{\n" "\tkey data\n" "}\n" "\"\\\\key\\t8\" \"data8\\n\\\"data8\\\"\"\n" "{\n" "\tkey data\n" "}\n" "\n"; const char *ok_data_1_inc = ";Test file for info_parser\n" "\n" "inc_key inc_data ;;; comment\\"; const char *ok_data_2 = ""; const char *ok_data_3 = "key1 \"\"\n" "key2 \"\"\n" "key3 \"\"\n" "key4 \"\"\n"; const char *ok_data_4 = "key1 data key2 data"; const char *ok_data_5 = "key { key \"\" key \"\" }\n"; const char *ok_data_6 = "\"key with spaces\" \"data with spaces\"\n" "\"key with spaces\" \"multiline data\"\\\n" "\"cont\"\\\n" "\"cont\""; const char *error_data_1 = ";Test file for info_parser\n" "#include \"bogus_file\"\n"; // Nonexistent include file const char *error_data_2 = ";Test file for info_parser\n" "key \"data with bad escape: \\q\"\n"; // Bad escape const char *error_data_3 = ";Test file for info_parser\n" "{\n"; // Opening brace without key const char *error_data_4 = ";Test file for info_parser\n" "}\n"; // Closing brace without opening brace const char *error_data_5 = ";Test file for info_parser\n" "key data\n" "{\n" ""; // No closing brace struct ReadFunc { template void operator()(const std::string &filename, Ptree &pt) const { boost::property_tree::read_info(filename, pt); } }; struct WriteFunc { template void operator()(const std::string &filename, const Ptree &pt) const { boost::property_tree::write_info(filename, pt); } }; template void test_info_parser() { using namespace boost::property_tree; generic_parser_test_ok ( ReadFunc(), WriteFunc(), ok_data_1, ok_data_1_inc, "testok1.info", "testok1_inc.info", "testok1out.info", 45, 240, 192 ); generic_parser_test_ok ( ReadFunc(), WriteFunc(), ok_data_2, NULL, "testok2.info", NULL, "testok2out.info", 1, 0, 0 ); generic_parser_test_ok ( ReadFunc(), WriteFunc(), ok_data_3, NULL, "testok3.info", NULL, "testok3out.info", 5, 0, 16 ); generic_parser_test_ok ( ReadFunc(), WriteFunc(), ok_data_4, NULL, "testok4.info", NULL, "testok4out.info", 3, 8, 8 ); generic_parser_test_ok ( ReadFunc(), WriteFunc(), ok_data_5, NULL, "testok5.info", NULL, "testok5out.info", 4, 0, 9 ); generic_parser_test_ok ( ReadFunc(), WriteFunc(), ok_data_6, NULL, "testok6.info", NULL, "testok6out.info", 3, 38, 30 ); generic_parser_test_error ( ReadFunc(), WriteFunc(), error_data_1, NULL, "testerr1.info", NULL, "testerr1out.info", 2 ); generic_parser_test_error ( ReadFunc(), WriteFunc(), error_data_2, NULL, "testerr2.info", NULL, "testerr2out.info", 2 ); generic_parser_test_error ( ReadFunc(), WriteFunc(), error_data_3, NULL, "testerr3.info", NULL, "testerr3out.info", 2 ); generic_parser_test_error ( ReadFunc(), WriteFunc(), error_data_4, NULL, "testerr4.info", NULL, "testerr4out.info", 2 ); generic_parser_test_error ( ReadFunc(), WriteFunc(), error_data_5, NULL, "testerr5.info", NULL, "testerr5out.info", 4 ); // Test read with default ptree { Ptree pt, default_pt; pt.put_value(1); default_pt.put_value(2); BOOST_CHECK(pt != default_pt); read_info("nonexisting file.nonexisting file", pt, default_pt); BOOST_CHECK(pt == default_pt); } } int test_main(int argc, char *argv[]) { using namespace boost::property_tree; test_info_parser(); test_info_parser(); #ifndef BOOST_NO_CWCHAR test_info_parser(); test_info_parser(); #endif return 0; }