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

Side by Side Diff: chrome/browser/extensions/api/document_scan/document_scan_interface_chromeos_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698