OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 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/pdf_transform.h" |
| 6 |
| 7 #include "printing/units.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 #include "ui/gfx/geometry/rect.h" |
| 10 |
| 11 namespace printing { |
| 12 |
| 13 namespace { |
| 14 |
| 15 const float kDefaultWidth = 8.5 * kPointsPerInch; |
| 16 const float kDefaultHeight = 11.0 * kPointsPerInch; |
| 17 const float kDefaultRatio = kDefaultWidth / kDefaultHeight; |
| 18 const float kTolerance = 0.0001; |
| 19 |
| 20 void ExpectDefaultPortraitBox(const ClipBox& box) { |
| 21 EXPECT_FLOAT_EQ(0, box.left); |
| 22 EXPECT_FLOAT_EQ(kDefaultWidth, box.right); |
| 23 EXPECT_FLOAT_EQ(kDefaultHeight, box.top); |
| 24 EXPECT_FLOAT_EQ(0, box.bottom); |
| 25 } |
| 26 |
| 27 void ExpectDefaultLandscapeBox(const ClipBox& box) { |
| 28 EXPECT_FLOAT_EQ(0, box.left); |
| 29 EXPECT_FLOAT_EQ(kDefaultHeight, box.right); |
| 30 EXPECT_FLOAT_EQ(kDefaultWidth, box.top); |
| 31 EXPECT_FLOAT_EQ(0, box.bottom); |
| 32 } |
| 33 |
| 34 void InitializeBoxToInvalidValues(ClipBox* box) { |
| 35 box->left = box->right = box->top = box->bottom = -1; |
| 36 } |
| 37 |
| 38 void InitializeBoxToDefaultPortraitValues(ClipBox* box) { |
| 39 box->left = 0; |
| 40 box->right = kDefaultWidth; |
| 41 box->top = kDefaultHeight; |
| 42 box->bottom = 0; |
| 43 } |
| 44 |
| 45 void InitializeBoxToDefaultLandscapeValue(ClipBox* box) { |
| 46 box->left = 0; |
| 47 box->right = kDefaultHeight; |
| 48 box->top = kDefaultWidth; |
| 49 box->bottom = 0; |
| 50 } |
| 51 |
| 52 } // namespace |
| 53 |
| 54 TEST(PdfTransformTest, CalculateScaleFactor) { |
| 55 gfx::Rect rect(kDefaultWidth, kDefaultHeight); |
| 56 double scale; |
| 57 |
| 58 // 1:1 |
| 59 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, false); |
| 60 EXPECT_NEAR(1, scale, kTolerance); |
| 61 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, true); |
| 62 EXPECT_NEAR(kDefaultRatio, scale, kTolerance); |
| 63 |
| 64 // 1:2 |
| 65 rect = gfx::Rect(kDefaultWidth / 2, kDefaultHeight / 2); |
| 66 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, false); |
| 67 EXPECT_NEAR(0.5, scale, kTolerance); |
| 68 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, true); |
| 69 EXPECT_NEAR(kDefaultRatio / 2, scale, kTolerance); |
| 70 |
| 71 // 3:1 |
| 72 rect = gfx::Rect(kDefaultWidth * 3, kDefaultHeight * 3); |
| 73 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, false); |
| 74 EXPECT_NEAR(3, scale, kTolerance); |
| 75 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, true); |
| 76 EXPECT_NEAR(kDefaultRatio * 3, scale, kTolerance); |
| 77 |
| 78 // 3:1, rotated. |
| 79 rect = gfx::Rect(kDefaultHeight * 3, kDefaultWidth * 3); |
| 80 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, false); |
| 81 EXPECT_NEAR(kDefaultRatio * 3, scale, kTolerance); |
| 82 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, true); |
| 83 EXPECT_NEAR(3, scale, kTolerance); |
| 84 |
| 85 // Odd size |
| 86 rect = gfx::Rect(10, 1000); |
| 87 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, false); |
| 88 EXPECT_NEAR(0.01634, scale, kTolerance); |
| 89 scale = CalculateScaleFactor(rect, kDefaultWidth, kDefaultHeight, true); |
| 90 EXPECT_NEAR(0.01263, scale, kTolerance); |
| 91 } |
| 92 |
| 93 TEST(PdfTransformTest, SetDefaultClipBox) { |
| 94 ClipBox box; |
| 95 |
| 96 SetDefaultClipBox(false, &box); |
| 97 ExpectDefaultPortraitBox(box); |
| 98 |
| 99 SetDefaultClipBox(true, &box); |
| 100 ExpectDefaultLandscapeBox(box); |
| 101 } |
| 102 |
| 103 TEST(PdfTransformTest, CalculateMediaBoxAndCropBox) { |
| 104 ClipBox media_box; |
| 105 ClipBox crop_box; |
| 106 |
| 107 // Assume both boxes are there. |
| 108 InitializeBoxToDefaultPortraitValues(&media_box); |
| 109 InitializeBoxToDefaultLandscapeValue(&crop_box); |
| 110 CalculateMediaBoxAndCropBox(true, true, true, &media_box, &crop_box); |
| 111 ExpectDefaultPortraitBox(media_box); |
| 112 ExpectDefaultLandscapeBox(crop_box); |
| 113 |
| 114 // Assume both boxes are missing. |
| 115 InitializeBoxToInvalidValues(&media_box); |
| 116 InitializeBoxToInvalidValues(&crop_box); |
| 117 CalculateMediaBoxAndCropBox(false, false, false, &media_box, &crop_box); |
| 118 ExpectDefaultPortraitBox(media_box); |
| 119 ExpectDefaultPortraitBox(crop_box); |
| 120 CalculateMediaBoxAndCropBox(true, false, false, &media_box, &crop_box); |
| 121 ExpectDefaultLandscapeBox(media_box); |
| 122 ExpectDefaultLandscapeBox(crop_box); |
| 123 |
| 124 // Assume crop box is missing. |
| 125 InitializeBoxToInvalidValues(&crop_box); |
| 126 CalculateMediaBoxAndCropBox(false, true, false, &media_box, &crop_box); |
| 127 ExpectDefaultLandscapeBox(media_box); |
| 128 ExpectDefaultLandscapeBox(crop_box); |
| 129 |
| 130 // Assume media box is missing. |
| 131 InitializeBoxToInvalidValues(&media_box); |
| 132 CalculateMediaBoxAndCropBox(false, false, true, &media_box, &crop_box); |
| 133 ExpectDefaultLandscapeBox(media_box); |
| 134 ExpectDefaultLandscapeBox(crop_box); |
| 135 } |
| 136 |
| 137 TEST(PdfTransformTest, CalculateClipBoxBoundary) { |
| 138 ClipBox media_box; |
| 139 ClipBox crop_box; |
| 140 ClipBox result; |
| 141 |
| 142 // media box and crop box are the same. |
| 143 InitializeBoxToDefaultPortraitValues(&media_box); |
| 144 InitializeBoxToDefaultPortraitValues(&crop_box); |
| 145 result = CalculateClipBoxBoundary(media_box, crop_box); |
| 146 ExpectDefaultPortraitBox(result); |
| 147 |
| 148 // media box is portrait and crop box is landscape. |
| 149 InitializeBoxToDefaultLandscapeValue(&crop_box); |
| 150 result = CalculateClipBoxBoundary(media_box, crop_box); |
| 151 EXPECT_FLOAT_EQ(0, result.left); |
| 152 EXPECT_FLOAT_EQ(kDefaultWidth, result.right); |
| 153 EXPECT_FLOAT_EQ(kDefaultWidth, result.top); |
| 154 EXPECT_FLOAT_EQ(0, result.bottom); |
| 155 |
| 156 // crop box is smaller than media box. |
| 157 crop_box.left = 0; |
| 158 crop_box.right = 100; |
| 159 crop_box.bottom = 0; |
| 160 crop_box.top = 200; |
| 161 result = CalculateClipBoxBoundary(media_box, crop_box); |
| 162 EXPECT_FLOAT_EQ(0, result.left); |
| 163 EXPECT_FLOAT_EQ(100, result.right); |
| 164 EXPECT_FLOAT_EQ(200, result.top); |
| 165 EXPECT_FLOAT_EQ(0, result.bottom); |
| 166 |
| 167 // crop box is smaller than the media box in one dimension and longer in the |
| 168 // other. |
| 169 crop_box.left = 0; |
| 170 crop_box.right = 100; |
| 171 crop_box.bottom = 0; |
| 172 crop_box.top = 2000; |
| 173 result = CalculateClipBoxBoundary(media_box, crop_box); |
| 174 EXPECT_FLOAT_EQ(0, result.left); |
| 175 EXPECT_FLOAT_EQ(100, result.right); |
| 176 EXPECT_FLOAT_EQ(kDefaultHeight, result.top); |
| 177 EXPECT_FLOAT_EQ(0, result.bottom); |
| 178 } |
| 179 |
| 180 TEST(PdfTransformTest, CalculateScaledClipBoxOffset) { |
| 181 gfx::Rect rect(kDefaultWidth, kDefaultHeight); |
| 182 ClipBox clip_box; |
| 183 double offset_x; |
| 184 double offset_y; |
| 185 |
| 186 // |rect| and |clip_box| are the same size. |
| 187 InitializeBoxToDefaultPortraitValues(&clip_box); |
| 188 CalculateScaledClipBoxOffset(rect, clip_box, &offset_x, &offset_y); |
| 189 EXPECT_DOUBLE_EQ(0, offset_x); |
| 190 EXPECT_DOUBLE_EQ(0, offset_y); |
| 191 |
| 192 // |rect| is larger than |clip_box|. |
| 193 clip_box.top /= 2; |
| 194 clip_box.right /= 4; |
| 195 CalculateScaledClipBoxOffset(rect, clip_box, &offset_x, &offset_y); |
| 196 EXPECT_DOUBLE_EQ(229.5, offset_x); |
| 197 EXPECT_DOUBLE_EQ(198, offset_y); |
| 198 } |
| 199 |
| 200 TEST(PdfTransformTest, CalculateNonScaledClipBoxOffset) { |
| 201 int page_width = kDefaultWidth; |
| 202 int page_height = kDefaultHeight; |
| 203 gfx::Rect rect(kDefaultWidth, kDefaultHeight); |
| 204 ClipBox clip_box; |
| 205 double offset_x; |
| 206 double offset_y; |
| 207 |
| 208 // |rect|, page size and |clip_box| are the same. |
| 209 InitializeBoxToDefaultPortraitValues(&clip_box); |
| 210 CalculateNonScaledClipBoxOffset( |
| 211 rect, 0, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 212 EXPECT_DOUBLE_EQ(0, offset_x); |
| 213 EXPECT_DOUBLE_EQ(0, offset_y); |
| 214 CalculateNonScaledClipBoxOffset( |
| 215 rect, 1, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 216 EXPECT_DOUBLE_EQ(0, offset_x); |
| 217 EXPECT_DOUBLE_EQ(0, offset_y); |
| 218 CalculateNonScaledClipBoxOffset( |
| 219 rect, 2, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 220 EXPECT_DOUBLE_EQ(0, offset_x); |
| 221 EXPECT_DOUBLE_EQ(0, offset_y); |
| 222 CalculateNonScaledClipBoxOffset( |
| 223 rect, 3, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 224 EXPECT_DOUBLE_EQ(180, offset_x); |
| 225 EXPECT_DOUBLE_EQ(-180, offset_y); |
| 226 |
| 227 // Smaller |clip_box|. |
| 228 clip_box.top /= 4; |
| 229 clip_box.right /= 2; |
| 230 CalculateNonScaledClipBoxOffset( |
| 231 rect, 0, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 232 EXPECT_DOUBLE_EQ(0, offset_x); |
| 233 EXPECT_DOUBLE_EQ(594, offset_y); |
| 234 CalculateNonScaledClipBoxOffset( |
| 235 rect, 1, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 236 EXPECT_DOUBLE_EQ(0, offset_x); |
| 237 EXPECT_DOUBLE_EQ(0, offset_y); |
| 238 CalculateNonScaledClipBoxOffset( |
| 239 rect, 2, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 240 EXPECT_DOUBLE_EQ(306, offset_x); |
| 241 EXPECT_DOUBLE_EQ(0, offset_y); |
| 242 CalculateNonScaledClipBoxOffset( |
| 243 rect, 3, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 244 EXPECT_DOUBLE_EQ(486, offset_x); |
| 245 EXPECT_DOUBLE_EQ(414, offset_y); |
| 246 |
| 247 // Larger page size. |
| 248 InitializeBoxToDefaultPortraitValues(&clip_box); |
| 249 page_width += 10; |
| 250 page_height += 20; |
| 251 CalculateNonScaledClipBoxOffset( |
| 252 rect, 0, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 253 EXPECT_DOUBLE_EQ(0, offset_x); |
| 254 EXPECT_DOUBLE_EQ(20, offset_y); |
| 255 CalculateNonScaledClipBoxOffset( |
| 256 rect, 1, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 257 EXPECT_DOUBLE_EQ(0, offset_x); |
| 258 EXPECT_DOUBLE_EQ(0, offset_y); |
| 259 CalculateNonScaledClipBoxOffset( |
| 260 rect, 2, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 261 EXPECT_DOUBLE_EQ(10, offset_x); |
| 262 EXPECT_DOUBLE_EQ(0, offset_y); |
| 263 CalculateNonScaledClipBoxOffset( |
| 264 rect, 3, page_width, page_height, clip_box, &offset_x, &offset_y); |
| 265 EXPECT_DOUBLE_EQ(200, offset_x); |
| 266 EXPECT_DOUBLE_EQ(-170, offset_y); |
| 267 } |
| 268 |
| 269 } // namespace printing |
OLD | NEW |