File: document_scan_api_unittest.cc

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (123 lines) | stat: -rw-r--r-- 4,688 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/api/document_scan/document_scan_api.h"

#include <string>
#include <vector>

#include "chrome/browser/extensions/api/document_scan/mock_document_scan_interface.h"
#include "chrome/browser/extensions/extension_api_unittest.h"
#include "chrome/browser/extensions/extension_function_test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"

using testing::_;

namespace extensions {

namespace api {

// Tests of networking_private_crypto support for Networking Private API.
class DocumentScanScanFunctionTest : public ExtensionApiUnittest {
 public:
  DocumentScanScanFunctionTest()
      : function_(new DocumentScanScanFunction()),
        document_scan_interface_(new MockDocumentScanInterface()) {}
  ~DocumentScanScanFunctionTest() override {}

  void SetUp() override {
    ExtensionApiUnittest::SetUp();
    // Passes ownership.
    function_->document_scan_interface_.reset(document_scan_interface_);
  }

 protected:
  std::string RunFunctionAndReturnError(const std::string& args) {
    function_->set_extension(extension());
    std::string error =
       extension_function_test_utils::RunFunctionAndReturnError(
           function_, args, browser(),
           extension_function_test_utils::NONE);
    return error;
  }

  DocumentScanScanFunction* function_;
  MockDocumentScanInterface* document_scan_interface_;  // Owned by function_.
};

ACTION_P2(InvokeListScannersCallback, scanner_list, error) {
  ::std::tr1::get<0>(args).Run(scanner_list, error);
}

ACTION_P3(InvokeScanCallback, data, mime_type, error) {
  ::std::tr1::get<3>(args).Run(data, mime_type, error);
}

TEST_F(DocumentScanScanFunctionTest, GestureRequired) {
  EXPECT_EQ("User gesture required to perform scan",
            RunFunctionAndReturnError("[{}]"));
}

TEST_F(DocumentScanScanFunctionTest, NoScanners) {
  function_->set_user_gesture(true);
  EXPECT_CALL(*document_scan_interface_, ListScanners(_))
      .WillOnce(InvokeListScannersCallback(
                    std::vector<DocumentScanInterface::ScannerDescription>(),
                    ""));
  EXPECT_EQ("Scanner not available",
            RunFunctionAndReturnError("[{}]"));
}

TEST_F(DocumentScanScanFunctionTest, NoMatchingScanners) {
  function_->set_user_gesture(true);
  std::vector<DocumentScanInterface::ScannerDescription> scanner_list;
  DocumentScanInterface::ScannerDescription scanner;
  scanner.image_mime_type = "img/fresco";
  scanner_list.push_back(scanner);
  EXPECT_CALL(*document_scan_interface_, ListScanners(_))
      .WillOnce(InvokeListScannersCallback(scanner_list, ""));
  EXPECT_EQ(
      "Scanner not available",
      RunFunctionAndReturnError("[{\"mimeTypes\": [\"img/silverpoint\"]}]"));
}

TEST_F(DocumentScanScanFunctionTest, ScanFailure) {
  function_->set_user_gesture(true);
  std::vector<DocumentScanInterface::ScannerDescription> scanner_list;
  DocumentScanInterface::ScannerDescription scanner;
  const char kMimeType[] = "img/tempera";
  const char kScannerName[] = "Michelangelo";
  scanner.name = kScannerName;
  scanner.image_mime_type = kMimeType;
  scanner_list.push_back(scanner);
  EXPECT_CALL(*document_scan_interface_, ListScanners(_))
      .WillOnce(InvokeListScannersCallback(scanner_list, ""));
  const char kScanError[] = "Someone ate all the eggs";
  EXPECT_CALL(*document_scan_interface_, Scan(kScannerName, _, _, _))
      .WillOnce(InvokeScanCallback("", "", kScanError));
  EXPECT_EQ(kScanError,
            RunFunctionAndReturnError("[{\"mimeTypes\": [\"img/tempera\"]}]"));
}

TEST_F(DocumentScanScanFunctionTest, Success) {
  std::vector<DocumentScanInterface::ScannerDescription> scanner_list;
  scanner_list.push_back(DocumentScanInterface::ScannerDescription());
  EXPECT_CALL(*document_scan_interface_, ListScanners(_))
      .WillOnce(InvokeListScannersCallback(scanner_list, ""));
  const char kScanData[] = "A beautiful picture";
  const char kMimeType[] = "img/encaustic";
  EXPECT_CALL(*document_scan_interface_, Scan(_, _, _, _))
      .WillOnce(InvokeScanCallback(kScanData, kMimeType, ""));
  function_->set_user_gesture(true);
  scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDictionary(
      function_, "[{}]"));
  ASSERT_NE(nullptr, result.get());
  document_scan::ScanResults scan_results;
  EXPECT_TRUE(document_scan::ScanResults::Populate(*result, &scan_results));
  EXPECT_THAT(scan_results.data_urls, testing::ElementsAre(kScanData));
  EXPECT_EQ(kMimeType, scan_results.mime_type);
}

}  // namespace api

}  // namespace extensions