Home | History | Annotate | Download | only in common
      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.
     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 
    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 
    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 
    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 
    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 
    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 
    508 TEST(PrinterDescriptionTest, CjtInvalid) {
    509   CloudDeviceDescription ticket;
    510   EXPECT_FALSE(ticket.InitFromString(NormalizeJson(kBadVersionCjt)));
    511 }
    512 
    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 
    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