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