Index: chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc |
diff --git a/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc b/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..55fda062ac53644c46533145b4666416ea95ceca |
--- /dev/null |
+++ b/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc |
@@ -0,0 +1,190 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/chromeos/extensions/file_manager/device_event_router.h" |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
+#include "chrome/browser/chromeos/file_manager/volume_manager.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace file_manager { |
+namespace { |
+ |
+namespace file_browser_private = extensions::api::file_browser_private; |
+typedef chromeos::disks::DiskMountManager::Disk Disk; |
+ |
+const char kTestDevicePath[] = "/device/test"; |
+ |
+struct DeviceEvent { |
+ extensions::api::file_browser_private::DeviceEventType type; |
+ std::string device_path; |
+}; |
+ |
+// DeviceEventRouter implementation for testing. |
+class DeviceEventRouterImpl : public DeviceEventRouter { |
+ public: |
+ DeviceEventRouterImpl() |
+ : DeviceEventRouter(/* zero_time_delta */ true), |
+ external_storage_disabled(false) {} |
+ virtual ~DeviceEventRouterImpl() {} |
+ |
+ // Override |
+ virtual void OnDeviceEvent(file_browser_private::DeviceEventType type, |
+ const std::string& device_path) OVERRIDE { |
+ DeviceEvent event; |
+ event.type = type; |
+ event.device_path = device_path; |
+ events.push_back(event); |
+ } |
+ |
+ // Override |
+ virtual bool IsExternalStorageDisabled() OVERRIDE { |
+ return external_storage_disabled; |
+ } |
+ |
+ // List of dispatched events. |
+ std::vector<DeviceEvent> events; |
+ |
+ // Flag returned by |IsExternalStorageDisabled|. |
+ bool external_storage_disabled; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(DeviceEventRouterImpl); |
+}; |
+} // namespace |
+ |
+class DeviceEventRouterTest : public testing::Test { |
+ protected: |
+ virtual void SetUp() OVERRIDE { |
+ device_event_router.reset(new DeviceEventRouterImpl()); |
+ } |
+ |
+ // Creates a disk instance with |device_path| and |mount_path| for testing. |
+ Disk CreateTestDisk(const std::string& device_path, |
+ const std::string& mount_path) { |
+ return Disk(device_path, |
+ mount_path, |
+ "", |
+ "", |
+ "", |
+ "", |
+ "", |
+ "", |
+ "", |
+ "", |
+ "", |
+ device_path, |
+ chromeos::DEVICE_TYPE_UNKNOWN, |
+ 0, |
+ false, |
+ false, |
+ false, |
+ false, |
+ false, |
+ false); |
+ } |
+ |
+ // Creates a volume info instance with |device_path| and |mount_path| for |
+ // testing. |
+ VolumeInfo CreateTestVolumeInfo(const std::string& device_path, |
+ const std::string& mount_path) { |
+ VolumeInfo volume_info; |
+ volume_info.system_path_prefix = base::FilePath(device_path); |
+ volume_info.mount_path = base::FilePath(mount_path); |
+ return volume_info; |
+ } |
+ |
+ scoped_ptr<DeviceEventRouterImpl> device_event_router; |
+ |
+ private: |
+ base::MessageLoop message_loop_; |
+}; |
+ |
+TEST_F(DeviceEventRouterTest, AddAndRemoveDevice) { |
+ const Disk disk1 = CreateTestDisk("/device/test", "/mount/path1"); |
+ const Disk disk1_unmounted = CreateTestDisk("/device/test", ""); |
+ const VolumeInfo volumeInfo = |
+ CreateTestVolumeInfo("/device/test", "/mount/path1"); |
+ device_event_router->OnDeviceAdded("/device/test"); |
+ device_event_router->OnDiskAdded(disk1, true); |
+ device_event_router->OnVolumeMounted( |
+ chromeos::MOUNT_ERROR_NONE, volumeInfo, false); |
+ device_event_router->OnVolumeUnmounted(chromeos::MOUNT_ERROR_NONE, |
+ volumeInfo); |
+ device_event_router->OnDiskRemoved(disk1_unmounted); |
+ device_event_router->OnDeviceRemoved("/device/test"); |
+ EXPECT_EQ(1u, device_event_router->events.size()); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED, |
+ device_event_router->events[0].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[0].device_path); |
+} |
+ |
+TEST_F(DeviceEventRouterTest, DeviceScan) { |
+ const Disk disk = CreateTestDisk("/device/test", "/mount/path1"); |
+ const Disk disk_unmounted = CreateTestDisk("/device/test", ""); |
+ const VolumeInfo volumeInfo = |
+ CreateTestVolumeInfo("/device/test", "/mount/path1"); |
+ device_event_router->OnDeviceAdded("/device/test"); |
+ base::RunLoop().RunUntilIdle(); |
+ device_event_router->OnDiskAdded(disk, true); |
+ device_event_router->OnVolumeMounted( |
+ chromeos::MOUNT_ERROR_NONE, volumeInfo, false); |
+ device_event_router->OnVolumeUnmounted(chromeos::MOUNT_ERROR_NONE, |
+ volumeInfo); |
+ device_event_router->OnDiskRemoved(disk_unmounted); |
+ device_event_router->OnDeviceRemoved("/device/test"); |
+ EXPECT_EQ(2u, device_event_router->events.size()); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_ADDED, |
+ device_event_router->events[0].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[0].device_path); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED, |
+ device_event_router->events[1].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[1].device_path); |
+} |
+ |
+TEST_F(DeviceEventRouterTest, DeviceScanCancelled) { |
+ const Disk disk = CreateTestDisk("/device/test", "/mount/path1"); |
+ const Disk disk_unmounted = CreateTestDisk("/device/test", ""); |
+ const VolumeInfo volumeInfo = |
+ CreateTestVolumeInfo("/device/test", "/mount/path1"); |
+ device_event_router->OnDeviceAdded("/device/test"); |
+ base::RunLoop().RunUntilIdle(); |
+ device_event_router->OnDiskAdded(disk, false); |
+ device_event_router->OnDiskRemoved(disk_unmounted); |
+ device_event_router->OnDeviceRemoved("/device/test"); |
+ EXPECT_EQ(3u, device_event_router->events.size()); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_ADDED, |
+ device_event_router->events[0].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[0].device_path); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_SCAN_CANCELED, |
+ device_event_router->events[1].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[1].device_path); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED, |
+ device_event_router->events[2].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[2].device_path); |
+} |
+ |
+TEST_F(DeviceEventRouterTest, HardUnplugged) { |
+ const Disk disk1 = CreateTestDisk("/device/test", "/mount/path1"); |
+ const Disk disk2 = CreateTestDisk("/device/test", "/mount/path2"); |
+ device_event_router->OnDeviceAdded("/device/test"); |
+ device_event_router->OnDiskAdded(disk1, true); |
+ device_event_router->OnDiskAdded(disk2, true); |
+ device_event_router->OnDiskRemoved(disk1); |
+ device_event_router->OnDiskRemoved(disk2); |
+ device_event_router->OnDeviceRemoved(kTestDevicePath); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(2u, device_event_router->events.size()); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_HARD_UNPLUGGED, |
+ device_event_router->events[0].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[0].device_path); |
+ EXPECT_EQ(file_browser_private::DEVICE_EVENT_TYPE_REMOVED, |
+ device_event_router->events[1].type); |
+ EXPECT_EQ("/device/test", device_event_router->events[1].device_path); |
+} |
+} // 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.
|