OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | |
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 CHROMEOS_DISKS_MOCK_DISK_MOUNT_MANAGER_OBSERVER_H_ | |
6 #define CHROMEOS_DISKS_MOCK_DISK_MOUNT_MANAGER_OBSERVER_H_ | |
7 | |
8 #include <memory> | |
9 #include <string> | |
10 #include <vector> | |
11 | |
12 #include "chromeos/disks/disk_mount_manager.h" | |
13 using chromeos::disks::DiskMountManager; | |
14 | |
15 namespace chromeos { | |
16 namespace disks { | |
17 | |
18 // Event classes which represents each invocation of functions in |Observer|. | |
19 // OnDeviceEvent() | |
20 class DeviceEvent { | |
21 public: | |
22 DeviceEvent() {} | |
23 ~DeviceEvent() {} | |
24 | |
25 DeviceEvent(DiskMountManager::DeviceEvent event, | |
26 const std::string& device_path) | |
27 : event_(event), device_path_(device_path) {} | |
28 | |
29 DeviceEvent(const DeviceEvent& other) | |
30 : event_(other.event_), device_path_(other.device_path_) {} | |
31 | |
32 bool operator==(const DeviceEvent& other) const { | |
33 return event_ == other.event_ && device_path_ == other.device_path_; | |
34 } | |
35 | |
36 DiskMountManager::DeviceEvent GetEvent() const { return event_; } | |
37 | |
38 const std::string& GetDevicePath() const { return device_path_; } | |
39 | |
40 std::string DebugString() const; | |
41 | |
42 private: | |
43 DiskMountManager::DeviceEvent event_; | |
44 std::string device_path_; | |
45 }; | |
46 | |
47 // OnDiskEvent() | |
48 class DiskEvent { | |
49 public: | |
50 DiskEvent() {} | |
51 | |
52 DiskEvent(DiskMountManager::DiskEvent event, | |
53 const DiskMountManager::Disk* disk) | |
54 : event_(event), disk_(disk) {} | |
55 | |
56 DiskEvent(const DiskEvent& other) | |
57 : event_(other.event_), disk_(other.disk_) {} | |
58 | |
59 DiskEvent& operator=(const DiskEvent& other) { | |
60 event_ = other.event_; | |
61 disk_ = other.disk_; | |
62 return *this; | |
63 } | |
64 | |
65 bool operator==(const DiskEvent& other) const { | |
66 return event_ == other.event_ && disk_ == other.disk_; | |
67 } | |
68 | |
69 std::string DebugString() const; | |
70 | |
71 private: | |
72 DiskMountManager::DiskEvent event_; | |
73 const DiskMountManager::Disk* disk_; | |
74 }; | |
75 | |
76 // OnFormatEvent() | |
77 class FormatEvent { | |
78 public: | |
79 FormatEvent() {} | |
80 FormatEvent(DiskMountManager::FormatEvent event, | |
81 chromeos::FormatError error_code, | |
82 const std::string& device_path) | |
83 : event_(event), error_code_(error_code), device_path_(device_path) {} | |
84 | |
85 bool operator==(const FormatEvent& other) const { | |
86 return event_ == other.event_ && error_code_ == other.error_code_ && | |
87 device_path_ == other.device_path_; | |
88 } | |
89 | |
90 DiskMountManager::FormatEvent GetEvent() const { return event_; } | |
91 | |
92 chromeos::FormatError GetErrorCode() const { return error_code_; } | |
93 | |
94 const std::string& GetDevicePath() const { return device_path_; } | |
95 | |
96 std::string DebugString() const; | |
97 | |
98 private: | |
99 DiskMountManager::FormatEvent event_; | |
100 chromeos::FormatError error_code_; | |
101 std::string device_path_; | |
102 }; | |
103 | |
104 // OnMountEvent() | |
105 class MountEvent { | |
106 public: | |
107 DiskMountManager::MountEvent GetEvent() { return event_; } | |
108 chromeos::MountError GetErrorCode() { return error_code_; } | |
109 const DiskMountManager::MountPointInfo& GetMountPoint() { | |
110 return mount_point_; | |
111 } | |
112 MountEvent(); | |
113 MountEvent(const MountEvent& other); | |
114 MountEvent(DiskMountManager::MountEvent event, | |
115 chromeos::MountError error_code, | |
116 const DiskMountManager::MountPointInfo& mount_point, | |
117 std::shared_ptr<DiskMountManager::Disk> disk); | |
118 ~MountEvent(); | |
119 bool operator==(const MountEvent& other) const; | |
120 std::string DebugString() const; | |
121 | |
122 private: | |
123 DiskMountManager::MountEvent event_; | |
124 chromeos::MountError error_code_; | |
125 DiskMountManager::MountPointInfo mount_point_; | |
126 | |
127 // Not passed to callback, but read by handlers. So it's captured upon | |
128 // callback. | |
129 std::shared_ptr<DiskMountManager::Disk> disk_; | |
130 }; | |
131 | |
132 // Represents every event notified to |Observer|. | |
133 class ObserverEvent { | |
134 private: | |
135 struct Event { | |
136 DeviceEvent device; | |
137 DiskEvent disk; | |
138 FormatEvent format; | |
139 MountEvent mount; | |
140 Event(); | |
141 Event(const Event& other); | |
142 ~Event() {} | |
143 } event_; | |
144 ObserverEvent() {} | |
145 | |
146 public: | |
147 enum ObserverEventType { | |
148 DEVICE_EVENT, | |
149 DISK_EVENT, | |
150 FORMAT_EVENT, | |
151 MOUNT_EVENT | |
152 } type_; | |
153 | |
154 static ObserverEvent FromDeviceEvent(DeviceEvent event); | |
155 static ObserverEvent FromDiskEvent(DiskEvent event); | |
156 static ObserverEvent FromFormatEvent(FormatEvent event); | |
157 static ObserverEvent FromMountEvent(MountEvent event); | |
158 | |
159 ObserverEvent(const ObserverEvent& other) : type_(other.type_) { | |
160 switch (other.type_) { | |
161 case DEVICE_EVENT: | |
162 event_.device = other.event_.device; | |
163 break; | |
164 case DISK_EVENT: | |
165 event_.disk = other.event_.disk; | |
166 break; | |
167 case FORMAT_EVENT: | |
168 event_.format = other.event_.format; | |
169 break; | |
170 case MOUNT_EVENT: | |
171 event_.mount = other.event_.mount; | |
172 break; | |
173 } | |
174 } | |
175 | |
176 Event GetEvent() { return event_; } | |
177 | |
178 ObserverEventType GetType() { return type_; } | |
179 }; | |
180 | |
181 // A mock |Observer| class which records all invocation of the methods invoked | |
182 // from DiskMountManager and all the arguments passed to them. | |
183 class MockDiskMountManagerObserver : public DiskMountManager::Observer { | |
184 public: | |
185 MockDiskMountManagerObserver(const DiskMountManager* manager); | |
186 ~MockDiskMountManagerObserver() override; | |
187 | |
188 // Mock notify methods. | |
189 void OnDeviceEvent(DiskMountManager::DeviceEvent event, | |
190 const std::string& device_path) override; | |
191 | |
192 void OnDiskEvent(DiskMountManager::DiskEvent event, | |
193 const DiskMountManager::Disk* disk) override; | |
194 | |
195 void OnMountEvent( | |
196 DiskMountManager::MountEvent event, | |
197 chromeos::MountError error_code, | |
198 const DiskMountManager::MountPointInfo& mount_point) override; | |
199 | |
200 void OnFormatEvent(DiskMountManager::FormatEvent event, | |
201 chromeos::FormatError error_code, | |
202 const std::string& device_path) override; | |
203 | |
204 // Get invocation history to be verified by testcases. | |
205 DeviceEvent GetDeviceEvent(size_t index); | |
yamaguchi
2016/08/30 02:20:10
It'd be easier to have tests get and verify Observ
yamaguchi
2016/08/30 04:39:50
In the current unit test, MountEvent is not examin
| |
206 FormatEvent GetFormatEvent(size_t index); | |
207 DiskEvent GetDiskEvent(size_t index); | |
208 MountEvent GetMountEvent(size_t index); | |
209 | |
210 size_t GetEventCount() { return events_.size(); } | |
211 | |
212 ObserverEvent GetEvent(size_t index) { return events_.at(index); } | |
213 | |
214 private: | |
215 // Pointer to the manager object to which this |Observer| is registered. | |
216 const DiskMountManager* manager_; | |
217 | |
218 // Records all invocations. | |
219 std::vector<ObserverEvent> events_; | |
220 }; | |
221 | |
222 // Needed to print values in case of EXPECT_* failure in gtest. | |
223 std::ostream& operator<<(std::ostream& stream, const DeviceEvent& device_event); | |
224 std::ostream& operator<<(std::ostream& stream, const DiskEvent& disk_event); | |
225 std::ostream& operator<<(std::ostream& stream, const FormatEvent& format_event); | |
226 std::ostream& operator<<(std::ostream& stream, const MountEvent& mount_event); | |
227 | |
228 } // namespace disks | |
229 } // namespace chromeos | |
230 | |
231 #endif // CHROMEOS_DISKS_MOCK_DISK_MOUNT_MANAGER_OBSERVER_H_ | |
OLD | NEW |