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 |