1 // Copyright 2023 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/files/block_tests_writing_to_special_dirs.h" 6 7 #include "base/files/file_path.h" 8 #include "base/path_service.h" 9 #include "testing/gtest/include/gtest/gtest.h" 10 11 namespace base { 12 13 class BlockTestsWritingToSpecialDirsTest : public testing::Test { 14 public: BlockTestsWritingToSpecialDirsTest()15 BlockTestsWritingToSpecialDirsTest() { 16 auto& prev_block_tests = Get(); 17 if (prev_block_tests.has_value()) { 18 save_block_tests_.emplace(std::move(prev_block_tests->blocked_dirs_), 19 prev_block_tests->failure_callback_); 20 prev_block_tests.reset(); 21 } 22 } 23 ~BlockTestsWritingToSpecialDirsTest()24 ~BlockTestsWritingToSpecialDirsTest() override { 25 if (save_block_tests_.has_value()) { 26 Get().emplace(std::move(save_block_tests_->blocked_dirs_), 27 save_block_tests_->failure_callback_); 28 } 29 } 30 31 protected: Get()32 std::optional<BlockTestsWritingToSpecialDirs>& Get() { 33 return BlockTestsWritingToSpecialDirs::Get(); 34 } 35 std::optional<BlockTestsWritingToSpecialDirs> save_block_tests_; 36 }; 37 38 // Test that with no special dirs blocked, 39 // BlockTestsWritingToSpecialDirs::CanWriteToPath returns true. TEST_F(BlockTestsWritingToSpecialDirsTest,NoSpecialDirWriteBlocker)40TEST_F(BlockTestsWritingToSpecialDirsTest, NoSpecialDirWriteBlocker) { 41 EXPECT_TRUE(BlockTestsWritingToSpecialDirs::CanWriteToPath( 42 PathService::CheckedGet(DIR_SRC_TEST_DATA_ROOT).AppendASCII("file"))); 43 } 44 TEST_F(BlockTestsWritingToSpecialDirsTest,SpecialDirWriteBlocker)45TEST_F(BlockTestsWritingToSpecialDirsTest, SpecialDirWriteBlocker) { 46 std::vector<int> dirs_to_block = {DIR_SRC_TEST_DATA_ROOT}; 47 if (PathService::IsOverriddenForTesting(dirs_to_block[0])) { 48 GTEST_SKIP() << "DIR_SRC_TEST_DATA_ROOT is already overridden"; 49 } 50 Get().emplace(std::move(dirs_to_block), ([](const FilePath& path) {})); 51 52 EXPECT_FALSE(BlockTestsWritingToSpecialDirs::CanWriteToPath( 53 PathService::CheckedGet(DIR_SRC_TEST_DATA_ROOT).AppendASCII("file"))); 54 } 55 56 } // namespace base 57