Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: chrome/browser/system_monitor/image_capture_device_manager_unittest.mm

Issue 11442057: [Media Galleries] Add an ImageCaptureCore listener for Mac. (part 2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Switch to only use the UI thread. Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5
6 #import <Foundation/Foundation.h>
7 #import <ImageCaptureCore/ImageCaptureCore.h>
8
9 #include "base/file_path.h"
10 #include "base/mac/foundation_util.h"
11 #include "base/memory/weak_ptr.h"
12 #include "base/message_loop.h"
13 #include "base/system_monitor/system_monitor.h"
14 #include "base/thread_task_runner_handle.h"
15 #include "chrome/browser/system_monitor/image_capture_device.h"
16 #include "chrome/browser/system_monitor/image_capture_device_manager.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 namespace {
20
21 const char kDeviceId[] = "id";
22
23 } // namespace
24
25 @interface MockICCameraDevice : ICCameraDevice {
26 }
27
28 @end
29
30 @implementation MockICCameraDevice
31
32 - (NSString*)mountPoint {
33 return @"mountPoint";
34 }
35
36 - (NSString*)name {
37 return @"name";
38 }
39
40 - (NSString*)UUIDString {
41 return base::SysUTF8ToNSString(kDeviceId);
42 }
43
44 - (ICDeviceType)type {
45 return ICDeviceTypeCamera;
46 }
47
48 - (void)requestOpenSession {
49 }
50
51 - (void)requestCloseSession {
52 }
53
54 @end
55
56 @interface MockICCameraFile : ICCameraFile {
57 @private
58 scoped_nsobject<NSString> name_;
59 scoped_nsobject<NSDate> date_;
60 }
61
62 - (id)init:(NSString*)name;
63
64 @end
65
66 @implementation MockICCameraFile
67
68 - (id)init:(NSString*)name {
69 if ((self = [super init])) {
70 name_.reset(name);
71 date_.reset([[NSDate dateWithNaturalLanguageString:@"12/12/12"] retain]);
72 }
73 return self;
74 }
75
76 - (NSString*)name {
77 return name_.get();
78 }
79
80 - (NSString*)UTI {
81 return base::mac::CFToNSCast(kUTTypeImage);
82 }
83
84 - (NSDate*)modificationDate {
85 return date_.get();
86 }
87
88 - (NSDate*)creationDate {
89 return date_.get();
90 }
91
92 - (off_t)fileSize {
93 return 1000;
94 }
95
96 @end
97
98 class TestCameraListener
99 : public ImageCaptureDeviceListener,
100 public base::SupportsWeakPtr<TestCameraListener> {
101 public:
102 TestCameraListener() : completed_(false), removed_(false) {}
103 virtual ~TestCameraListener() {}
104
105 virtual void ItemAdded(const std::string& name,
106 const base::PlatformFileInfo& info) OVERRIDE {
107 items_.push_back(name);
108 }
109
110 virtual void NoMoreItems() OVERRIDE {
111 completed_ = true;
112 }
113
114 virtual void DownloadedFile(const std::string& name,
115 base::PlatformFileError error) OVERRIDE {
116 downloads_.push_back(name);
117 }
118
119 virtual void DeviceRemoved() OVERRIDE {
120 removed_ = true;
121 }
122
123 std::vector<std::string> items() { return items_; }
124 bool completed() { return completed_; }
125 bool removed() { return removed_; }
126
127 private:
128 std::vector<std::string> items_;
129 std::vector<std::string> downloads_;
130 bool completed_;
131 bool removed_;
132 };
133
134 class ImageCaptureDeviceManagerTest : public testing::Test {
135 public:
136 virtual void SetUp() OVERRIDE {
137 base::SystemMonitor::AllocateSystemIOPorts();
138 system_monitor_.reset(new base::SystemMonitor());
139 }
140
141 ICCameraDevice* AttachDevice(
142 chrome::ImageCaptureDeviceManager* manager) {
143 // Ownership will be passed to the device browser delegate.
144 ICCameraDevice* device = [MockICCameraDevice alloc];
145 id<ICDeviceBrowserDelegate> delegate = manager->device_browser();
146 [delegate deviceBrowser:nil didAddDevice:device moreComing:NO];
147 return device;
148 }
149
150 void DetachDevice(chrome::ImageCaptureDeviceManager* manager,
151 ICCameraDevice* device) {
152 id<ICDeviceBrowserDelegate> delegate = manager->device_browser();
153 [delegate deviceBrowser:nil didRemoveDevice:device moreGoing:NO];
154 }
155
156 protected:
157 MessageLoop message_loop_;
158 scoped_ptr<base::SystemMonitor> system_monitor_;
159 TestCameraListener listener_;
160 };
161
162 TEST_F(ImageCaptureDeviceManagerTest, TestAttachDetach) {
163 chrome::ImageCaptureDeviceManager manager;
164 ICCameraDevice* device = AttachDevice(&manager);
165
166 std::vector<base::SystemMonitor::RemovableStorageInfo> devices =
167 system_monitor_->GetAttachedRemovableStorage();
168
169 ASSERT_EQ(1U, devices.size());
170 EXPECT_EQ(std::string("ic:") + kDeviceId, devices[0].device_id);
171
172 DetachDevice(&manager, device);
173 devices = system_monitor_->GetAttachedRemovableStorage();
174 ASSERT_EQ(0U, devices.size());
175 };
176
177 TEST_F(ImageCaptureDeviceManagerTest, OpenCamera) {
178 chrome::ImageCaptureDeviceManager manager;
179 ICCameraDevice* device = AttachDevice(&manager);
180
181 EXPECT_FALSE(chrome::ImageCaptureDeviceManager::deviceForUUID(
182 "nonexistent"));
183
184 scoped_nsobject<ImageCaptureDevice> camera(
185 [chrome::ImageCaptureDeviceManager::deviceForUUID(kDeviceId)
186 retain]);
187
188 [camera setListener:listener_.AsWeakPtr()];
189 [camera open];
190
191 scoped_nsobject<MockICCameraFile> picture1(
192 [[MockICCameraFile alloc] init:@"pic1"]);
193 [camera cameraDevice:nil didAddItem:picture1];
194 scoped_nsobject<MockICCameraFile> picture2(
195 [[MockICCameraFile alloc] init:@"pic2"]);
196 [camera cameraDevice:nil didAddItem:picture2];
197 ASSERT_EQ(2U, listener_.items().size());
198 EXPECT_EQ("pic1", listener_.items()[0]);
199 EXPECT_EQ("pic2", listener_.items()[1]);
200 EXPECT_FALSE(listener_.completed());
201
202 [camera deviceDidBecomeReadyWithCompleteContentCatalog:nil];
203 ASSERT_EQ(2U, listener_.items().size());
204 EXPECT_TRUE(listener_.completed());
205
206 [camera close];
207 DetachDevice(&manager, device);
208 EXPECT_FALSE(chrome::ImageCaptureDeviceManager::deviceForUUID(
209 kDeviceId));
210 }
211
212 TEST_F(ImageCaptureDeviceManagerTest, RemoveCamera) {
213 chrome::ImageCaptureDeviceManager manager;
214 ICCameraDevice* device = AttachDevice(&manager);
215
216 EXPECT_FALSE(chrome::ImageCaptureDeviceManager::deviceForUUID(
217 "nonexistent"));
218
219 scoped_nsobject<ImageCaptureDevice> camera(
220 [chrome::ImageCaptureDeviceManager::deviceForUUID(kDeviceId)
221 retain]);
222
223 [camera setListener:listener_.AsWeakPtr()];
224 [camera open];
225
226 [camera didRemoveDevice:device];
227 EXPECT_TRUE(listener_.removed());
228 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698