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 ~DocumentScanScanFunctionTest() override {} | |
27 | |
28 void SetUp() override { | |
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 |