OLD | NEW |
| (Empty) |
1 // Copyright 2014 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 #include "chrome/browser/extensions/api/document_scan/document_scan_interface_ch
romeos.h" | |
5 | |
6 #include <string> | |
7 #include <vector> | |
8 | |
9 #include "base/bind.h" | |
10 #include "base/test/test_simple_task_runner.h" | |
11 #include "base/thread_task_runner_handle.h" | |
12 #include "chromeos/dbus/mock_lorgnette_manager_client.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 #include "third_party/cros_system_api/dbus/service_constants.h" | |
15 | |
16 using testing::_; | |
17 | |
18 namespace extensions { | |
19 | |
20 namespace api { | |
21 | |
22 // Tests of networking_private_crypto support for Networking Private API. | |
23 class DocumentScanInterfaceChromeosTest : public testing::Test { | |
24 public: | |
25 DocumentScanInterfaceChromeosTest() | |
26 : client_(new chromeos::MockLorgnetteManagerClient()) {} | |
27 virtual ~DocumentScanInterfaceChromeosTest() {} | |
28 | |
29 void SetUp() { | |
30 // This is needed to create a valid PipeReader object. | |
31 task_runner_ = new base::TestSimpleTaskRunner(); | |
32 thread_task_runner_handle_.reset( | |
33 new base::ThreadTaskRunnerHandle(task_runner_)); | |
34 scan_interface_.lorgnette_manager_client_ = client_.get(); | |
35 } | |
36 | |
37 virtual void TearDown() override { | |
38 thread_task_runner_handle_.reset(); | |
39 task_runner_ = NULL; | |
40 } | |
41 | |
42 MOCK_METHOD2( | |
43 OnListScannersResultReceived, | |
44 void(const std::vector<DocumentScanInterface::ScannerDescription>& | |
45 scanners, | |
46 const std::string& error)); | |
47 | |
48 MOCK_METHOD3(OnScanCompleted, void(const std::string& scanned_image, | |
49 const std::string& mime_type, | |
50 const std::string& error)); | |
51 | |
52 chromeos::PipeReader *GetPipeReader() { | |
53 return scan_interface_.pipe_reader_.get(); | |
54 } | |
55 | |
56 protected: | |
57 DocumentScanInterfaceChromeos scan_interface_; | |
58 scoped_ptr<chromeos::MockLorgnetteManagerClient> client_; | |
59 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | |
60 scoped_ptr<base::ThreadTaskRunnerHandle> thread_task_runner_handle_; | |
61 }; | |
62 | |
63 ACTION_P2(InvokeListScannersCallback, scanner_list, error) { | |
64 ::std::tr1::get<0>(args).Run(scanner_list, error); | |
65 } | |
66 | |
67 ACTION_P2(InvokePipeReader, test, data) { | |
68 test->GetPipeReader()->AcceptData(data.c_str(), data.size()); | |
69 } | |
70 | |
71 ACTION_P(InvokeScanCallback, succeeded) { | |
72 ::std::tr1::get<3>(args).Run(succeeded); | |
73 } | |
74 | |
75 MATCHER_P5(IsScannerDescription, name, manufacturer, model, type, mime, "") { | |
76 return | |
77 arg.name == name && | |
78 arg.manufacturer == manufacturer && | |
79 arg.model == model && | |
80 arg.scanner_type == type && | |
81 arg.image_mime_type == mime; | |
82 } | |
83 | |
84 MATCHER_P2(IsScannerProperties, mode, resolution, "") { | |
85 return arg.mode == mode && arg.resolution_dpi == resolution; | |
86 } | |
87 | |
88 TEST_F(DocumentScanInterfaceChromeosTest, ListScanners) { | |
89 chromeos::LorgnetteManagerClient::ScannerTable scanners; | |
90 const char kScannerName[] = "Monet"; | |
91 chromeos::LorgnetteManagerClient::ScannerTableEntry entry; | |
92 const char kScannerManufacturer[] = "Jacques-Louis David"; | |
93 entry[lorgnette::kScannerPropertyManufacturer] = kScannerManufacturer; | |
94 const char kScannerModel[] = "Le Havre"; | |
95 entry[lorgnette::kScannerPropertyModel] = kScannerModel; | |
96 const char kScannerType[] = "Impressionism"; | |
97 entry[lorgnette::kScannerPropertyType] = kScannerType; | |
98 scanners[kScannerName] = entry; | |
99 EXPECT_CALL(*client_, ListScanners(_)) | |
100 .WillOnce(InvokeListScannersCallback(true, scanners)); | |
101 EXPECT_CALL(*this, OnListScannersResultReceived( | |
102 testing::ElementsAre( | |
103 IsScannerDescription(kScannerName, | |
104 kScannerManufacturer, | |
105 kScannerModel, | |
106 kScannerType, | |
107 "image/png")), "")); | |
108 scan_interface_.ListScanners(base::Bind( | |
109 &DocumentScanInterfaceChromeosTest::OnListScannersResultReceived, | |
110 base::Unretained(this))); | |
111 } | |
112 | |
113 TEST_F(DocumentScanInterfaceChromeosTest, ScanFailure) { | |
114 const char kScannerName[] = "Monet"; | |
115 const int kResolution = 4096; | |
116 EXPECT_TRUE(base::ThreadTaskRunnerHandle::IsSet()); | |
117 EXPECT_CALL(*client_, ScanImage( | |
118 kScannerName, | |
119 _, | |
120 IsScannerProperties( | |
121 lorgnette::kScanPropertyModeColor, | |
122 kResolution), | |
123 _)).WillOnce(InvokeScanCallback(false)); | |
124 EXPECT_CALL(*this, OnScanCompleted("data:image/png;base64,", | |
125 "image/png", | |
126 "Image scan failed")); | |
127 scan_interface_.Scan( | |
128 kScannerName, | |
129 DocumentScanInterface::kScanModeColor, | |
130 kResolution, | |
131 base::Bind( | |
132 &DocumentScanInterfaceChromeosTest::OnScanCompleted, | |
133 base::Unretained(this))); | |
134 } | |
135 | |
136 TEST_F(DocumentScanInterfaceChromeosTest, ScanSuccess) { | |
137 const char kScannerName[] = "Monet"; | |
138 const int kResolution = 4096; | |
139 EXPECT_TRUE(base::ThreadTaskRunnerHandle::IsSet()); | |
140 EXPECT_CALL(*client_, | |
141 ScanImage( | |
142 kScannerName, | |
143 _, | |
144 IsScannerProperties( | |
145 lorgnette::kScanPropertyModeColor, | |
146 kResolution), | |
147 _)) | |
148 .WillOnce(testing::DoAll( | |
149 InvokePipeReader(this, std::string("PrettyPicture")), | |
150 InvokeScanCallback(true))); | |
151 | |
152 // Data URL plus base64 representation of "PrettyPicture". | |
153 const char kExpectedImageData[] = | |
154 "data:image/png;base64,UHJldHR5UGljdHVyZQ=="; | |
155 | |
156 EXPECT_CALL(*this, OnScanCompleted(kExpectedImageData, "image/png", "")); | |
157 scan_interface_.Scan( | |
158 kScannerName, | |
159 DocumentScanInterface::kScanModeColor, | |
160 kResolution, | |
161 base::Bind( | |
162 &DocumentScanInterfaceChromeosTest::OnScanCompleted, | |
163 base::Unretained(this))); | |
164 } | |
165 | |
166 } // namespace api | |
167 | |
168 } // namespace extensions | |
OLD | NEW |