Home | History | Annotate | Download | only in cloud_print
      1 // Copyright 2013 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 "base/files/file_util.h"
      6 #include "base/memory/scoped_ptr.h"
      7 #include "base/sha1.h"
      8 #include "chrome/utility/cloud_print/bitmap_image.h"
      9 #include "chrome/utility/cloud_print/pwg_encoder.h"
     10 #include "testing/gtest/include/gtest/gtest.h"
     11 
     12 namespace cloud_print {
     13 
     14 namespace {
     15 
     16 // SHA-1 of golden master for this test, plus null terminating character.
     17 // File is in chrome/test/data/printing/test_pwg_generator.pwg.
     18 const char kPWGFileSha1[] = {'\x4a', '\xd7', '\x44', '\x29', '\x98', '\xc8',
     19                              '\xfe', '\xae', '\x94', '\xbc', '\x9c', '\x8b',
     20                              '\x17', '\x7a', '\x7c', '\x94', '\x76', '\x6c',
     21                              '\xc9', '\xfb', '\0'};
     22 
     23 const int kRasterWidth = 612;
     24 const int kRasterHeight = 792;
     25 const int kRasterDPI = 72;
     26 
     27 scoped_ptr<BitmapImage> MakeSampleBitmap() {
     28   scoped_ptr<BitmapImage> bitmap_image(
     29       new BitmapImage(gfx::Size(kRasterWidth, kRasterHeight),
     30                       BitmapImage::RGBA));
     31 
     32   uint32* bitmap_data = reinterpret_cast<uint32*>(
     33       bitmap_image->pixel_data());
     34 
     35   for (int i = 0; i < kRasterWidth * kRasterHeight; i++) {
     36     bitmap_data[i] = 0xFFFFFF;
     37   }
     38 
     39 
     40   for (int i = 0; i < kRasterWidth; i++) {
     41     for (int j = 200; j < 300; j++) {
     42       int row_start = j * kRasterWidth;
     43       uint32 red = (i * 255)/kRasterWidth;
     44       bitmap_data[row_start + i] = red;
     45     }
     46   }
     47 
     48   // To test run length encoding
     49   for (int i = 0; i < kRasterWidth; i++) {
     50     for (int j = 400; j < 500; j++) {
     51       int row_start = j * kRasterWidth;
     52       if ((i/40) % 2 == 0) {
     53         bitmap_data[row_start + i] = 255 << 8;
     54       } else {
     55         bitmap_data[row_start + i] = 255 << 16;
     56       }
     57     }
     58   }
     59 
     60   return bitmap_image.Pass();
     61 }
     62 
     63 }  // namespace
     64 
     65 TEST(PwgRasterTest, CompareWithMaster) {
     66   std::string output;
     67   PwgEncoder encoder;
     68   scoped_ptr<BitmapImage> image = MakeSampleBitmap();
     69   PwgHeaderInfo header_info;
     70   header_info.dpi = kRasterDPI;
     71   header_info.total_pages = 1;
     72 
     73   encoder.EncodeDocumentHeader(&output);
     74   encoder.EncodePage(*image, header_info, &output);
     75 
     76   EXPECT_EQ(kPWGFileSha1, base::SHA1HashString(output));
     77 }
     78 
     79 }  // namespace cloud_print
     80