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 |