OLD | NEW |
---|---|
(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 #include "chrome/browser/system_monitor/image_capture_device_browser_mac.h" | |
6 | |
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 "chrome/browser/system_monitor/image_capture_camera.h" | |
15 #include "testing/gtest/include/gtest/gtest.h" | |
16 | |
17 namespace { | |
18 | |
19 const char kDeviceId[] = "id"; | |
20 | |
21 } // namespace | |
22 | |
23 @interface MockICCameraDevice : ICCameraDevice { | |
24 } | |
25 | |
26 @end | |
27 | |
28 @implementation MockICCameraDevice | |
29 | |
30 - (NSString*)mountPoint { | |
31 return @"mountPoint"; | |
32 } | |
33 | |
34 - (NSString*)name { | |
35 return @"name"; | |
36 } | |
37 | |
38 - (NSString*)UUIDString { | |
39 return base::SysUTF8ToNSString(kDeviceId); | |
40 } | |
41 | |
42 - (ICDeviceType)type { | |
43 return ICDeviceTypeCamera; | |
44 } | |
45 | |
46 - (void)requestOpenSession { | |
47 } | |
48 | |
49 - (void)requestCloseSession { | |
50 } | |
51 | |
52 @end | |
53 | |
54 @interface MockICCameraFile : ICCameraFile { | |
55 @private | |
56 scoped_nsobject<NSString> name_; | |
57 scoped_nsobject<NSDate> date_; | |
58 } | |
59 | |
60 - (id)init:(NSString*)name; | |
61 | |
62 @end | |
63 | |
64 @implementation MockICCameraFile | |
65 | |
66 - (id)init:(NSString*)name { | |
67 if ((self = [super init])) { | |
68 name_.reset(name); | |
69 date_.reset([[NSDate dateWithNaturalLanguageString:@"12/12/12"] retain]); | |
70 } | |
71 return self; | |
72 } | |
73 | |
74 - (NSString*)name { | |
75 return name_.get(); | |
76 } | |
77 | |
78 - (NSString*)UTI { | |
79 return base::mac::CFToNSCast(kUTTypeImage); | |
80 } | |
81 | |
82 - (NSDate*)modificationDate { | |
83 return date_.get(); | |
84 } | |
85 | |
86 - (NSDate*)creationDate { | |
87 return date_.get(); | |
88 } | |
89 | |
90 - (off_t)fileSize { | |
91 return 1000; | |
92 } | |
93 | |
94 @end | |
95 | |
96 class TestCameraListener | |
97 : public ImageCaptureDeviceListener, | |
98 public base::SupportsWeakPtr<TestCameraListener> { | |
99 public: | |
100 TestCameraListener() : completed_(false), removed_(false) {} | |
101 virtual ~TestCameraListener() {} | |
102 | |
103 virtual void ItemAdded(const std::string& name, | |
104 const base::PlatformFileInfo& info) OVERRIDE { | |
105 items_.push_back(name); | |
106 } | |
107 | |
108 virtual void NoMoreItems() OVERRIDE { | |
109 completed_ = true; | |
110 } | |
111 | |
112 virtual void DownloadedFile(const std::string& name, | |
113 base::PlatformFileError error) OVERRIDE { | |
114 downloads_.push_back(name); | |
115 } | |
116 | |
117 virtual void DeviceRemoved() OVERRIDE { | |
118 removed_ = true; | |
119 } | |
120 | |
121 std::vector<std::string> items_; | |
122 std::vector<std::string> downloads_; | |
123 bool completed_; | |
124 bool removed_; | |
125 }; | |
126 | |
127 class ImageCaptureDeviceBrowserTest : public testing::Test { | |
128 public: | |
129 virtual void SetUp() OVERRIDE { | |
130 base::SystemMonitor::AllocateSystemIOPorts(); | |
131 system_monitor_.reset(new base::SystemMonitor()); | |
132 } | |
133 | |
134 ICCameraDevice* AttachDevice( | |
135 chrome::ImageCaptureDeviceBrowser* browser) { | |
136 // Ownership will be passed to the device browser delegate. | |
137 ICCameraDevice* device = [MockICCameraDevice alloc]; | |
138 id<ICDeviceBrowserDelegate> delegate = browser->device_browser(); | |
139 [delegate deviceBrowser:nil didAddDevice:device moreComing:NO]; | |
140 return device; | |
141 } | |
142 | |
143 void DetachDevice(chrome::ImageCaptureDeviceBrowser* browser, | |
144 ICCameraDevice* device) { | |
145 id<ICDeviceBrowserDelegate> delegate = browser->device_browser(); | |
146 [delegate deviceBrowser:nil didRemoveDevice:device moreGoing:NO]; | |
147 } | |
148 | |
149 protected: | |
150 MessageLoop message_loop_; | |
151 scoped_ptr<base::SystemMonitor> system_monitor_; | |
152 TestCameraListener listener_; | |
153 }; | |
154 | |
155 TEST_F(ImageCaptureDeviceBrowserTest, TestAttachDetach) { | |
156 chrome::ImageCaptureDeviceBrowser browser; | |
157 ICCameraDevice* device = AttachDevice(&browser); | |
158 | |
159 std::vector<base::SystemMonitor::RemovableStorageInfo> devices = | |
160 system_monitor_->GetAttachedRemovableStorage(); | |
161 | |
162 ASSERT_EQ(1U, devices.size()); | |
163 EXPECT_EQ(std::string("ic:") + kDeviceId, devices[0].device_id); | |
164 | |
165 DetachDevice(&browser, device); | |
166 devices = system_monitor_->GetAttachedRemovableStorage(); | |
167 ASSERT_EQ(0U, devices.size()); | |
168 }; | |
169 | |
170 TEST_F(ImageCaptureDeviceBrowserTest, OpenCamera) { | |
171 chrome::ImageCaptureDeviceBrowser browser; | |
172 ICCameraDevice* device = AttachDevice(&browser); | |
173 | |
174 EXPECT_FALSE(chrome::ImageCaptureDeviceBrowser::cameraInterfaceForUUID( | |
175 "nonexistent")); | |
176 | |
177 scoped_nsobject<ImageCaptureCameraInterface> camera( | |
178 [chrome::ImageCaptureDeviceBrowser::cameraInterfaceForUUID(kDeviceId) | |
179 retain]); | |
sail
2012/12/17 23:55:03
indent 3 more spaces
Greg Billock
2012/12/19 00:05:09
Done.
| |
180 | |
181 [camera open]; | |
182 [camera setListener:listener_.AsWeakPtr()]; | |
183 | |
184 scoped_nsobject<MockICCameraFile> picture1( | |
185 [[MockICCameraFile alloc] init:@"pic1"]); | |
186 [camera cameraDevice:nil didAddItem:picture1]; | |
187 scoped_nsobject<MockICCameraFile> picture2( | |
188 [[MockICCameraFile alloc] init:@"pic2"]); | |
189 [camera cameraDevice:nil didAddItem:picture2]; | |
190 ASSERT_EQ(2U, listener_.items_.size()); | |
191 EXPECT_EQ("pic1", listener_.items_[0]); | |
192 EXPECT_EQ("pic2", listener_.items_[1]); | |
193 EXPECT_FALSE(listener_.completed_); | |
194 | |
195 [camera deviceDidBecomeReadyWithCompleteContentCatalog:nil]; | |
196 ASSERT_EQ(2U, listener_.items_.size()); | |
197 EXPECT_TRUE(listener_.completed_); | |
198 | |
199 [camera close]; | |
200 | |
201 DetachDevice(&browser, device); | |
202 EXPECT_FALSE(chrome::ImageCaptureDeviceBrowser::cameraInterfaceForUUID( | |
203 kDeviceId)); | |
204 } | |
OLD | NEW |