Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2020 Project CHIP Authors
4 : * Copyright (c) 2018 Nest Labs, Inc.
5 : *
6 : * Licensed under the Apache License, Version 2.0 (the "License");
7 : * you may not use this file except in compliance with the License.
8 : * You may obtain a copy of the License at
9 : *
10 : * http://www.apache.org/licenses/LICENSE-2.0
11 : *
12 : * Unless required by applicable law or agreed to in writing, software
13 : * distributed under the License is distributed on an "AS IS" BASIS,
14 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 : * See the License for the specific language governing permissions and
16 : * limitations under the License.
17 : */
18 :
19 : #pragma once
20 :
21 : // Include configuration headers
22 : #include <system/SystemClock.h>
23 :
24 : namespace chip {
25 : namespace System {
26 : namespace Clock {
27 : namespace Internal {
28 :
29 : // A RAII wrapper for MockClock that sets the system clock to the mock clock and restores the original clock on destruction.
30 : class RAIIMockClock : public MockClock
31 : {
32 : public:
33 21 : RAIIMockClock() : mRealClock{ &System::SystemClock() } { System::Clock::Internal::SetSystemClockForTesting(this); }
34 :
35 : RAIIMockClock(const RAIIMockClock &) = delete;
36 : RAIIMockClock & operator=(const RAIIMockClock &) = delete;
37 : RAIIMockClock(RAIIMockClock &&) = delete;
38 : RAIIMockClock & operator=(RAIIMockClock &&) = delete;
39 :
40 21 : ~RAIIMockClock() { System::Clock::Internal::SetSystemClockForTesting(mRealClock); }
41 :
42 : private:
43 : System::Clock::ClockBase * mRealClock{ nullptr };
44 : };
45 :
46 : } // namespace Internal
47 : } // namespace Clock
48 : } // namespace System
49 : } // namespace chip
|