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

Side by Side Diff: printing/backend/cups_ipp_util_unittest.cc

Issue 2105463002: Create a new print backend for the updated CUPS APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix typos. Created 4 years, 5 months 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
« no previous file with comments | « printing/backend/cups_ipp_util.cc ('k') | printing/backend/cups_printer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 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
5 #include <cups/cups.h>
6
7 #include <map>
8 #include <memory>
9
10 #include "base/logging.h"
11 #include "base/memory/ptr_util.h"
12 #include "printing/backend/cups_ipp_util.h"
13 #include "printing/backend/cups_printer.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace printing {
17
18 class MockCupsOptionProvider : public CupsOptionProvider {
19 public:
20 ~MockCupsOptionProvider() override {}
21
22 ipp_attribute_t* GetSupportedOptionValues(
23 base::StringPiece option_name) const override {
24 const auto attr = supported_attributes_.find(option_name);
25 return attr != supported_attributes_.end() ? attr->second : nullptr;
26 }
27
28 std::vector<base::StringPiece> GetSupportedOptionValueStrings(
29 base::StringPiece option_name) const override {
30 ipp_attribute_t* attr = GetSupportedOptionValues(option_name);
31 if (!attr)
32 return std::vector<base::StringPiece>();
33
34 std::vector<base::StringPiece> strings;
35 int size = ippGetCount(attr);
36 for (int i = 0; i < size; ++i) {
37 strings.emplace_back(ippGetString(attr, i, nullptr));
38 }
39
40 return strings;
41 }
42
43 ipp_attribute_t* GetDefaultOptionValue(
44 base::StringPiece option_name) const override {
45 const auto attr = default_attributes_.find(option_name);
46 return attr != default_attributes_.end() ? attr->second : nullptr;
47 }
48
49 bool CheckOptionSupported(base::StringPiece name,
50 base::StringPiece value) const override {
51 NOTREACHED();
52 return false;
53 }
54
55 void SetSupportedOptions(base::StringPiece name, ipp_attribute_t* attribute) {
56 supported_attributes_[name] = attribute;
57 }
58
59 void SetOptionDefault(base::StringPiece name, ipp_attribute_t* attribute) {
60 default_attributes_[name] = attribute;
61 }
62
63 private:
64 std::map<base::StringPiece, ipp_attribute_t*> supported_attributes_;
65 std::map<base::StringPiece, ipp_attribute_t*> default_attributes_;
66 };
67
68 class PrintBackendCupsIppUtilTest : public ::testing::Test {
69 protected:
70 void SetUp() override {
71 ipp_ = ippNew();
72 printer_ = base::MakeUnique<MockCupsOptionProvider>();
73 }
74
75 void TearDown() override {
76 ippDelete(ipp_);
77 printer_.reset();
78 }
79
80 ipp_t* ipp_;
81 std::unique_ptr<MockCupsOptionProvider> printer_;
82 };
83
84 ipp_attribute_t* MakeRange(ipp_t* ipp, int lower_bound, int upper_bound) {
85 return ippAddRange(ipp, IPP_TAG_PRINTER, "TEST_DATA", lower_bound,
86 upper_bound);
87 }
88
89 ipp_attribute_t* MakeString(ipp_t* ipp, const char* value) {
90 return ippAddString(ipp, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "TEST_DATA",
91 nullptr, value);
92 }
93
94 ipp_attribute_t* MakeStringCollection(ipp_t* ipp,
95 std::vector<const char*> strings) {
96 return ippAddStrings(ipp, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "TEST_DATA",
97 strings.size(), nullptr, strings.data());
98 }
99
100 TEST_F(PrintBackendCupsIppUtilTest, CopiesCapable) {
101 printer_->SetSupportedOptions("copies", MakeRange(ipp_, 1, 2));
102
103 PrinterSemanticCapsAndDefaults caps;
104 CapsAndDefaultsFromPrinter(*printer_, &caps);
105
106 EXPECT_TRUE(caps.copies_capable);
107 }
108
109 TEST_F(PrintBackendCupsIppUtilTest, CopiesNotCapable) {
110 // copies missing, no setup
111 PrinterSemanticCapsAndDefaults caps;
112 CapsAndDefaultsFromPrinter(*printer_, &caps);
113
114 EXPECT_FALSE(caps.copies_capable);
115 }
116
117 TEST_F(PrintBackendCupsIppUtilTest, ColorPrinter) {
118 printer_->SetSupportedOptions(
119 "print-color-mode", MakeStringCollection(ipp_, {"color", "monochrome"}));
120 printer_->SetOptionDefault("print-color-mode", MakeString(ipp_, "color"));
121
122 PrinterSemanticCapsAndDefaults caps;
123 CapsAndDefaultsFromPrinter(*printer_, &caps);
124
125 EXPECT_TRUE(caps.color_changeable);
126 EXPECT_TRUE(caps.color_default);
127 }
128
129 TEST_F(PrintBackendCupsIppUtilTest, BWPrinter) {
130 printer_->SetSupportedOptions("print-color-mode",
131 MakeStringCollection(ipp_, {"monochrome"}));
132 printer_->SetOptionDefault("print-color-mode",
133 MakeString(ipp_, "monochrome"));
134
135 PrinterSemanticCapsAndDefaults caps;
136 CapsAndDefaultsFromPrinter(*printer_, &caps);
137
138 EXPECT_FALSE(caps.color_changeable);
139 EXPECT_FALSE(caps.color_default);
140 }
141
142 TEST_F(PrintBackendCupsIppUtilTest, DuplexSupported) {
143 printer_->SetSupportedOptions(
144 "sides",
145 MakeStringCollection(ipp_, {"two-sided-long-edge", "one-sided"}));
146 printer_->SetOptionDefault("sides", MakeString(ipp_, "one-sided"));
147
148 PrinterSemanticCapsAndDefaults caps;
149 CapsAndDefaultsFromPrinter(*printer_, &caps);
150
151 EXPECT_TRUE(caps.duplex_capable);
152 EXPECT_FALSE(caps.duplex_default);
153 }
154
155 TEST_F(PrintBackendCupsIppUtilTest, DuplexNotSupported) {
156 printer_->SetSupportedOptions("sides",
157 MakeStringCollection(ipp_, {"one-sided"}));
158 printer_->SetOptionDefault("sides", MakeString(ipp_, "one-sided"));
159
160 PrinterSemanticCapsAndDefaults caps;
161 CapsAndDefaultsFromPrinter(*printer_, &caps);
162
163 EXPECT_FALSE(caps.duplex_capable);
164 EXPECT_FALSE(caps.duplex_default);
165 }
166
167 TEST_F(PrintBackendCupsIppUtilTest, A4PaperSupported) {
168 printer_->SetSupportedOptions(
169 "media", MakeStringCollection(ipp_, {"iso_a4_210x297mm"}));
170
171 PrinterSemanticCapsAndDefaults caps;
172 CapsAndDefaultsFromPrinter(*printer_, &caps);
173
174 PrinterSemanticCapsAndDefaults::Paper paper = caps.papers[0];
175 EXPECT_EQ("iso a4", paper.display_name);
176 EXPECT_EQ("iso_a4_210x297mm", paper.vendor_id);
177 EXPECT_EQ(210000, paper.size_um.width());
178 EXPECT_EQ(297000, paper.size_um.height());
179 }
180
181 TEST_F(PrintBackendCupsIppUtilTest, LegalPaperDefault) {
182 printer_->SetOptionDefault("media", MakeString(ipp_, "na_legal_8.5x14in"));
183
184 PrinterSemanticCapsAndDefaults caps;
185 CapsAndDefaultsFromPrinter(*printer_, &caps);
186
187 EXPECT_EQ("na legal", caps.default_paper.display_name);
188 EXPECT_EQ("na_legal_8.5x14in", caps.default_paper.vendor_id);
189 EXPECT_EQ(215900, caps.default_paper.size_um.width());
190 EXPECT_EQ(355600, caps.default_paper.size_um.height());
191 }
192
193 } // namespace printing
OLDNEW
« no previous file with comments | « printing/backend/cups_ipp_util.cc ('k') | printing/backend/cups_printer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698