| 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_api.h" | |
| 5 | |
| 6 #include <string> | |
| 7 #include <vector> | |
| 8 | |
| 9 #include "chrome/browser/extensions/api/document_scan/mock_document_scan_interfa
ce.h" | |
| 10 #include "chrome/browser/extensions/extension_api_unittest.h" | |
| 11 #include "chrome/browser/extensions/extension_function_test_utils.h" | |
| 12 #include "testing/gtest/include/gtest/gtest.h" | |
| 13 | |
| 14 using testing::_; | |
| 15 | |
| 16 namespace extensions { | |
| 17 | |
| 18 namespace api { | |
| 19 | |
| 20 // Tests of networking_private_crypto support for Networking Private API. | |
| 21 class DocumentScanScanFunctionTest : public ExtensionApiUnittest { | |
| 22 public: | |
| 23 DocumentScanScanFunctionTest() | |
| 24 : function_(new DocumentScanScanFunction()), | |
| 25 document_scan_interface_(new MockDocumentScanInterface()) {} | |
| 26 virtual ~DocumentScanScanFunctionTest() {} | |
| 27 | |
| 28 void SetUp() { | |
| 29 ExtensionApiUnittest::SetUp(); | |
| 30 // Passes ownership. | |
| 31 function_->document_scan_interface_.reset(document_scan_interface_); | |
| 32 } | |
| 33 | |
| 34 protected: | |
| 35 std::string RunFunctionAndReturnError(const std::string& args) { | |
| 36 function_->set_extension(extension()); | |
| 37 std::string error = | |
| 38 extension_function_test_utils::RunFunctionAndReturnError( | |
| 39 function_, args, browser(), | |
| 40 extension_function_test_utils::NONE); | |
| 41 return error; | |
| 42 } | |
| 43 | |
| 44 DocumentScanScanFunction* function_; | |
| 45 MockDocumentScanInterface* document_scan_interface_; // Owned by function_. | |
| 46 }; | |
| 47 | |
| 48 ACTION_P2(InvokeListScannersCallback, scanner_list, error) { | |
| 49 ::std::tr1::get<0>(args).Run(scanner_list, error); | |
| 50 } | |
| 51 | |
| 52 ACTION_P3(InvokeScanCallback, data, mime_type, error) { | |
| 53 ::std::tr1::get<3>(args).Run(data, mime_type, error); | |
| 54 } | |
| 55 | |
| 56 TEST_F(DocumentScanScanFunctionTest, GestureRequired) { | |
| 57 EXPECT_EQ("User gesture required to perform scan", | |
| 58 RunFunctionAndReturnError("[{}]")); | |
| 59 } | |
| 60 | |
| 61 TEST_F(DocumentScanScanFunctionTest, NoScanners) { | |
| 62 function_->set_user_gesture(true); | |
| 63 EXPECT_CALL(*document_scan_interface_, ListScanners(_)) | |
| 64 .WillOnce(InvokeListScannersCallback( | |
| 65 std::vector<DocumentScanInterface::ScannerDescription>(), | |
| 66 "")); | |
| 67 EXPECT_EQ("Scanner not available", | |
| 68 RunFunctionAndReturnError("[{}]")); | |
| 69 } | |
| 70 | |
| 71 TEST_F(DocumentScanScanFunctionTest, NoMatchingScanners) { | |
| 72 function_->set_user_gesture(true); | |
| 73 std::vector<DocumentScanInterface::ScannerDescription> scanner_list; | |
| 74 DocumentScanInterface::ScannerDescription scanner; | |
| 75 scanner.image_mime_type = "img/fresco"; | |
| 76 scanner_list.push_back(scanner); | |
| 77 EXPECT_CALL(*document_scan_interface_, ListScanners(_)) | |
| 78 .WillOnce(InvokeListScannersCallback(scanner_list, "")); | |
| 79 EXPECT_EQ( | |
| 80 "Scanner not available", | |
| 81 RunFunctionAndReturnError("[{\"mimeTypes\": [\"img/silverpoint\"]}]")); | |
| 82 } | |
| 83 | |
| 84 TEST_F(DocumentScanScanFunctionTest, ScanFailure) { | |
| 85 function_->set_user_gesture(true); | |
| 86 std::vector<DocumentScanInterface::ScannerDescription> scanner_list; | |
| 87 DocumentScanInterface::ScannerDescription scanner; | |
| 88 const char kMimeType[] = "img/tempera"; | |
| 89 const char kScannerName[] = "Michelangelo"; | |
| 90 scanner.name = kScannerName; | |
| 91 scanner.image_mime_type = kMimeType; | |
| 92 scanner_list.push_back(scanner); | |
| 93 EXPECT_CALL(*document_scan_interface_, ListScanners(_)) | |
| 94 .WillOnce(InvokeListScannersCallback(scanner_list, "")); | |
| 95 const char kScanError[] = "Someone ate all the eggs"; | |
| 96 EXPECT_CALL(*document_scan_interface_, Scan(kScannerName, _, _, _)) | |
| 97 .WillOnce(InvokeScanCallback("", "", kScanError)); | |
| 98 EXPECT_EQ(kScanError, | |
| 99 RunFunctionAndReturnError("[{\"mimeTypes\": [\"img/tempera\"]}]")); | |
| 100 } | |
| 101 | |
| 102 TEST_F(DocumentScanScanFunctionTest, Success) { | |
| 103 std::vector<DocumentScanInterface::ScannerDescription> scanner_list; | |
| 104 scanner_list.push_back(DocumentScanInterface::ScannerDescription()); | |
| 105 EXPECT_CALL(*document_scan_interface_, ListScanners(_)) | |
| 106 .WillOnce(InvokeListScannersCallback(scanner_list, "")); | |
| 107 const char kScanData[] = "A beautiful picture"; | |
| 108 const char kMimeType[] = "img/encaustic"; | |
| 109 EXPECT_CALL(*document_scan_interface_, Scan(_, _, _, _)) | |
| 110 .WillOnce(InvokeScanCallback(kScanData, kMimeType, "")); | |
| 111 function_->set_user_gesture(true); | |
| 112 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDictionary( | |
| 113 function_, "[{}]")); | |
| 114 ASSERT_NE(nullptr, result.get()); | |
| 115 document_scan::ScanResults scan_results; | |
| 116 EXPECT_TRUE(document_scan::ScanResults::Populate(*result, &scan_results)); | |
| 117 EXPECT_THAT(scan_results.data_urls, testing::ElementsAre(kScanData)); | |
| 118 EXPECT_EQ(kMimeType, scan_results.mime_type); | |
| 119 } | |
| 120 | |
| 121 } // namespace api | |
| 122 | |
| 123 } // namespace extensions | |
| OLD | NEW |