Home | History | Annotate | Download | only in printing
      1 // Copyright (c) 2011 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 "printing/page_setup.h"
      6 
      7 #include <stdlib.h>
      8 #include <time.h>
      9 
     10 #include <algorithm>
     11 
     12 #include "testing/gtest/include/gtest/gtest.h"
     13 
     14 TEST(PageSetupTest, Random) {
     15   time_t seed = time(NULL);
     16   int kMax = 10;
     17   srand(static_cast<unsigned>(seed));
     18 
     19   // Margins.
     20   printing::PageMargins margins;
     21   margins.header = rand() % kMax;
     22   margins.footer = rand() % kMax;
     23   margins.left = rand() % kMax;
     24   margins.top = rand() % kMax;
     25   margins.right = rand() % kMax;
     26   margins.bottom = rand() % kMax;
     27   int kTextHeight = rand() % kMax;
     28 
     29   // Page description.
     30   gfx::Size page_size(100 + rand() % kMax, 200 + rand() % kMax);
     31   gfx::Rect printable_area(rand() % kMax, rand() % kMax, 0, 0);
     32   printable_area.set_width(page_size.width() - (rand() % kMax) -
     33                            printable_area.x());
     34   printable_area.set_height(page_size.height() - (rand() % kMax) -
     35                             printable_area.y());
     36 
     37   // Make the calculations.
     38   printing::PageSetup setup;
     39   setup.SetRequestedMargins(margins);
     40   setup.Init(page_size, printable_area, kTextHeight);
     41 
     42   // Calculate the effective margins.
     43   printing::PageMargins effective_margins;
     44   effective_margins.header = std::max(margins.header, printable_area.y());
     45   effective_margins.left = std::max(margins.left, printable_area.x());
     46   effective_margins.top = std::max(margins.top,
     47                                    effective_margins.header + kTextHeight);
     48   effective_margins.footer = std::max(margins.footer,
     49                                       page_size.height() -
     50                                           printable_area.bottom());
     51   effective_margins.right = std::max(margins.right,
     52                                       page_size.width() -
     53                                           printable_area.right());
     54   effective_margins.bottom = std::max(margins.bottom,
     55                                       effective_margins.footer  + kTextHeight);
     56 
     57   // Calculate the overlay area.
     58   gfx::Rect overlay_area(effective_margins.left, effective_margins.header,
     59                          page_size.width() - effective_margins.right -
     60                             effective_margins.left,
     61                          page_size.height() - effective_margins.footer -
     62                             effective_margins.header);
     63 
     64   // Calculate the content area.
     65   gfx::Rect content_area(overlay_area.x(),
     66                          effective_margins.top,
     67                          overlay_area.width(),
     68                          page_size.height() - effective_margins.bottom -
     69                              effective_margins.top);
     70 
     71   // Test values.
     72   EXPECT_EQ(page_size, setup.physical_size()) << seed << " " <<
     73       page_size.ToString() << " " << printable_area.ToString() <<
     74       " " << kTextHeight;
     75   EXPECT_EQ(overlay_area, setup.overlay_area()) << seed << " " <<
     76       page_size.ToString() << " " << printable_area.ToString() <<
     77       " " << kTextHeight;
     78   EXPECT_EQ(content_area, setup.content_area()) << seed << " " <<
     79       page_size.ToString() << " " << printable_area.ToString() <<
     80       " " << kTextHeight;
     81 
     82   EXPECT_EQ(effective_margins.header, setup.effective_margins().header) <<
     83       seed << " " << page_size.ToString() << " " << printable_area.ToString() <<
     84       " " << kTextHeight;
     85   EXPECT_EQ(effective_margins.footer, setup.effective_margins().footer) <<
     86       seed << " " << page_size.ToString() << " " << printable_area.ToString() <<
     87       " " << kTextHeight;
     88   EXPECT_EQ(effective_margins.left, setup.effective_margins().left) << seed <<
     89       " " << page_size.ToString() << " " << printable_area.ToString() <<
     90       " " << kTextHeight;
     91   EXPECT_EQ(effective_margins.top, setup.effective_margins().top) << seed <<
     92       " " << page_size.ToString() << " " << printable_area.ToString() <<
     93       " " << kTextHeight;
     94   EXPECT_EQ(effective_margins.right, setup.effective_margins().right) << seed <<
     95       " " << page_size.ToString() << " " << printable_area.ToString() <<
     96       " " << kTextHeight;
     97   EXPECT_EQ(effective_margins.bottom, setup.effective_margins().bottom) <<
     98       seed << " " << page_size.ToString() << " " << printable_area.ToString() <<
     99        " " << kTextHeight;
    100 }
    101 
    102 TEST(PageSetupTest, HardCoded) {
    103   // Margins.
    104   printing::PageMargins margins;
    105   margins.header = 2;
    106   margins.footer = 2;
    107   margins.left = 4;
    108   margins.top = 4;
    109   margins.right = 4;
    110   margins.bottom = 4;
    111   int kTextHeight = 3;
    112 
    113   // Page description.
    114   gfx::Size page_size(100, 100);
    115   gfx::Rect printable_area(3, 3, 94, 94);
    116 
    117   // Make the calculations.
    118   printing::PageSetup setup;
    119   setup.SetRequestedMargins(margins);
    120   setup.Init(page_size, printable_area, kTextHeight);
    121 
    122   // Calculate the effective margins.
    123   printing::PageMargins effective_margins;
    124   effective_margins.header = 3;
    125   effective_margins.left = 4;
    126   effective_margins.top = 6;
    127   effective_margins.footer = 3;
    128   effective_margins.right = 4;
    129   effective_margins.bottom = 6;
    130 
    131   // Calculate the overlay area.
    132   gfx::Rect overlay_area(4, 3, 92, 94);
    133 
    134   // Calculate the content area.
    135   gfx::Rect content_area(4, 6, 92, 88);
    136 
    137   // Test values.
    138   EXPECT_EQ(page_size, setup.physical_size()) << " " << page_size.ToString() <<
    139       " " << printable_area.ToString() << " " << kTextHeight;
    140   EXPECT_EQ(overlay_area, setup.overlay_area()) << " " <<
    141       page_size.ToString() <<  " " << printable_area.ToString() <<
    142       " " << kTextHeight;
    143   EXPECT_EQ(content_area, setup.content_area()) << " " <<
    144       page_size.ToString() <<  " " << printable_area.ToString() <<
    145       " " << kTextHeight;
    146 
    147   EXPECT_EQ(effective_margins.header, setup.effective_margins().header) <<
    148       " " << page_size.ToString() << " " <<
    149       printable_area.ToString() << " " << kTextHeight;
    150   EXPECT_EQ(effective_margins.footer, setup.effective_margins().footer) <<
    151       " " << page_size.ToString() << " " << printable_area.ToString() <<
    152       " " << kTextHeight;
    153   EXPECT_EQ(effective_margins.left, setup.effective_margins().left) <<
    154       " " << page_size.ToString() << " " << printable_area.ToString() <<
    155       " " << kTextHeight;
    156   EXPECT_EQ(effective_margins.top, setup.effective_margins().top) <<
    157       " " << page_size.ToString() << " " << printable_area.ToString() <<
    158       " " << kTextHeight;
    159   EXPECT_EQ(effective_margins.right, setup.effective_margins().right) <<
    160       " " << page_size.ToString() << " " << printable_area.ToString() <<
    161       " " << kTextHeight;
    162   EXPECT_EQ(effective_margins.bottom, setup.effective_margins().bottom) <<
    163       " " << page_size.ToString() << " " << printable_area.ToString() <<
    164       " " << kTextHeight;
    165 }
    166 
    167 TEST(PageSetupTest, OutOfRangeMargins) {
    168   printing::PageMargins margins;
    169   margins.header = 0;
    170   margins.footer = 0;
    171   margins.left = -10;
    172   margins.top = -11;
    173   margins.right = -12;
    174   margins.bottom = -13;
    175 
    176   gfx::Size page_size(100, 100);
    177   gfx::Rect printable_area(1, 2, 96, 94);
    178 
    179   // Make the calculations.
    180   printing::PageSetup setup;
    181   setup.SetRequestedMargins(margins);
    182   setup.Init(page_size, printable_area, 0);
    183 
    184   EXPECT_EQ(setup.effective_margins().left, 1);
    185   EXPECT_EQ(setup.effective_margins().top, 2);
    186   EXPECT_EQ(setup.effective_margins().right, 3);
    187   EXPECT_EQ(setup.effective_margins().bottom, 4);
    188 
    189   setup.ForceRequestedMargins(margins);
    190   EXPECT_EQ(setup.effective_margins().left, 0);
    191   EXPECT_EQ(setup.effective_margins().top, 0);
    192   EXPECT_EQ(setup.effective_margins().right, 0);
    193   EXPECT_EQ(setup.effective_margins().bottom, 0);
    194 }
    195 
    196 TEST(PageSetupTest, FlipOrientation) {
    197   // Margins.
    198   printing::PageMargins margins;
    199   margins.header = 2;
    200   margins.footer = 3;
    201   margins.left = 4;
    202   margins.top = 14;
    203   margins.right = 6;
    204   margins.bottom = 7;
    205   int kTextHeight = 5;
    206 
    207   // Page description.
    208   gfx::Size page_size(100, 70);
    209   gfx::Rect printable_area(8, 9, 92, 50);
    210 
    211   // Make the calculations.
    212   printing::PageSetup setup;
    213   setup.SetRequestedMargins(margins);
    214   setup.Init(page_size, printable_area, kTextHeight);
    215 
    216   gfx::Rect overlay_area(8, 9, 86, 50);
    217   gfx::Rect content_area(8, 14, 86, 40);
    218 
    219   EXPECT_EQ(page_size, setup.physical_size());
    220   EXPECT_EQ(overlay_area, setup.overlay_area());
    221   EXPECT_EQ(content_area, setup.content_area());
    222 
    223   EXPECT_EQ(setup.effective_margins().left, 8);
    224   EXPECT_EQ(setup.effective_margins().top, 14);
    225   EXPECT_EQ(setup.effective_margins().right, 6);
    226   EXPECT_EQ(setup.effective_margins().bottom, 16);
    227 
    228   // Flip the orientation
    229   setup.FlipOrientation();
    230 
    231   // Expected values.
    232   gfx::Size flipped_page_size(70, 100);
    233   gfx::Rect flipped_printable_area(9, 0, 50, 92);
    234   gfx::Rect flipped_overlay_area(9, 2, 50, 90);
    235   gfx::Rect flipped_content_area(9, 14, 50, 73);
    236 
    237   // Test values.
    238   EXPECT_EQ(flipped_page_size, setup.physical_size());
    239   EXPECT_EQ(flipped_overlay_area, setup.overlay_area());
    240   EXPECT_EQ(flipped_content_area, setup.content_area());
    241   EXPECT_EQ(flipped_printable_area, setup.printable_area());
    242 
    243   // Margin values are updated as per the flipped values.
    244   EXPECT_EQ(setup.effective_margins().left, 9);
    245   EXPECT_EQ(setup.effective_margins().top, 14);
    246   EXPECT_EQ(setup.effective_margins().right, 11);
    247   EXPECT_EQ(setup.effective_margins().bottom, 13);
    248 
    249   // Force requested margins and flip the orientation.
    250   setup.Init(page_size, printable_area, kTextHeight);
    251   setup.ForceRequestedMargins(margins);
    252   EXPECT_EQ(setup.effective_margins().left, 4);
    253   EXPECT_EQ(setup.effective_margins().top, 14);
    254   EXPECT_EQ(setup.effective_margins().right, 6);
    255   EXPECT_EQ(setup.effective_margins().bottom, 7);
    256 
    257   // Flip the orientation
    258   setup.FlipOrientation();
    259 
    260   // Expected values.
    261   gfx::Rect new_printable_area(9, 0, 50, 92);
    262   gfx::Rect new_overlay_area(4, 2, 60, 95);
    263   gfx::Rect new_content_area(4, 14, 60, 79);
    264 
    265   // Test values.
    266   EXPECT_EQ(flipped_page_size, setup.physical_size());
    267   EXPECT_EQ(new_overlay_area, setup.overlay_area());
    268   EXPECT_EQ(new_content_area, setup.content_area());
    269   EXPECT_EQ(new_printable_area, setup.printable_area());
    270 
    271   // Margins values are changed respectively.
    272   EXPECT_EQ(setup.effective_margins().left, 4);
    273   EXPECT_EQ(setup.effective_margins().top, 14);
    274   EXPECT_EQ(setup.effective_margins().right, 6);
    275   EXPECT_EQ(setup.effective_margins().bottom, 7);
    276 }
    277