| Index: chrome/browser/system_monitor/image_capture_device_manager_unittest.mm
|
| diff --git a/chrome/browser/system_monitor/image_capture_device_manager_unittest.mm b/chrome/browser/system_monitor/image_capture_device_manager_unittest.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c93d091a597bf2baeffa2daa050f83187be3762d
|
| --- /dev/null
|
| +++ b/chrome/browser/system_monitor/image_capture_device_manager_unittest.mm
|
| @@ -0,0 +1,228 @@
|
| +// Copyright (c) 2012 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.
|
| +
|
| +
|
| +#import <Foundation/Foundation.h>
|
| +#import <ImageCaptureCore/ImageCaptureCore.h>
|
| +
|
| +#include "base/file_path.h"
|
| +#include "base/mac/foundation_util.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/system_monitor/system_monitor.h"
|
| +#include "base/thread_task_runner_handle.h"
|
| +#include "chrome/browser/system_monitor/image_capture_device.h"
|
| +#include "chrome/browser/system_monitor/image_capture_device_manager.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace {
|
| +
|
| +const char kDeviceId[] = "id";
|
| +
|
| +} // namespace
|
| +
|
| +@interface MockICCameraDevice : ICCameraDevice {
|
| +}
|
| +
|
| +@end
|
| +
|
| +@implementation MockICCameraDevice
|
| +
|
| +- (NSString*)mountPoint {
|
| + return @"mountPoint";
|
| +}
|
| +
|
| +- (NSString*)name {
|
| + return @"name";
|
| +}
|
| +
|
| +- (NSString*)UUIDString {
|
| + return base::SysUTF8ToNSString(kDeviceId);
|
| +}
|
| +
|
| +- (ICDeviceType)type {
|
| + return ICDeviceTypeCamera;
|
| +}
|
| +
|
| +- (void)requestOpenSession {
|
| +}
|
| +
|
| +- (void)requestCloseSession {
|
| +}
|
| +
|
| +@end
|
| +
|
| +@interface MockICCameraFile : ICCameraFile {
|
| + @private
|
| + scoped_nsobject<NSString> name_;
|
| + scoped_nsobject<NSDate> date_;
|
| +}
|
| +
|
| +- (id)init:(NSString*)name;
|
| +
|
| +@end
|
| +
|
| +@implementation MockICCameraFile
|
| +
|
| +- (id)init:(NSString*)name {
|
| + if ((self = [super init])) {
|
| + name_.reset(name);
|
| + date_.reset([[NSDate dateWithNaturalLanguageString:@"12/12/12"] retain]);
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +- (NSString*)name {
|
| + return name_.get();
|
| +}
|
| +
|
| +- (NSString*)UTI {
|
| + return base::mac::CFToNSCast(kUTTypeImage);
|
| +}
|
| +
|
| +- (NSDate*)modificationDate {
|
| + return date_.get();
|
| +}
|
| +
|
| +- (NSDate*)creationDate {
|
| + return date_.get();
|
| +}
|
| +
|
| +- (off_t)fileSize {
|
| + return 1000;
|
| +}
|
| +
|
| +@end
|
| +
|
| +class TestCameraListener
|
| + : public ImageCaptureDeviceListener,
|
| + public base::SupportsWeakPtr<TestCameraListener> {
|
| + public:
|
| + TestCameraListener() : completed_(false), removed_(false) {}
|
| + virtual ~TestCameraListener() {}
|
| +
|
| + virtual void ItemAdded(const std::string& name,
|
| + const base::PlatformFileInfo& info) OVERRIDE {
|
| + items_.push_back(name);
|
| + }
|
| +
|
| + virtual void NoMoreItems() OVERRIDE {
|
| + completed_ = true;
|
| + }
|
| +
|
| + virtual void DownloadedFile(const std::string& name,
|
| + base::PlatformFileError error) OVERRIDE {
|
| + downloads_.push_back(name);
|
| + }
|
| +
|
| + virtual void DeviceRemoved() OVERRIDE {
|
| + removed_ = true;
|
| + }
|
| +
|
| + std::vector<std::string> items() { return items_; }
|
| + bool completed() { return completed_; }
|
| + bool removed() { return removed_; }
|
| +
|
| + private:
|
| + std::vector<std::string> items_;
|
| + std::vector<std::string> downloads_;
|
| + bool completed_;
|
| + bool removed_;
|
| +};
|
| +
|
| +class ImageCaptureDeviceManagerTest : public testing::Test {
|
| + public:
|
| + virtual void SetUp() OVERRIDE {
|
| + base::SystemMonitor::AllocateSystemIOPorts();
|
| + system_monitor_.reset(new base::SystemMonitor());
|
| + }
|
| +
|
| + ICCameraDevice* AttachDevice(
|
| + chrome::ImageCaptureDeviceManager* manager) {
|
| + // Ownership will be passed to the device browser delegate.
|
| + ICCameraDevice* device = [MockICCameraDevice alloc];
|
| + id<ICDeviceBrowserDelegate> delegate = manager->device_browser();
|
| + [delegate deviceBrowser:nil didAddDevice:device moreComing:NO];
|
| + return device;
|
| + }
|
| +
|
| + void DetachDevice(chrome::ImageCaptureDeviceManager* manager,
|
| + ICCameraDevice* device) {
|
| + id<ICDeviceBrowserDelegate> delegate = manager->device_browser();
|
| + [delegate deviceBrowser:nil didRemoveDevice:device moreGoing:NO];
|
| + }
|
| +
|
| + protected:
|
| + MessageLoop message_loop_;
|
| + scoped_ptr<base::SystemMonitor> system_monitor_;
|
| + TestCameraListener listener_;
|
| +};
|
| +
|
| +TEST_F(ImageCaptureDeviceManagerTest, TestAttachDetach) {
|
| + chrome::ImageCaptureDeviceManager manager;
|
| + ICCameraDevice* device = AttachDevice(&manager);
|
| +
|
| + std::vector<base::SystemMonitor::RemovableStorageInfo> devices =
|
| + system_monitor_->GetAttachedRemovableStorage();
|
| +
|
| + ASSERT_EQ(1U, devices.size());
|
| + EXPECT_EQ(std::string("ic:") + kDeviceId, devices[0].device_id);
|
| +
|
| + DetachDevice(&manager, device);
|
| + devices = system_monitor_->GetAttachedRemovableStorage();
|
| + ASSERT_EQ(0U, devices.size());
|
| +};
|
| +
|
| +TEST_F(ImageCaptureDeviceManagerTest, OpenCamera) {
|
| + chrome::ImageCaptureDeviceManager manager;
|
| + ICCameraDevice* device = AttachDevice(&manager);
|
| +
|
| + EXPECT_FALSE(chrome::ImageCaptureDeviceManager::deviceForUUID(
|
| + "nonexistent"));
|
| +
|
| + scoped_nsobject<ImageCaptureDevice> camera(
|
| + [chrome::ImageCaptureDeviceManager::deviceForUUID(kDeviceId)
|
| + retain]);
|
| +
|
| + [camera setListener:listener_.AsWeakPtr()];
|
| + [camera open];
|
| +
|
| + scoped_nsobject<MockICCameraFile> picture1(
|
| + [[MockICCameraFile alloc] init:@"pic1"]);
|
| + [camera cameraDevice:nil didAddItem:picture1];
|
| + scoped_nsobject<MockICCameraFile> picture2(
|
| + [[MockICCameraFile alloc] init:@"pic2"]);
|
| + [camera cameraDevice:nil didAddItem:picture2];
|
| + ASSERT_EQ(2U, listener_.items().size());
|
| + EXPECT_EQ("pic1", listener_.items()[0]);
|
| + EXPECT_EQ("pic2", listener_.items()[1]);
|
| + EXPECT_FALSE(listener_.completed());
|
| +
|
| + [camera deviceDidBecomeReadyWithCompleteContentCatalog:nil];
|
| + ASSERT_EQ(2U, listener_.items().size());
|
| + EXPECT_TRUE(listener_.completed());
|
| +
|
| + [camera close];
|
| + DetachDevice(&manager, device);
|
| + EXPECT_FALSE(chrome::ImageCaptureDeviceManager::deviceForUUID(
|
| + kDeviceId));
|
| +}
|
| +
|
| +TEST_F(ImageCaptureDeviceManagerTest, RemoveCamera) {
|
| + chrome::ImageCaptureDeviceManager manager;
|
| + ICCameraDevice* device = AttachDevice(&manager);
|
| +
|
| + EXPECT_FALSE(chrome::ImageCaptureDeviceManager::deviceForUUID(
|
| + "nonexistent"));
|
| +
|
| + scoped_nsobject<ImageCaptureDevice> camera(
|
| + [chrome::ImageCaptureDeviceManager::deviceForUUID(kDeviceId)
|
| + retain]);
|
| +
|
| + [camera setListener:listener_.AsWeakPtr()];
|
| + [camera open];
|
| +
|
| + [camera didRemoveDevice:device];
|
| + EXPECT_TRUE(listener_.removed());
|
| +}
|
|
|