| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/conflicts/registry_key_watcher_win.h" |
| |
| #include "base/run_loop.h" |
| #include "base/test/scoped_task_environment.h" |
| #include "base/test/test_reg_util_win.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| class RegistryKeyWatcherTest : public testing::Test { |
| protected: |
| RegistryKeyWatcherTest() = default; |
| ~RegistryKeyWatcherTest() override = default; |
| |
| void SetUp() override { |
| ASSERT_NO_FATAL_FAILURE( |
| registry_override_manager_.OverrideRegistry(HKEY_CURRENT_USER)); |
| } |
| |
| // Creates a registry key. |
| static bool CreateKey(HKEY root, const wchar_t* subkey) { |
| return base::win::RegKey(root, subkey, KEY_SET_VALUE).Valid(); |
| } |
| |
| // Deletes a registry key. |
| static bool DeleteKey(HKEY root, const wchar_t* subkey) { |
| base::win::RegKey registry_key(root); |
| return registry_key.Valid() && |
| registry_key.DeleteKey(subkey) == ERROR_SUCCESS; |
| } |
| |
| private: |
| base::test::ScopedTaskEnvironment scoped_task_environment_; |
| registry_util::RegistryOverrideManager registry_override_manager_; |
| |
| DISALLOW_COPY_AND_ASSIGN(RegistryKeyWatcherTest); |
| }; |
| |
| TEST_F(RegistryKeyWatcherTest, InvalidKey) { |
| auto registry_key_watcher = RegistryKeyWatcher::Create( |
| HKEY_CURRENT_USER, L"Foo\\Bar", 0, base::OnceClosure()); |
| EXPECT_FALSE(registry_key_watcher); |
| } |
| |
| TEST_F(RegistryKeyWatcherTest, WatchKeyDeletion) { |
| static constexpr wchar_t kRegistryKeyPath[] = L"Foo\\Bar"; |
| |
| // Create an existing key to watch. |
| ASSERT_TRUE(CreateKey(HKEY_CURRENT_USER, kRegistryKeyPath)); |
| |
| base::RunLoop run_loop; |
| auto registry_key_watcher = RegistryKeyWatcher::Create( |
| HKEY_CURRENT_USER, kRegistryKeyPath, 0, run_loop.QuitClosure()); |
| EXPECT_TRUE(registry_key_watcher); |
| |
| // Deleting the key must invoke the quit closure of the RunLoop. |
| ASSERT_TRUE(DeleteKey(HKEY_CURRENT_USER, kRegistryKeyPath)); |
| run_loop.Run(); |
| } |