[St-m-svn] SF.net SVN: st-m:[1949] trunk/src/utility_classes
Brought to you by:
cnx_glenn
From: <cnx...@us...> - 2011-04-03 14:00:29
|
Revision: 1949 http://st-m.svn.sourceforge.net/st-m/?rev=1949&view=rev Author: cnx_glenn Date: 2011-04-03 14:00:23 +0000 (Sun, 03 Apr 2011) Log Message: ----------- Fixed resource leak and added unit test for const registry iterators. Modified Paths: -------------- trunk/src/utility_classes/Util/Shortcut.cpp trunk/src/utility_classes_test/RegistryKeyTest.cpp Modified: trunk/src/utility_classes/Util/Shortcut.cpp =================================================================== --- trunk/src/utility_classes/Util/Shortcut.cpp 2011-04-03 10:55:13 UTC (rev 1948) +++ trunk/src/utility_classes/Util/Shortcut.cpp 2011-04-03 14:00:23 UTC (rev 1949) @@ -107,7 +107,7 @@ namespace { - void create_helper(IShellLinkW *psl, IPersistFile *ppf, + void create_helper(IShellLinkW *&psl, IPersistFile *&ppf, boost::filesystem::path const& path, Command const& cmd) { if (!SUCCEEDED(::CoCreateInstance(CLSID_ShellLink, @@ -173,7 +173,7 @@ namespace { - std::wstring resolve_helper(IShellLinkW *psl, IPersistFile *ppf, + std::wstring resolve_helper(IShellLinkW *&psl, IPersistFile *&ppf, boost::filesystem::path const& spath) { if (!SUCCEEDED(::CoCreateInstance(CLSID_ShellLink, Modified: trunk/src/utility_classes_test/RegistryKeyTest.cpp =================================================================== --- trunk/src/utility_classes_test/RegistryKeyTest.cpp 2011-04-03 10:55:13 UTC (rev 1948) +++ trunk/src/utility_classes_test/RegistryKeyTest.cpp 2011-04-03 14:00:23 UTC (rev 1949) @@ -129,6 +129,27 @@ BOOST_CHECK(*expectedvalues[proxy.getName()] == proxy); } +BOOST_AUTO_TEST_CASE(test_subkey_const_iterator) +{ + Key const rootkey(HKCU, uuid + L"\\RegistryKeyTest", access_read); + BOOST_REQUIRE(static_cast<HKEY>(rootkey) != nullptr); + + std::map<std::wstring, std::shared_ptr<KeyProxy>> expectedvalues; + expectedvalues[L"subkey1"] = std::shared_ptr<KeyProxy>(new KeyProxy(rootkey, L"subkey1")); + expectedvalues[L"subkey2"] = std::shared_ptr<KeyProxy>(new KeyProxy(rootkey, L"subkey2")); + expectedvalues[L"subkey3"] = std::shared_ptr<KeyProxy>(new KeyProxy(rootkey, L"subkey3")); + expectedvalues[L"subkey4"] = std::shared_ptr<KeyProxy>(new KeyProxy(rootkey, L"subkey4")); + + std::vector<KeyProxy> resultvalues; + std::copy(rootkey.subkeys_begin(), rootkey.subkeys_end(), + std::back_inserter(resultvalues)); + + BOOST_CHECK_EQUAL(expectedvalues.size(), resultvalues.size()); + + foreach (KeyProxy const& proxy, resultvalues) + BOOST_CHECK(*expectedvalues[proxy.getName()] == proxy); +} + BOOST_AUTO_TEST_CASE(test_delete_subtree) { Key rootkey(HKCU, uuid + L"\\RegistryKeyTest", access_write); @@ -247,6 +268,28 @@ BOOST_CHECK(*expectedvalues[proxy.getName()] == proxy); } +BOOST_AUTO_TEST_CASE(test_value_const_iterator) +{ + Key const rootkey(HKCU, uuid + L"\\RegistryKeyTest\\subkey1", access_read); + BOOST_REQUIRE(static_cast<HKEY>(rootkey) != nullptr); + + std::map<std::wstring, std::shared_ptr<ValueProxy>> expectedvalues; + expectedvalues[L"value1"] = std::shared_ptr<ValueProxy>(new ValueProxy(rootkey, L"value1")); + expectedvalues[L"value2"] = std::shared_ptr<ValueProxy>(new ValueProxy(rootkey, L"value2")); + expectedvalues[L"value3"] = std::shared_ptr<ValueProxy>(new ValueProxy(rootkey, L"value3")); + expectedvalues[L"value4"] = std::shared_ptr<ValueProxy>(new ValueProxy(rootkey, L"value4")); + expectedvalues[L"value5"] = std::shared_ptr<ValueProxy>(new ValueProxy(rootkey, L"value5")); + + std::vector<ValueProxy> resultvalues; + std::copy(rootkey.values_begin(), rootkey.values_end(), + std::back_inserter(resultvalues)); + + BOOST_CHECK_EQUAL(expectedvalues.size(), resultvalues.size()); + + foreach (ValueProxy const& proxy, resultvalues) + BOOST_CHECK(*expectedvalues[proxy.getName()] == proxy); +} + BOOST_AUTO_TEST_CASE(test_root_to_str) { BOOST_CHECK_EQUAL(root_to_str(HKCR), L"HKCR"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |