| // Copyright 2011 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include"printing/page_setup.h" |
| |
| #include<stdlib.h> |
| #include<time.h> |
| |
| #include<algorithm> |
| |
| #include"testing/gtest/include/gtest/gtest.h" |
| |
| namespace printing{ |
| |
| TEST(PageSetupTest,Random){ |
| time_t seed= time(NULL); |
| int kMax=10; |
| srand(static_cast<unsigned>(seed)); |
| |
| // Margins. |
| PageMargins margins; |
| margins.header= rand()% kMax; |
| margins.footer= rand()% kMax; |
| margins.left= rand()% kMax; |
| margins.top= rand()% kMax; |
| margins.right= rand()% kMax; |
| margins.bottom= rand()% kMax; |
| int kTextHeight= rand()% kMax; |
| |
| // Page description. |
| gfx::Size page_size(100+ rand()% kMax,200+ rand()% kMax); |
| gfx::Rect printable_area(rand()% kMax, rand()% kMax,0,0); |
| printable_area.set_width(page_size.width()-(rand()% kMax)- |
| printable_area.x()); |
| printable_area.set_height(page_size.height()-(rand()% kMax)- |
| printable_area.y()); |
| |
| // Make the calculations. |
| PageSetup setup; |
| setup.SetRequestedMargins(margins); |
| setup.Init(page_size, printable_area, kTextHeight); |
| |
| // Calculate the effective margins. |
| PageMargins effective_margins; |
| effective_margins.header= std::max(margins.header, printable_area.y()); |
| effective_margins.left= std::max(margins.left, printable_area.x()); |
| effective_margins.top= |
| std::max(margins.top, effective_margins.header+ kTextHeight); |
| effective_margins.footer= |
| std::max(margins.footer, page_size.height()- printable_area.bottom()); |
| effective_margins.right= |
| std::max(margins.right, page_size.width()- printable_area.right()); |
| effective_margins.bottom= |
| std::max(margins.bottom, effective_margins.footer+ kTextHeight); |
| |
| // Calculate the overlay area. |
| gfx::Rect overlay_area( |
| effective_margins.left, effective_margins.header, |
| page_size.width()- effective_margins.right- effective_margins.left, |
| page_size.height()- effective_margins.footer- effective_margins.header); |
| |
| // Calculate the content area. |
| gfx::Rect content_area( |
| overlay_area.x(), effective_margins.top, overlay_area.width(), |
| page_size.height()- effective_margins.bottom- effective_margins.top); |
| |
| // Test values. |
| EXPECT_EQ(page_size, setup.physical_size()) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| EXPECT_EQ(overlay_area, setup.overlay_area()) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| EXPECT_EQ(content_area, setup.content_area()) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| |
| EXPECT_EQ(effective_margins.header, setup.effective_margins().header) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| EXPECT_EQ(effective_margins.footer, setup.effective_margins().footer) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| EXPECT_EQ(effective_margins.left, setup.effective_margins().left) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| EXPECT_EQ(effective_margins.top, setup.effective_margins().top) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| EXPECT_EQ(effective_margins.right, setup.effective_margins().right) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| EXPECT_EQ(effective_margins.bottom, setup.effective_margins().bottom) |
| << seed<<" "<< page_size.ToString()<<" "<< printable_area.ToString() |
| <<" "<< kTextHeight; |
| } |
| |
| TEST(PageSetupTest,HardCoded){ |
| // Margins. |
| PageMargins margins; |
| margins.header=2; |
| margins.footer=2; |
| margins.left=4; |
| margins.top=4; |
| margins.right=4; |
| margins.bottom=4; |
| int kTextHeight=3; |
| |
| // Page description. |
| gfx::Size page_size(100,100); |
| gfx::Rect printable_area(3,3,94,94); |
| |
| // Make the calculations. |
| PageSetup setup; |
| setup.SetRequestedMargins(margins); |
| setup.Init(page_size, printable_area, kTextHeight); |
| |
| // Calculate the effective margins. |
| PageMargins effective_margins; |
| effective_margins.header=3; |
| effective_margins.left=4; |
| effective_margins.top=6; |
| effective_margins.footer=3; |
| effective_margins.right=4; |
| effective_margins.bottom=6; |
| |
| // Calculate the overlay area. |
| gfx::Rect overlay_area(4,3,92,94); |
| |
| // Calculate the content area. |
| gfx::Rect content_area(4,6,92,88); |
| |
| // Test values. |
| EXPECT_EQ(page_size, setup.physical_size()) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| EXPECT_EQ(overlay_area, setup.overlay_area()) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| EXPECT_EQ(content_area, setup.content_area()) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| |
| EXPECT_EQ(effective_margins.header, setup.effective_margins().header) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| EXPECT_EQ(effective_margins.footer, setup.effective_margins().footer) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| EXPECT_EQ(effective_margins.left, setup.effective_margins().left) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| EXPECT_EQ(effective_margins.top, setup.effective_margins().top) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| EXPECT_EQ(effective_margins.right, setup.effective_margins().right) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| EXPECT_EQ(effective_margins.bottom, setup.effective_margins().bottom) |
| <<" "<< page_size.ToString()<<" "<< printable_area.ToString()<<" " |
| << kTextHeight; |
| } |
| |
| TEST(PageSetupTest,OutOfRangeMargins){ |
| PageMargins margins; |
| margins.header=0; |
| margins.footer=0; |
| margins.left=-10; |
| margins.top=-11; |
| margins.right=-12; |
| margins.bottom=-13; |
| |
| gfx::Size page_size(100,100); |
| gfx::Rect printable_area(1,2,96,94); |
| |
| // Make the calculations. |
| PageSetup setup; |
| setup.SetRequestedMargins(margins); |
| setup.Init(page_size, printable_area,0); |
| |
| EXPECT_EQ(setup.effective_margins().left,1); |
| EXPECT_EQ(setup.effective_margins().top,2); |
| EXPECT_EQ(setup.effective_margins().right,3); |
| EXPECT_EQ(setup.effective_margins().bottom,4); |
| |
| setup.ForceRequestedMargins(margins); |
| EXPECT_EQ(setup.effective_margins().left,0); |
| EXPECT_EQ(setup.effective_margins().top,0); |
| EXPECT_EQ(setup.effective_margins().right,0); |
| EXPECT_EQ(setup.effective_margins().bottom,0); |
| } |
| |
| TEST(PageSetupTest,FlipOrientation){ |
| // Margins. |
| PageMargins margins; |
| margins.header=2; |
| margins.footer=3; |
| margins.left=4; |
| margins.top=14; |
| margins.right=6; |
| margins.bottom=7; |
| int kTextHeight=5; |
| |
| // Page description. |
| gfx::Size page_size(100,70); |
| gfx::Rect printable_area(8,9,92,50); |
| |
| // Make the calculations. |
| PageSetup setup; |
| setup.SetRequestedMargins(margins); |
| setup.Init(page_size, printable_area, kTextHeight); |
| |
| gfx::Rect overlay_area(8,9,86,50); |
| gfx::Rect content_area(8,14,86,40); |
| |
| EXPECT_EQ(page_size, setup.physical_size()); |
| EXPECT_EQ(overlay_area, setup.overlay_area()); |
| EXPECT_EQ(content_area, setup.content_area()); |
| |
| EXPECT_EQ(setup.effective_margins().left,8); |
| EXPECT_EQ(setup.effective_margins().top,14); |
| EXPECT_EQ(setup.effective_margins().right,6); |
| EXPECT_EQ(setup.effective_margins().bottom,16); |
| |
| // Flip the orientation |
| setup.FlipOrientation(); |
| |
| // Expected values. |
| gfx::Size flipped_page_size(70,100); |
| gfx::Rect flipped_printable_area(9,0,50,92); |
| gfx::Rect flipped_overlay_area(9,2,50,90); |
| gfx::Rect flipped_content_area(9,14,50,73); |
| |
| // Test values. |
| EXPECT_EQ(flipped_page_size, setup.physical_size()); |
| EXPECT_EQ(flipped_overlay_area, setup.overlay_area()); |
| EXPECT_EQ(flipped_content_area, setup.content_area()); |
| EXPECT_EQ(flipped_printable_area, setup.printable_area()); |
| |
| // Margin values are updated as per the flipped values. |
| EXPECT_EQ(setup.effective_margins().left,9); |
| EXPECT_EQ(setup.effective_margins().top,14); |
| EXPECT_EQ(setup.effective_margins().right,11); |
| EXPECT_EQ(setup.effective_margins().bottom,13); |
| |
| // Force requested margins and flip the orientation. |
| setup.Init(page_size, printable_area, kTextHeight); |
| setup.ForceRequestedMargins(margins); |
| EXPECT_EQ(setup.effective_margins().left,4); |
| EXPECT_EQ(setup.effective_margins().top,14); |
| EXPECT_EQ(setup.effective_margins().right,6); |
| EXPECT_EQ(setup.effective_margins().bottom,7); |
| |
| // Flip the orientation |
| setup.FlipOrientation(); |
| |
| // Expected values. |
| gfx::Rect new_printable_area(9,0,50,92); |
| gfx::Rect new_overlay_area(4,2,60,95); |
| gfx::Rect new_content_area(4,14,60,79); |
| |
| // Test values. |
| EXPECT_EQ(flipped_page_size, setup.physical_size()); |
| EXPECT_EQ(new_overlay_area, setup.overlay_area()); |
| EXPECT_EQ(new_content_area, setup.content_area()); |
| EXPECT_EQ(new_printable_area, setup.printable_area()); |
| |
| // Margins values are changed respectively. |
| EXPECT_EQ(setup.effective_margins().left,4); |
| EXPECT_EQ(setup.effective_margins().top,14); |
| EXPECT_EQ(setup.effective_margins().right,6); |
| EXPECT_EQ(setup.effective_margins().bottom,7); |
| } |
| |
| TEST(PageSetupTest,GetSymmetricalPrintableArea){ |
| gfx::Rect printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(0,0,560,750)); |
| EXPECT_EQ(gfx::Rect(52,42,508,708), printable_area); |
| |
| printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(50,60,550,700)); |
| EXPECT_EQ(gfx::Rect(50,60,512,672), printable_area); |
| |
| printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(-1,60,520,700)); |
| EXPECT_EQ(gfx::Rect(), printable_area); |
| printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(50,-1,520,700)); |
| EXPECT_EQ(gfx::Rect(), printable_area); |
| printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(100,60,520,700)); |
| EXPECT_EQ(gfx::Rect(), printable_area); |
| printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(50,100,520,700)); |
| EXPECT_EQ(gfx::Rect(), printable_area); |
| printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(400,60,212,700)); |
| EXPECT_EQ(gfx::Rect(), printable_area); |
| printable_area=PageSetup::GetSymmetricalPrintableArea( |
| gfx::Size(612,792), gfx::Rect(40,600,212,192)); |
| EXPECT_EQ(gfx::Rect(), printable_area); |
| } |
| |
| }// namespace printing |