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 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); | |
raymes
2015/10/28 02:26:19
nit: perhaps use a non-default size of media box t
Lei Zhang
2015/10/28 05:47:23
Done.
| |
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 |