// ---------------------------------------------------------------------------- // 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" // Only test registry parser if we have windows platform #ifdef BOOST_WINDOWS #include #include /////////////////////////////////////////////////////////////////////////////// // Test data const char *data_1 = "root\n" "{\n" " subkey1 \"default value 1\"\n" " subkey2 \"default value 2\"\n" " \\\\values\n" " {\n" " REG_NONE \"\"\n" " REG_BINARY \"de ad be ef\"\n" " REG_DWORD 1234567890\n" " REG_QWORD 12345678901234567890\n" " REG_SZ \"some text\"\n" " REG_EXPAND_SZ \"some other text\"\n" " }\n" " \\\\types\n" " {\n" " REG_NONE 0\n" " REG_BINARY 3\n" " REG_DWORD 4\n" " REG_QWORD 11\n" " REG_SZ 1\n" " REG_EXPAND_SZ 2\n" " }\n" "}\n"; template void test_registry_parser() { using namespace boost::property_tree; typedef typename Ptree::key_type::value_type Ch; typedef std::basic_string Str; // Delete test registry key RegDeleteKeyA(HKEY_CURRENT_USER, "boost ptree test"); // Get test ptree Ptree pt; std::basic_stringstream stream(detail::widen(data_1)); read_info(stream, pt); try { // Write to registry, read back and compare contents Ptree pt2; write_registry(HKEY_CURRENT_USER, detail::widen("boost ptree test"), pt); read_registry(HKEY_CURRENT_USER, detail::widen("boost ptree test"), pt2); BOOST_CHECK(pt == pt2); // Test binary translation Str s = pt2.template get(detail::widen("root.\\values.REG_BINARY")); std::vector bin = registry_parser::translate(REG_BINARY, s); BOOST_REQUIRE(bin.size() == 4); BOOST_CHECK(*reinterpret_cast(&bin.front()) == 0xEFBEADDE); Str s2 = registry_parser::translate(REG_BINARY, bin); BOOST_CHECK(s == s2); } catch (std::exception &e) { BOOST_ERROR(e.what()); } // Delete test registry key RegDeleteKeyA(HKEY_CURRENT_USER, "boost ptree test"); } int test_main(int argc, char *argv[]) { using namespace boost::property_tree; test_registry_parser(); //test_registry_parser(); #ifndef BOOST_NO_CWCHAR //test_registry_parser(); //test_registry_parser(); #endif return 0; } #else int test_main(int argc, char *argv[]) { return 0; } #endif