Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / components / cloud_devices / printer_description_unittest.cc
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
5 #include "components/cloud_devices/printer_description.h"
6
7 #include "base/json/json_reader.h"
8 #include "base/json/json_writer.h"
9 #include "base/strings/string_util.h"
10 #include "base/values.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace cloud_devices {
14
15 namespace printer {
16
17 // Replaces ' with " to allow readable json constants in tests.
18 // Makes sure that same json value represented by same strings to simplify
19 // comparison.
20 std::string NormalizeJson(const std::string& json) {
21   std::string result = json;
22   base::ReplaceChars(result, "'", "\"", &result);
23   scoped_ptr<base::Value> value(base::JSONReader::Read(result));
24   DCHECK(value);
25   base::JSONWriter::Write(value.get(), &result);
26   return result;
27 }
28
29 const char kCdd[] =
30 "{"
31 "  'version': '1.0',"
32 "  'printer': {"
33 "    'supported_content_type': [ {"
34 "      'content_type': 'image/pwg-raster'"
35 "    }, {"
36 "      'content_type': 'image/jpeg'"
37 "    } ],"
38 "    'color': {"
39 "      'option': [ {"
40 "        'is_default': true,"
41 "        'type': 'STANDARD_COLOR'"
42 "      }, {"
43 "        'type': 'STANDARD_MONOCHROME'"
44 "      }, {"
45 "        'type': 'CUSTOM_MONOCHROME',"
46 "        'vendor_id': '123',"
47 "        'custom_display_name': 'monochrome'"
48 "      } ]"
49 "    },"
50 "    'duplex': {"
51 "      'option': [ {"
52 "        'is_default': true,"
53 "        'type': 'LONG_EDGE'"
54 "       }, {"
55 "        'type': 'SHORT_EDGE'"
56 "       }, {"
57 "        'type': 'NO_DUPLEX'"
58 "       } ]"
59 "    },"
60 "    'page_orientation': {"
61 "      'option': [ {"
62 "        'type': 'PORTRAIT'"
63 "      }, {"
64 "        'type': 'LANDSCAPE'"
65 "      }, {"
66 "        'is_default': true,"
67 "        'type': 'AUTO'"
68 "      } ]"
69 "    },"
70 "    'copies': {"
71 "    },"
72 "    'margins': {"
73 "      'option': [ {"
74 "        'is_default': true,"
75 "        'type': 'BORDERLESS',"
76 "        'top_microns': 0,"
77 "        'right_microns': 0,"
78 "        'bottom_microns': 0,"
79 "        'left_microns': 0"
80 "      }, {"
81 "         'type': 'STANDARD',"
82 "         'top_microns': 100,"
83 "         'right_microns': 200,"
84 "         'bottom_microns': 300,"
85 "         'left_microns': 400"
86 "      }, {"
87 "         'type': 'CUSTOM',"
88 "         'top_microns': 1,"
89 "         'right_microns': 2,"
90 "         'bottom_microns': 3,"
91 "         'left_microns': 4"
92 "      } ]"
93 "    },"
94 "    'dpi': {"
95 "      'option': [ {"
96 "        'horizontal_dpi': 150,"
97 "        'vertical_dpi': 250"
98 "      }, {"
99 "        'is_default': true,"
100 "        'horizontal_dpi': 600,"
101 "        'vertical_dpi': 1600"
102 "      } ]"
103 "    },"
104 "    'fit_to_page': {"
105 "      'option': [ {"
106 "        'is_default': true,"
107 "        'type': 'NO_FITTING'"
108 "      }, {"
109 "        'type': 'FIT_TO_PAGE'"
110 "      }, {"
111 "        'type': 'GROW_TO_PAGE'"
112 "      }, {"
113 "        'type': 'SHRINK_TO_PAGE'"
114 "      }, {"
115 "        'type': 'FILL_PAGE'"
116 "      } ]"
117 "    },"
118 "    'page_range': {"
119 "    },"
120 "    'media_size': {"
121 "      'option': [ {"
122 "        'is_default': true,"
123 "        'name': 'NA_LETTER',"
124 "        'width_microns': 2222,"
125 "        'height_microns': 3333"
126 "      }, {"
127 "        'name': 'ISO_A6',"
128 "        'width_microns': 4444,"
129 "        'height_microns': 5555"
130 "      }, {"
131 "        'name': 'JPN_YOU4',"
132 "        'width_microns': 6666,"
133 "        'height_microns': 7777"
134 "      }, {"
135 "        'width_microns': 1111,"
136 "        'is_continuous_feed': true,"
137 "        'custom_display_name': 'FEED'"
138 "      } ]"
139 "    },"
140 "    'collate': {"
141 "      'default': false"
142 "    },"
143 "    'reverse_order': {"
144 "      'default': true"
145 "    }"
146 "  }"
147 "}";
148
149
150 const char kDefaultCdd[] =
151 "{"
152 "  'version': '1.0'"
153 "}";
154
155 const char kBadVersionCdd[] =
156 "{"
157 "  'version': '1.1',"
158 "  'printer': {"
159 "  }"
160 "}";
161
162 const char kNoDefaultCdd[] =
163 "{"
164 "  'version': '1.0',"
165 "  'printer': {"
166 "    'color': {"
167 "      'option': [ {"
168 "        'type': 'STANDARD_COLOR'"
169 "      }, {"
170 "        'type': 'STANDARD_MONOCHROME'"
171 "      } ]"
172 "    }"
173 "  }"
174 "}";
175
176 const char kMultyDefaultCdd[] =
177 "{"
178 "  'version': '1.0',"
179 "  'printer': {"
180 "    'color': {"
181 "      'option': [ {"
182 "        'is_default': true,"
183 "        'type': 'STANDARD_COLOR'"
184 "      }, {"
185 "        'is_default': true,"
186 "        'type': 'STANDARD_MONOCHROME'"
187 "      } ]"
188 "    }"
189 "  }"
190 "}";
191
192 const char kCjt[] =
193 "{"
194 "  'version': '1.0',"
195 "  'print': {"
196 "    'color': {"
197 "      'type': 'STANDARD_MONOCHROME'"
198 "    },"
199 "    'duplex': {"
200 "      'type': 'NO_DUPLEX'"
201 "    },"
202 "    'page_orientation': {"
203 "      'type': 'LANDSCAPE'"
204 "    },"
205 "    'copies': {"
206 "      'copies': 123"
207 "    },"
208 "    'margins': {"
209 "       'type': 'CUSTOM',"
210 "       'top_microns': 7,"
211 "       'right_microns': 6,"
212 "       'bottom_microns': 3,"
213 "       'left_microns': 1"
214 "    },"
215 "    'dpi': {"
216 "      'horizontal_dpi': 562,"
217 "      'vertical_dpi': 125"
218 "    },"
219 "    'fit_to_page': {"
220 "      'type': 'SHRINK_TO_PAGE'"
221 "    },"
222 "    'page_range': {"
223 "      'interval': [ {"
224 "        'start': 1,"
225 "        'end': 99"
226 "       }, {"
227 "        'start': 150"
228 "       } ]"
229 "    },"
230 "    'media_size': {"
231 "      'name': 'ISO_C7C6',"
232 "      'width_microns': 4261,"
233 "      'height_microns': 334"
234 "    },"
235 "    'collate': {"
236 "      'collate': false"
237 "    },"
238 "    'reverse_order': {"
239 "      'reverse_order': true"
240 "    }"
241 "  }"
242 "}";
243
244 const char kDefaultCjt[] =
245 "{"
246 "  'version': '1.0'"
247 "}";
248
249 const char kBadVersionCjt[] =
250 "{"
251 "  'version': '1.1',"
252 "  'print': {"
253 "  }"
254 "}";
255
256 TEST(PrinterDescriptionTest, CddInit) {
257   CloudDeviceDescription description;
258   EXPECT_EQ(NormalizeJson(kDefaultCdd), NormalizeJson(description.ToString()));
259
260   ContentTypesCapability content_types;
261   ColorCapability color;
262   DuplexCapability duplex;
263   OrientationCapability orientation;
264   MarginsCapability margins;
265   DpiCapability dpi;
266   FitToPageCapability fit_to_page;
267   MediaCapability media;
268   CopiesCapability copies;
269   PageRangeCapability page_range;
270   CollateCapability collate;
271   ReverseCapability reverse;
272
273   EXPECT_FALSE(content_types.LoadFrom(description));
274   EXPECT_FALSE(color.LoadFrom(description));
275   EXPECT_FALSE(duplex.LoadFrom(description));
276   EXPECT_FALSE(orientation.LoadFrom(description));
277   EXPECT_FALSE(copies.LoadFrom(description));
278   EXPECT_FALSE(margins.LoadFrom(description));
279   EXPECT_FALSE(dpi.LoadFrom(description));
280   EXPECT_FALSE(fit_to_page.LoadFrom(description));
281   EXPECT_FALSE(page_range.LoadFrom(description));
282   EXPECT_FALSE(media.LoadFrom(description));
283   EXPECT_FALSE(collate.LoadFrom(description));
284   EXPECT_FALSE(reverse.LoadFrom(description));
285   EXPECT_FALSE(media.LoadFrom(description));
286 }
287
288 TEST(PrinterDescriptionTest, CddInvalid) {
289   CloudDeviceDescription description;
290   ColorCapability color;
291
292   EXPECT_FALSE(description.InitFromString(NormalizeJson(kBadVersionCdd)));
293
294   EXPECT_TRUE(description.InitFromString(NormalizeJson(kNoDefaultCdd)));
295   EXPECT_FALSE(color.LoadFrom(description));
296
297   EXPECT_TRUE(description.InitFromString(NormalizeJson(kMultyDefaultCdd)));
298   EXPECT_FALSE(color.LoadFrom(description));
299 }
300
301 TEST(PrinterDescriptionTest, CddSetAll) {
302   CloudDeviceDescription description;
303
304   ContentTypesCapability content_types;
305   ColorCapability color;
306   DuplexCapability duplex;
307   OrientationCapability orientation;
308   MarginsCapability margins;
309   DpiCapability dpi;
310   FitToPageCapability fit_to_page;
311   MediaCapability media;
312   CopiesCapability copies;
313   PageRangeCapability page_range;
314   CollateCapability collate;
315   ReverseCapability reverse;
316
317   content_types.AddOption("image/pwg-raster");
318   content_types.AddOption("image/jpeg");
319
320   color.AddDefaultOption(Color(STANDARD_COLOR), true);
321   color.AddOption(Color(STANDARD_MONOCHROME));
322   Color custom(CUSTOM_MONOCHROME);
323   custom.vendor_id = "123";
324   custom.custom_display_name = "monochrome";
325   color.AddOption(custom);
326
327   duplex.AddDefaultOption(LONG_EDGE, true);
328   duplex.AddOption(SHORT_EDGE);
329   duplex.AddOption(NO_DUPLEX);
330
331   orientation.AddOption(PORTRAIT);
332   orientation.AddOption(LANDSCAPE);
333   orientation.AddDefaultOption(AUTO_ORIENTATION, true);
334
335   margins.AddDefaultOption(Margins(NO_MARGINS, 0, 0, 0, 0), true);
336   margins.AddOption(Margins(STANDARD_MARGINS, 100, 200, 300, 400));
337   margins.AddOption(Margins(CUSTOM_MARGINS, 1, 2, 3, 4));
338
339   dpi.AddOption(Dpi(150, 250));
340   dpi.AddDefaultOption(Dpi(600, 1600), true);
341
342   fit_to_page.AddDefaultOption(NO_FITTING, true);
343   fit_to_page.AddOption(FIT_TO_PAGE);
344   fit_to_page.AddOption(GROW_TO_PAGE);
345   fit_to_page.AddOption(SHRINK_TO_PAGE);
346   fit_to_page.AddOption(FILL_PAGE);
347
348   media.AddDefaultOption(Media(NA_LETTER, 2222, 3333), true);
349   media.AddOption(Media(ISO_A6, 4444, 5555));
350   media.AddOption(Media(JPN_YOU4, 6666, 7777));
351   media.AddOption(Media("FEED", 1111, 0));
352
353   collate.set_default_value(false);
354   reverse.set_default_value(true);
355
356   content_types.SaveTo(&description);
357   color.SaveTo(&description);
358   duplex.SaveTo(&description);
359   orientation.SaveTo(&description);
360   copies.SaveTo(&description);
361   margins.SaveTo(&description);
362   dpi.SaveTo(&description);
363   fit_to_page.SaveTo(&description);
364   page_range.SaveTo(&description);
365   media.SaveTo(&description);
366   collate.SaveTo(&description);
367   reverse.SaveTo(&description);
368
369   EXPECT_EQ(NormalizeJson(kCdd), NormalizeJson(description.ToString()));
370 }
371
372 TEST(PrinterDescriptionTest, CddGetAll) {
373   CloudDeviceDescription description;
374   ASSERT_TRUE(description.InitFromString(NormalizeJson(kCdd)));
375
376   ContentTypesCapability content_types;
377   ColorCapability color;
378   DuplexCapability duplex;
379   OrientationCapability orientation;
380   MarginsCapability margins;
381   DpiCapability dpi;
382   FitToPageCapability fit_to_page;
383   MediaCapability media;
384   CopiesCapability copies;
385   PageRangeCapability page_range;
386   CollateCapability collate;
387   ReverseCapability reverse;
388
389   EXPECT_TRUE(content_types.LoadFrom(description));
390   EXPECT_TRUE(color.LoadFrom(description));
391   EXPECT_TRUE(duplex.LoadFrom(description));
392   EXPECT_TRUE(orientation.LoadFrom(description));
393   EXPECT_TRUE(copies.LoadFrom(description));
394   EXPECT_TRUE(margins.LoadFrom(description));
395   EXPECT_TRUE(dpi.LoadFrom(description));
396   EXPECT_TRUE(fit_to_page.LoadFrom(description));
397   EXPECT_TRUE(page_range.LoadFrom(description));
398   EXPECT_TRUE(media.LoadFrom(description));
399   EXPECT_TRUE(collate.LoadFrom(description));
400   EXPECT_TRUE(reverse.LoadFrom(description));
401   EXPECT_TRUE(media.LoadFrom(description));
402
403   EXPECT_TRUE(content_types.Contains("image/pwg-raster"));
404   EXPECT_TRUE(content_types.Contains("image/jpeg"));
405
406   EXPECT_TRUE(color.Contains(Color(STANDARD_COLOR)));
407   EXPECT_TRUE(color.Contains(Color(STANDARD_MONOCHROME)));
408   Color custom(CUSTOM_MONOCHROME);
409   custom.vendor_id = "123";
410   custom.custom_display_name = "monochrome";
411   EXPECT_TRUE(color.Contains(custom));
412   EXPECT_EQ(Color(STANDARD_COLOR), color.GetDefault());
413
414   EXPECT_TRUE(duplex.Contains(LONG_EDGE));
415   EXPECT_TRUE(duplex.Contains(SHORT_EDGE));
416   EXPECT_TRUE(duplex.Contains(NO_DUPLEX));
417   EXPECT_EQ(LONG_EDGE, duplex.GetDefault());
418
419   EXPECT_TRUE(orientation.Contains(PORTRAIT));
420   EXPECT_TRUE(orientation.Contains(LANDSCAPE));
421   EXPECT_TRUE(orientation.Contains(AUTO_ORIENTATION));
422   EXPECT_EQ(AUTO_ORIENTATION, orientation.GetDefault());
423
424   EXPECT_TRUE(margins.Contains(Margins(NO_MARGINS, 0, 0, 0, 0)));
425   EXPECT_TRUE(margins.Contains(Margins(STANDARD_MARGINS, 100, 200, 300, 400)));
426   EXPECT_TRUE(margins.Contains(Margins(CUSTOM_MARGINS, 1, 2, 3, 4)));
427   EXPECT_EQ(Margins(NO_MARGINS, 0, 0, 0, 0), margins.GetDefault());
428
429   EXPECT_TRUE(dpi.Contains(Dpi(150, 250)));
430   EXPECT_TRUE(dpi.Contains(Dpi(600, 1600)));
431   EXPECT_EQ(Dpi(600, 1600), dpi.GetDefault());
432
433   EXPECT_TRUE(fit_to_page.Contains(NO_FITTING));
434   EXPECT_TRUE(fit_to_page.Contains(FIT_TO_PAGE));
435   EXPECT_TRUE(fit_to_page.Contains(GROW_TO_PAGE));
436   EXPECT_TRUE(fit_to_page.Contains(SHRINK_TO_PAGE));
437   EXPECT_TRUE(fit_to_page.Contains(FILL_PAGE));
438   EXPECT_EQ(NO_FITTING, fit_to_page.GetDefault());
439
440   EXPECT_TRUE(media.Contains(Media(NA_LETTER, 2222, 3333)));
441   EXPECT_TRUE(media.Contains(Media(ISO_A6, 4444, 5555)));
442   EXPECT_TRUE(media.Contains(Media(JPN_YOU4, 6666, 7777)));
443   EXPECT_TRUE(media.Contains(Media("FEED", 1111, 0)));
444   EXPECT_EQ(Media(NA_LETTER, 2222, 3333), media.GetDefault());
445
446   EXPECT_FALSE(collate.default_value());
447   EXPECT_TRUE(reverse.default_value());
448
449   EXPECT_EQ(NormalizeJson(kCdd), NormalizeJson(description.ToString()));
450 }
451
452 TEST(PrinterDescriptionTest, CjtInit) {
453   CloudDeviceDescription description;
454   EXPECT_EQ(NormalizeJson(kDefaultCjt), NormalizeJson(description.ToString()));
455
456   ColorTicketItem color;
457   DuplexTicketItem duplex;
458   OrientationTicketItem orientation;
459   MarginsTicketItem margins;
460   DpiTicketItem dpi;
461   FitToPageTicketItem fit_to_page;
462   MediaTicketItem media;
463   CopiesTicketItem copies;
464   PageRangeTicketItem page_range;
465   CollateTicketItem collate;
466   ReverseTicketItem reverse;
467
468   EXPECT_FALSE(color.LoadFrom(description));
469   EXPECT_FALSE(duplex.LoadFrom(description));
470   EXPECT_FALSE(orientation.LoadFrom(description));
471   EXPECT_FALSE(copies.LoadFrom(description));
472   EXPECT_FALSE(margins.LoadFrom(description));
473   EXPECT_FALSE(dpi.LoadFrom(description));
474   EXPECT_FALSE(fit_to_page.LoadFrom(description));
475   EXPECT_FALSE(page_range.LoadFrom(description));
476   EXPECT_FALSE(media.LoadFrom(description));
477   EXPECT_FALSE(collate.LoadFrom(description));
478   EXPECT_FALSE(reverse.LoadFrom(description));
479   EXPECT_FALSE(media.LoadFrom(description));
480 }
481
482 TEST(PrinterDescriptionTest, CjtInvalid) {
483   CloudDeviceDescription ticket;
484   EXPECT_FALSE(ticket.InitFromString(NormalizeJson(kBadVersionCjt)));
485 }
486
487 TEST(PrinterDescriptionTest, CjtSetAll) {
488   CloudDeviceDescription description;
489
490   ColorTicketItem color;
491   DuplexTicketItem duplex;
492   OrientationTicketItem orientation;
493   MarginsTicketItem margins;
494   DpiTicketItem dpi;
495   FitToPageTicketItem fit_to_page;
496   MediaTicketItem media;
497   CopiesTicketItem copies;
498   PageRangeTicketItem page_range;
499   CollateTicketItem collate;
500   ReverseTicketItem reverse;
501
502   color.set_value(Color(STANDARD_MONOCHROME));
503   duplex.set_value(NO_DUPLEX);
504   orientation.set_value(LANDSCAPE);
505   copies.set_value(123);
506   margins.set_value(Margins(CUSTOM_MARGINS, 7, 6, 3, 1));
507   dpi.set_value(Dpi(562, 125));
508   fit_to_page.set_value(SHRINK_TO_PAGE);
509   PageRange page_ranges;
510   page_ranges.push_back(Interval(1, 99));
511   page_ranges.push_back(Interval(150));
512   page_range.set_value(page_ranges);
513   media.set_value(Media(ISO_C7C6, 4261, 334));
514   collate.set_value(false);
515   reverse.set_value(true);
516
517   color.SaveTo(&description);
518   duplex.SaveTo(&description);
519   orientation.SaveTo(&description);
520   copies.SaveTo(&description);
521   margins.SaveTo(&description);
522   dpi.SaveTo(&description);
523   fit_to_page.SaveTo(&description);
524   page_range.SaveTo(&description);
525   media.SaveTo(&description);
526   collate.SaveTo(&description);
527   reverse.SaveTo(&description);
528
529   EXPECT_EQ(NormalizeJson(kCjt), NormalizeJson(description.ToString()));
530 }
531
532 TEST(PrinterDescriptionTest, CjtGetAll) {
533   CloudDeviceDescription description;
534   ASSERT_TRUE(description.InitFromString(NormalizeJson(kCjt)));
535
536   ColorTicketItem color;
537   DuplexTicketItem duplex;
538   OrientationTicketItem orientation;
539   MarginsTicketItem margins;
540   DpiTicketItem dpi;
541   FitToPageTicketItem fit_to_page;
542   MediaTicketItem media;
543   CopiesTicketItem copies;
544   PageRangeTicketItem page_range;
545   CollateTicketItem collate;
546   ReverseTicketItem reverse;
547
548   EXPECT_TRUE(color.LoadFrom(description));
549   EXPECT_TRUE(duplex.LoadFrom(description));
550   EXPECT_TRUE(orientation.LoadFrom(description));
551   EXPECT_TRUE(copies.LoadFrom(description));
552   EXPECT_TRUE(margins.LoadFrom(description));
553   EXPECT_TRUE(dpi.LoadFrom(description));
554   EXPECT_TRUE(fit_to_page.LoadFrom(description));
555   EXPECT_TRUE(page_range.LoadFrom(description));
556   EXPECT_TRUE(media.LoadFrom(description));
557   EXPECT_TRUE(collate.LoadFrom(description));
558   EXPECT_TRUE(reverse.LoadFrom(description));
559   EXPECT_TRUE(media.LoadFrom(description));
560
561   EXPECT_EQ(color.value(), Color(STANDARD_MONOCHROME));
562   EXPECT_EQ(duplex.value(), NO_DUPLEX);
563   EXPECT_EQ(orientation.value(), LANDSCAPE);
564   EXPECT_EQ(copies.value(), 123);
565   EXPECT_EQ(margins.value(), Margins(CUSTOM_MARGINS, 7, 6, 3, 1));
566   EXPECT_EQ(dpi.value(), Dpi(562, 125));
567   EXPECT_EQ(fit_to_page.value(), SHRINK_TO_PAGE);
568   PageRange page_ranges;
569   page_ranges.push_back(Interval(1, 99));
570   page_ranges.push_back(Interval(150));
571   EXPECT_EQ(page_range.value(), page_ranges);
572   EXPECT_EQ(media.value(), Media(ISO_C7C6, 4261, 334));
573   EXPECT_FALSE(collate.value());
574   EXPECT_TRUE(reverse.value());
575
576   EXPECT_EQ(NormalizeJson(kCjt), NormalizeJson(description.ToString()));
577 }
578
579 }  // namespace printer
580
581 }  // namespace cloud_devices