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