Chromium Code Reviews| 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.
|