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

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: update gyp 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
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
9 #include "base/logging.h"
10 #include "printing/backend/cups_ipp_util.h"
11 #include "printing/backend/cups_printer.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 class MockCupsOptionProvider : public printing::CupsOptionProvider {
15 public:
16 ~MockCupsOptionProvider() override {}
17
18 ipp_attribute_t* GetSupportedOptionValues(
19 base::StringPiece option_name) const override {
20 const auto attr = supported_attributes_.find(option_name);
21 return attr != supported_attributes_.end() ? attr->second : nullptr;
22 }
23
24 std::vector<base::StringPiece> GetSupportedOptionValueStrings(
25 base::StringPiece option_name) const override {
26 ipp_attribute_t* attr = GetSupportedOptionValues(option_name);
27 if (!attr)
28 return std::vector<base::StringPiece>();
29
30 std::vector<base::StringPiece> strings;
31 int size = ippGetCount(attr);
32 for (int i = 0; i < size; ++i) {
33 strings.emplace_back(ippGetString(attr, i, NULL));
Lei Zhang 2016/07/21 00:46:19 nullptr, more below. :-P
skau 2016/07/21 20:07:31 I'll break this habit soon!
34 }
35
36 return strings;
37 }
38
39 ipp_attribute_t* GetDefaultOptionValue(
40 base::StringPiece option_name) const override {
41 const auto attr = default_attributes_.find(option_name);
42 return attr != default_attributes_.end() ? attr->second : nullptr;
43 }
44
45 bool CheckOptionSupported(base::StringPiece name,
46 base::StringPiece value) const override {
47 NOTREACHED();
48 return false;
49 }
50
51 void SetSupportedOptions(base::StringPiece name, ipp_attribute_t* attribute) {
52 supported_attributes_[name] = attribute;
53 }
54
55 void SetOptionDefault(base::StringPiece name, ipp_attribute_t* attribute) {
56 default_attributes_[name] = attribute;
57 }
58
59 private:
60 std::map<base::StringPiece, ipp_attribute_t*> supported_attributes_;
61 std::map<base::StringPiece, ipp_attribute_t*> default_attributes_;
62 };
63
64 class PrintBackendCupsIppUtilTest : public ::testing::Test {
65 protected:
66 void SetUp() override {
67 ipp_ = ippNew();
68 printer_ = new MockCupsOptionProvider();
69 }
70
71 void TearDown() override {
72 ippDelete(ipp_);
73 delete printer_;
Lei Zhang 2016/07/21 00:46:19 unique_ptr, reset() here.
skau 2016/07/21 20:07:31 Done.
74 }
75
76 ipp_t* ipp_;
77 MockCupsOptionProvider* printer_;
78 };
79
80 ipp_attribute_t* MakeRange(ipp_t* ipp, int lower_bound, int upper_bound) {
81 return ippAddRange(ipp, IPP_TAG_PRINTER, "TEST_DATA", lower_bound,
82 upper_bound);
83 }
84
85 ipp_attribute_t* MakeString(ipp_t* ipp, const char* value) {
86 return ippAddString(ipp, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "TEST_DATA", NULL,
87 value);
88 }
89
90 ipp_attribute_t* MakeStringCollection(ipp_t* ipp,
91 std::vector<const char*> strings) {
92 return ippAddStrings(ipp, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "TEST_DATA",
93 strings.size(), NULL, strings.data());
94 }
95
96 TEST_F(PrintBackendCupsIppUtilTest, CopiesCapable) {
97 printer_->SetSupportedOptions("copies", MakeRange(ipp_, 1, 2));
98
99 printing::PrinterSemanticCapsAndDefaults caps;
Lei Zhang 2016/07/21 00:46:19 Put the entire thing in namespace printing and sav
skau 2016/07/21 20:07:31 Done.
100
Lei Zhang 2016/07/21 00:46:19 too many blank spaces.
skau 2016/07/21 20:07:31 lol
101 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
102
103 EXPECT_TRUE(caps.copies_capable);
104 }
105
106 TEST_F(PrintBackendCupsIppUtilTest, CopiesNotCapable) {
107 // copies missing, no setup
108
109 printing::PrinterSemanticCapsAndDefaults caps;
110
111 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
112
113 EXPECT_FALSE(caps.copies_capable);
114 }
115
116 TEST_F(PrintBackendCupsIppUtilTest, ColorPrinter) {
117 printer_->SetSupportedOptions(
118 "print-color-mode", MakeStringCollection(ipp_, {"color", "monochrome"}));
119 printer_->SetOptionDefault("print-color-mode", MakeString(ipp_, "color"));
120
121 printing::PrinterSemanticCapsAndDefaults caps;
122 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
123
124 EXPECT_TRUE(caps.color_changeable);
125 EXPECT_TRUE(caps.color_default);
126 }
127
128 TEST_F(PrintBackendCupsIppUtilTest, BWPrinter) {
129 printer_->SetSupportedOptions("print-color-mode",
130 MakeStringCollection(ipp_, {"monochrome"}));
131 printer_->SetOptionDefault("print-color-mode",
132 MakeString(ipp_, "monochrome"));
133
134 printing::PrinterSemanticCapsAndDefaults caps;
135 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
136
137 EXPECT_FALSE(caps.color_changeable);
138 EXPECT_FALSE(caps.color_default);
139 }
140
141 TEST_F(PrintBackendCupsIppUtilTest, DuplexSupported) {
142 printer_->SetSupportedOptions(
143 "sides",
144 MakeStringCollection(ipp_, {"two-sided-long-edge", "one-sided"}));
145 printer_->SetOptionDefault("sides", MakeString(ipp_, "one-sided"));
146
147 printing::PrinterSemanticCapsAndDefaults caps;
148 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
149
150 EXPECT_TRUE(caps.duplex_capable);
151 EXPECT_FALSE(caps.duplex_default);
152 }
153
154 TEST_F(PrintBackendCupsIppUtilTest, DuplexNotSupported) {
155 printer_->SetSupportedOptions("sides",
156 MakeStringCollection(ipp_, {"one-sided"}));
157 printer_->SetOptionDefault("sides", MakeString(ipp_, "one-sided"));
158
159 printing::PrinterSemanticCapsAndDefaults caps;
160 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
161
162 EXPECT_FALSE(caps.duplex_capable);
163 EXPECT_FALSE(caps.duplex_default);
164 }
165
166 TEST_F(PrintBackendCupsIppUtilTest, A4PaperSupported) {
167 printer_->SetSupportedOptions(
168 "media", MakeStringCollection(ipp_, {"iso_a4_210x297mm"}));
169
170 printing::PrinterSemanticCapsAndDefaults caps;
171 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
172
173 printing::PrinterSemanticCapsAndDefaults::Paper paper = caps.papers[0];
174
175 EXPECT_EQ(paper.display_name, "iso a4");
Lei Zhang 2016/07/21 00:46:20 EXPECT_EQ(expected_value, actual_value);
skau 2016/07/21 20:07:32 Done.
176 EXPECT_EQ(paper.vendor_id, "iso_a4_210x297mm");
177 EXPECT_EQ(paper.size_um.width(), 210000);
178 EXPECT_EQ(paper.size_um.height(), 297000);
179 }
180
181 TEST_F(PrintBackendCupsIppUtilTest, LegalPaperDefault) {
182 printer_->SetOptionDefault("media", MakeString(ipp_, "na_legal_8.5x14in"));
183
184 printing::PrinterSemanticCapsAndDefaults caps;
185 printing::CapsAndDefaultsFromPrinter(*printer_, &caps);
186
187 EXPECT_EQ(caps.default_paper.display_name, "na legal");
188 EXPECT_EQ(caps.default_paper.vendor_id, "na_legal_8.5x14in");
189 EXPECT_EQ(caps.default_paper.size_um.width(), 215900);
190 EXPECT_EQ(caps.default_paper.size_um.height(), 355600);
191 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698