xref: /aosp_15_r20/external/cronet/base/test/scoped_path_override.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TEST_SCOPED_PATH_OVERRIDE_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_TEST_SCOPED_PATH_OVERRIDE_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <optional>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/files/scoped_temp_dir.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace base {
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker class FilePath;
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker // Sets a path override on construction, and removes it when the object goes out
17*6777b538SAndroid Build Coastguard Worker // of scope. This class is intended to be used by tests that need to override
18*6777b538SAndroid Build Coastguard Worker // paths to ensure their overrides are properly handled and reverted when the
19*6777b538SAndroid Build Coastguard Worker // scope of the test is left.
20*6777b538SAndroid Build Coastguard Worker class ScopedPathOverride {
21*6777b538SAndroid Build Coastguard Worker  public:
22*6777b538SAndroid Build Coastguard Worker   // Contructor that initializes the override to a scoped temp directory.
23*6777b538SAndroid Build Coastguard Worker   explicit ScopedPathOverride(int key);
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker   // Constructor that would use a path provided by the user.
26*6777b538SAndroid Build Coastguard Worker   ScopedPathOverride(int key, const FilePath& dir);
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker   // See PathService::OverrideAndCreateIfNeeded.
29*6777b538SAndroid Build Coastguard Worker   ScopedPathOverride(int key,
30*6777b538SAndroid Build Coastguard Worker                      const FilePath& path,
31*6777b538SAndroid Build Coastguard Worker                      bool is_absolute,
32*6777b538SAndroid Build Coastguard Worker                      bool create);
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   ScopedPathOverride(const ScopedPathOverride&) = delete;
35*6777b538SAndroid Build Coastguard Worker   ScopedPathOverride& operator=(const ScopedPathOverride&) = delete;
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker   ~ScopedPathOverride();
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker  private:
40*6777b538SAndroid Build Coastguard Worker   // Used for saving original_override_ when an override already exists.
41*6777b538SAndroid Build Coastguard Worker   void SaveOriginal();
42*6777b538SAndroid Build Coastguard Worker 
43*6777b538SAndroid Build Coastguard Worker   int key_;
44*6777b538SAndroid Build Coastguard Worker   ScopedTempDir temp_dir_;
45*6777b538SAndroid Build Coastguard Worker   std::optional<FilePath> original_override_;
46*6777b538SAndroid Build Coastguard Worker };
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker }  // namespace base
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker #endif  // BASE_TEST_SCOPED_PATH_OVERRIDE_H_
51