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..f1d16432ebc80e57293f08da9aa231cde345023d |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/extensions/file_manager/device_event_router_unittest.cc |
| @@ -0,0 +1,200 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
|
mtomasz
2014/08/20 06:31:02
nit: 214
hirono
2014/08/20 08:07:18
Done.
|
| +// 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/basictypes.h" |
| +#include "base/prefs/pref_service.h" |
|
mtomasz
2014/08/20 06:31:02
pref_service not used?
hirono
2014/08/20 08:07:18
Done.
|
| +#include "base/strings/utf_string_conversions.h" |
|
mtomasz
2014/08/20 06:31:02
utf_string_conversion not used?
hirono
2014/08/20 08:07:18
Done.
|
| +#include "chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h" |
| +#include "chrome/browser/chromeos/file_manager/volume_manager.h" |
|
mtomasz
2014/08/20 06:31:02
volume_manager not used?
hirono
2014/08/20 08:07:18
Done.
|
| +#include "chrome/browser/chromeos/file_manager/volume_manager_observer.h" |
| +#include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h" |
|
mtomasz
2014/08/20 06:31:02
file_system provider not used?
hirono
2014/08/20 08:07:17
Done.
|
| +#include "chrome/browser/chromeos/file_system_provider/service.h" |
| +#include "chrome/common/pref_names.h" |
|
mtomasz
2014/08/20 06:31:02
pref_names not used?
hirono
2014/08/20 08:07:18
Done.
|
| +#include "chrome/test/base/testing_profile.h" |
| +#include "chromeos/dbus/fake_power_manager_client.h" |
|
mtomasz
2014/08/20 06:31:02
if fake_power_manager_client used?
hirono
2014/08/20 08:07:18
Done.
|
| +#include "chromeos/disks/disk_mount_manager.h" |
| +#include "components/storage_monitor/storage_info.h" |
|
mtomasz
2014/08/20 06:31:02
is storage_info used?
hirono
2014/08/20 08:07:17
Done.
|
| +#include "content/public/test/test_browser_thread_bundle.h" |
|
mtomasz
2014/08/20 06:31:02
bundle not used?
hirono
2014/08/20 08:07:18
Done.
|
| +#include "extensions/browser/extension_registry.h" |
|
mtomasz
2014/08/20 06:31:02
extension_registry not used?
hirono
2014/08/20 08:07:17
Done.
|
| +#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; |
| +}; |
| + |
| +class DeviceEventRouterImpl : public DeviceEventRouter { |
|
mtomasz
2014/08/20 06:31:02
Comment for the class and methods missing.
hirono
2014/08/20 08:07:17
Done.
|
| + public: |
| + DeviceEventRouterImpl() : external_storage_disabled(false) {} |
| + virtual ~DeviceEventRouterImpl() {} |
| + |
| + 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); |
| + } |
| + |
| + virtual void PostDelayedTask(const base::Closure& callback, |
| + const base::TimeDelta time) OVERRIDE { |
| + callbacks_.push_back(callback); |
| + } |
| + |
| + virtual bool IsExternalStorageDisabled() OVERRIDE { |
| + return external_storage_disabled; |
| + } |
| + |
| + void RunDelayedTasks() { |
| + for (size_t i = 0; i < callbacks_.size(); ++i) { |
| + callbacks_[i].Run(); |
| + } |
| + callbacks_.clear(); |
| + } |
| + |
| + std::vector<DeviceEvent> events; |
| + bool external_storage_disabled; |
| + |
| + private: |
| + std::vector<base::Closure> callbacks_; |
| +}; |
|
mtomasz
2014/08/20 06:31:02
How about adding DISALLOW_COPY_AND_ASSIGN?
hirono
2014/08/20 08:07:18
Done.
|
| +} // namespace |
| + |
| +class DeviceEventRouterTest : public testing::Test { |
| + protected: |
| + virtual void SetUp() OVERRIDE { |
| + device_event_router.reset(new DeviceEventRouterImpl()); |
| + } |
| + |
| + 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); |
| + } |
| + |
| + 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; |
| +}; |
| + |
| +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"); |
| + device_event_router->RunDelayedTasks(); |
| + 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"); |
| + device_event_router->RunDelayedTasks(); |
| + 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); |
| + device_event_router->RunDelayedTasks(); |
| + 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 |