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

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: Starting over. This used to be 286933006 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 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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698