• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 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 #ifndef BASE_TEST_SCOPED_PATH_OVERRIDE_H_
6 #define BASE_TEST_SCOPED_PATH_OVERRIDE_H_
7 
8 #include "base/files/scoped_temp_dir.h"
9 #include "third_party/abseil-cpp/absl/types/optional.h"
10 
11 namespace base {
12 
13 class FilePath;
14 
15 // Sets a path override on construction, and removes it when the object goes out
16 // of scope. This class is intended to be used by tests that need to override
17 // paths to ensure their overrides are properly handled and reverted when the
18 // scope of the test is left.
19 class ScopedPathOverride {
20  public:
21   // Contructor that initializes the override to a scoped temp directory.
22   explicit ScopedPathOverride(int key);
23 
24   // Constructor that would use a path provided by the user.
25   ScopedPathOverride(int key, const FilePath& dir);
26 
27   // See PathService::OverrideAndCreateIfNeeded.
28   ScopedPathOverride(int key,
29                      const FilePath& path,
30                      bool is_absolute,
31                      bool create);
32 
33   ScopedPathOverride(const ScopedPathOverride&) = delete;
34   ScopedPathOverride& operator=(const ScopedPathOverride&) = delete;
35 
36   ~ScopedPathOverride();
37 
38  private:
39   // Used for saving original_override_ when an override already exists.
40   void SaveOriginal();
41 
42   int key_;
43   ScopedTempDir temp_dir_;
44   absl::optional<FilePath> original_override_;
45 };
46 
47 }  // namespace base
48 
49 #endif  // BASE_TEST_SCOPED_PATH_OVERRIDE_H_
50