Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc

Issue 472603004: Add DeviceEventRouter class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove PostDelayedTask viertual function Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 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 #include "chrome/browser/chromeos/extensions/file_manager/device_event_router.h"
6
7 #include <string>
8 #include <vector>
9
10 #include "base/message_loop/message_loop.h"
11 #include "base/run_loop.h"
12 #include "chrome/browser/chromeos/file_manager/volume_manager.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace file_manager {
16 namespace {
17
18 namespace file_browser_private = extensions::api::file_browser_private;
19 typedef chromeos::disks::DiskMountManager::Disk Disk;
20
21 const char kTestDevicePath[] = "/device/test";
22
23 struct DeviceEvent {
24 extensions::api::file_browser_private::DeviceEventType type;
25 std::string device_path;
26 };
27
28 // DeviceEventRouter implementation for testing.
29 class DeviceEventRouterImpl : public DeviceEventRouter {
30 public:
31 DeviceEventRouterImpl()
32 : DeviceEventRouter(/* zero_time_delta */ true),
33 external_storage_disabled(false) {}
34 virtual ~DeviceEventRouterImpl() {}
35
36 // Override
37 virtual void OnDeviceEvent(file_browser_private::DeviceEventType type,
38 const std::string& device_path) OVERRIDE {
39 DeviceEvent event;
40 event.type = type;
41 event.device_path = device_path;
42 events.push_back(event);
43 }
44
45 // Override
46 virtual bool IsExternalStorageDisabled() OVERRIDE {
47 return external_storage_disabled;
48 }
49
50 // List of dispatched events.
51 std::vector<DeviceEvent> events;
52
53 // Flag returned by |IsExternalStorageDisabled|.
54 bool external_storage_disabled;
55
56 private:
57 DISALLOW_COPY_AND_ASSIGN(DeviceEventRouterImpl);
58 };
59 } // namespace
60
61 class DeviceEventRouterTest : public testing::Test {
62 protected:
63 virtual void SetUp() OVERRIDE {
64 device_event_router.reset(new DeviceEventRouterImpl());
65 }
66
67 // Creates a disk instance with |device_path| and |mount_path| for testing.
68 Disk CreateTestDisk(const std::string& device_path,
69 const std::string& mount_path) {
70 return Disk(device_path,
71 mount_path,
72 "",
73 "",
74 "",
75 "",
76 "",
77 "",
78 "",
79 "",
80 "",
81 device_path,
82 chromeos::DEVICE_TYPE_UNKNOWN,
83 0,
84 false,
85 false,
86 false,
87 false,
88 false,
89 false);
90 }
91
92 // Creates a volume info instance with |device_path| and |mount_path| for
93 // testing.
94 VolumeInfo CreateTestVolumeInfo(const std::string& device_path,
95 const std::string& mount_path) {
96 VolumeInfo volume_info;
97 volume_info.system_path_prefix = base::FilePath(device_path);
98 volume_info.mount_path = base::FilePath(mount_path);
99 return volume_info;
100 }
101
102 scoped_ptr<DeviceEventRouterImpl> device_event_router;
103
104 private:
105 base::MessageLoop message_loop_;
106 };
107
108 TEST_F(DeviceEventRouterTest, AddAndRemoveDevice) {
109 const Disk disk1 = CreateTestDisk("/device/test", "/mount/path1");
110 const Disk disk1_unmounted = CreateTestDisk("/device/test", "");
111 const VolumeInfo volumeInfo =
112 CreateTestVolumeInfo("/device/test", "/mount/path1");
113 device_event_router->OnDeviceAdded("/device/test");
114 device_event_router->OnDiskAdded(disk1, true);
115 device_event_router->OnVolumeMounted(
116 chromeos::MOUNT_ERROR_NONE, volumeInfo, false);
117 device_event_router->OnVolumeUnmounted(chromeos::MOUNT_ERROR_NONE,
118 volumeInfo);
119 device_event_router->OnDiskRemoved(disk1_unmounted);
120 device_event_router->OnDeviceRemoved("/device/test");
121 EXPECT_EQ(1u, device_event_router->events.size());
122 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED,
123 device_event_router->events[0].type);
124 EXPECT_EQ("/device/test", device_event_router->events[0].device_path);
125 }
126
127 TEST_F(DeviceEventRouterTest, DeviceScan) {
128 const Disk disk = CreateTestDisk("/device/test", "/mount/path1");
129 const Disk disk_unmounted = CreateTestDisk("/device/test", "");
130 const VolumeInfo volumeInfo =
131 CreateTestVolumeInfo("/device/test", "/mount/path1");
132 device_event_router->OnDeviceAdded("/device/test");
133 base::RunLoop().RunUntilIdle();
134 device_event_router->OnDiskAdded(disk, true);
135 device_event_router->OnVolumeMounted(
136 chromeos::MOUNT_ERROR_NONE, volumeInfo, false);
137 device_event_router->OnVolumeUnmounted(chromeos::MOUNT_ERROR_NONE,
138 volumeInfo);
139 device_event_router->OnDiskRemoved(disk_unmounted);
140 device_event_router->OnDeviceRemoved("/device/test");
141 EXPECT_EQ(2u, device_event_router->events.size());
142 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_ADDED,
143 device_event_router->events[0].type);
144 EXPECT_EQ("/device/test", device_event_router->events[0].device_path);
145 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED,
146 device_event_router->events[1].type);
147 EXPECT_EQ("/device/test", device_event_router->events[1].device_path);
148 }
149
150 TEST_F(DeviceEventRouterTest, DeviceScanCancelled) {
151 const Disk disk = CreateTestDisk("/device/test", "/mount/path1");
152 const Disk disk_unmounted = CreateTestDisk("/device/test", "");
153 const VolumeInfo volumeInfo =
154 CreateTestVolumeInfo("/device/test", "/mount/path1");
155 device_event_router->OnDeviceAdded("/device/test");
156 base::RunLoop().RunUntilIdle();
157 device_event_router->OnDiskAdded(disk, false);
158 device_event_router->OnDiskRemoved(disk_unmounted);
159 device_event_router->OnDeviceRemoved("/device/test");
160 EXPECT_EQ(3u, device_event_router->events.size());
161 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_ADDED,
162 device_event_router->events[0].type);
163 EXPECT_EQ("/device/test", device_event_router->events[0].device_path);
164 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_SCAN_CANCELED,
165 device_event_router->events[1].type);
166 EXPECT_EQ("/device/test", device_event_router->events[1].device_path);
167 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED,
168 device_event_router->events[2].type);
169 EXPECT_EQ("/device/test", device_event_router->events[2].device_path);
170 }
171
172 TEST_F(DeviceEventRouterTest, HardUnplugged) {
173 const Disk disk1 = CreateTestDisk("/device/test", "/mount/path1");
174 const Disk disk2 = CreateTestDisk("/device/test", "/mount/path2");
175 device_event_router->OnDeviceAdded("/device/test");
176 device_event_router->OnDiskAdded(disk1, true);
177 device_event_router->OnDiskAdded(disk2, true);
178 device_event_router->OnDiskRemoved(disk1);
179 device_event_router->OnDiskRemoved(disk2);
180 device_event_router->OnDeviceRemoved(kTestDevicePath);
181 base::RunLoop().RunUntilIdle();
182 EXPECT_EQ(2u, device_event_router->events.size());
183 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_HARD_UNPLUGGED,
184 device_event_router->events[0].type);
185 EXPECT_EQ("/device/test", device_event_router->events[0].device_path);
186 EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED,
187 device_event_router->events[1].type);
188 EXPECT_EQ("/device/test", device_event_router->events[1].device_path);
189 }
190 } // namespace file_manager
mtomasz 2014/08/21 08:32:47 If empty line is in #17, then it also should be be
hirono 2014/08/21 08:48:32 Done.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698