OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 function MockWindow(width, height, sizer) { | 5 function MockWindow(width, height, sizer) { |
6 this.innerWidth = width; | 6 this.innerWidth = width; |
7 this.innerHeight = height; | 7 this.innerHeight = height; |
8 this.addEventListener = function(e, f) { | 8 this.addEventListener = function(e, f) { |
9 if (e == 'scroll') | 9 if (e == 'scroll') |
10 this.scrollCallback = f; | 10 this.scrollCallback = f; |
11 if (e == 'resize') | 11 if (e == 'resize') |
12 this.resizeCallback = f; | 12 this.resizeCallback = f; |
13 }, | 13 }; |
14 this.scrollTo = function(x, y) { | 14 this.scrollTo = function(x, y) { |
15 if (sizer) { | 15 if (sizer) { |
16 x = Math.min(x, parseInt(sizer.style.width) - width); | 16 x = Math.min(x, parseInt(sizer.style.width) - width); |
17 y = Math.min(y, parseInt(sizer.style.height) - height); | 17 y = Math.min(y, parseInt(sizer.style.height) - height); |
18 } | 18 } |
19 this.pageXOffset = Math.max(0, x); | 19 this.pageXOffset = Math.max(0, x); |
20 this.pageYOffset = Math.max(0, y); | 20 this.pageYOffset = Math.max(0, y); |
21 this.scrollCallback(); | 21 this.scrollCallback(); |
22 }; | 22 }; |
23 if (sizer) { | 23 if (sizer) { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 this.width = 0; | 84 this.width = 0; |
85 this.height = 0; | 85 this.height = 0; |
86 this.pageDimensions = []; | 86 this.pageDimensions = []; |
87 }; | 87 }; |
88 } | 88 } |
89 | 89 |
90 var tests = [ | 90 var tests = [ |
91 function testDocumentNeedsScrollbars() { | 91 function testDocumentNeedsScrollbars() { |
92 var viewport = | 92 var viewport = |
93 new Viewport(new MockWindow(100, 100), new MockSizer(), function() {}, | 93 new Viewport(new MockWindow(100, 100), new MockSizer(), function() {}, |
94 function() {}, function() {}, 10); | 94 function() {}, function() {}, 10, 0); |
95 var scrollbars; | 95 var scrollbars; |
96 | 96 |
97 viewport.setDocumentDimensions(new MockDocumentDimensions(90, 90)); | 97 viewport.setDocumentDimensions(new MockDocumentDimensions(90, 90)); |
98 scrollbars = viewport.documentNeedsScrollbars_(1); | 98 scrollbars = viewport.documentNeedsScrollbars_(1); |
99 chrome.test.assertFalse(scrollbars.vertical); | 99 chrome.test.assertFalse(scrollbars.vertical); |
100 chrome.test.assertFalse(scrollbars.horizontal); | 100 chrome.test.assertFalse(scrollbars.horizontal); |
101 | 101 |
102 viewport.setDocumentDimensions(new MockDocumentDimensions(100, 100)); | 102 viewport.setDocumentDimensions(new MockDocumentDimensions(100, 100)); |
103 scrollbars = viewport.documentNeedsScrollbars_(1); | 103 scrollbars = viewport.documentNeedsScrollbars_(1); |
104 chrome.test.assertFalse(scrollbars.vertical); | 104 chrome.test.assertFalse(scrollbars.vertical); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 chrome.test.assertTrue(scrollbars.vertical); | 139 chrome.test.assertTrue(scrollbars.vertical); |
140 chrome.test.assertFalse(scrollbars.horizontal); | 140 chrome.test.assertFalse(scrollbars.horizontal); |
141 chrome.test.succeed(); | 141 chrome.test.succeed(); |
142 }, | 142 }, |
143 | 143 |
144 function testSetZoom() { | 144 function testSetZoom() { |
145 var mockSizer = new MockSizer(); | 145 var mockSizer = new MockSizer(); |
146 var mockWindow = new MockWindow(100, 100, mockSizer); | 146 var mockWindow = new MockWindow(100, 100, mockSizer); |
147 var mockCallback = new MockViewportChangedCallback(); | 147 var mockCallback = new MockViewportChangedCallback(); |
148 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 148 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
149 function() {}, function() {}, 0); | 149 function() {}, function() {}, 0, 0); |
150 | 150 |
151 // Test setting the zoom without the document dimensions set. The sizer | 151 // Test setting the zoom without the document dimensions set. The sizer |
152 // shouldn't change size. | 152 // shouldn't change size. |
153 mockCallback.reset(); | 153 mockCallback.reset(); |
154 viewport.setZoom(0.5); | 154 viewport.setZoom(0.5); |
155 chrome.test.assertEq(0.5, viewport.zoom); | 155 chrome.test.assertEq(0.5, viewport.zoom); |
156 chrome.test.assertTrue(mockCallback.wasCalled); | 156 chrome.test.assertTrue(mockCallback.wasCalled); |
157 chrome.test.assertEq('0px', mockSizer.style.width); | 157 chrome.test.assertEq('0px', mockSizer.style.width); |
158 chrome.test.assertEq('0px', mockSizer.style.height); | 158 chrome.test.assertEq('0px', mockSizer.style.height); |
159 chrome.test.assertEq(0, mockWindow.pageXOffset); | 159 chrome.test.assertEq(0, mockWindow.pageXOffset); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 chrome.test.assertEq('200px', mockSizer.style.width); | 193 chrome.test.assertEq('200px', mockSizer.style.width); |
194 chrome.test.assertEq('200px', mockSizer.style.height); | 194 chrome.test.assertEq('200px', mockSizer.style.height); |
195 chrome.test.assertEq(100, mockWindow.pageXOffset); | 195 chrome.test.assertEq(100, mockWindow.pageXOffset); |
196 chrome.test.assertEq(100, mockWindow.pageYOffset); | 196 chrome.test.assertEq(100, mockWindow.pageYOffset); |
197 chrome.test.succeed(); | 197 chrome.test.succeed(); |
198 }, | 198 }, |
199 | 199 |
200 function testGetMostVisiblePage() { | 200 function testGetMostVisiblePage() { |
201 var mockWindow = new MockWindow(100, 100); | 201 var mockWindow = new MockWindow(100, 100); |
202 var viewport = new Viewport(mockWindow, new MockSizer(), function() {}, | 202 var viewport = new Viewport(mockWindow, new MockSizer(), function() {}, |
203 function() {}, function() {}, 0); | 203 function() {}, function() {}, 0, 0); |
204 | 204 |
205 var documentDimensions = new MockDocumentDimensions(100, 100); | 205 var documentDimensions = new MockDocumentDimensions(100, 100); |
206 documentDimensions.addPage(50, 100); | 206 documentDimensions.addPage(50, 100); |
207 documentDimensions.addPage(100, 100); | 207 documentDimensions.addPage(100, 100); |
208 documentDimensions.addPage(100, 200); | 208 documentDimensions.addPage(100, 200); |
209 viewport.setDocumentDimensions(documentDimensions); | 209 viewport.setDocumentDimensions(documentDimensions); |
210 viewport.setZoom(1); | 210 viewport.setZoom(1); |
211 | 211 |
212 // Scrolled to the start of the first page. | 212 // Scrolled to the start of the first page. |
213 mockWindow.scrollTo(0, 0); | 213 mockWindow.scrollTo(0, 0); |
(...skipping 29 matching lines...) Expand all Loading... |
243 mockWindow.scrollTo(0, 0); | 243 mockWindow.scrollTo(0, 0); |
244 chrome.test.assertEq(0, viewport.getMostVisiblePage()); | 244 chrome.test.assertEq(0, viewport.getMostVisiblePage()); |
245 chrome.test.succeed(); | 245 chrome.test.succeed(); |
246 }, | 246 }, |
247 | 247 |
248 function testFitToWidth() { | 248 function testFitToWidth() { |
249 var mockWindow = new MockWindow(100, 100); | 249 var mockWindow = new MockWindow(100, 100); |
250 var mockSizer = new MockSizer(); | 250 var mockSizer = new MockSizer(); |
251 var mockCallback = new MockViewportChangedCallback(); | 251 var mockCallback = new MockViewportChangedCallback(); |
252 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 252 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
253 function() {}, function() {}, 0); | 253 function() {}, function() {}, 0, 0); |
254 var documentDimensions = new MockDocumentDimensions(); | 254 var documentDimensions = new MockDocumentDimensions(); |
255 | 255 |
256 // Test with a document width which matches the window width. | 256 // Test with a document width which matches the window width. |
257 documentDimensions.addPage(100, 100); | 257 documentDimensions.addPage(100, 100); |
258 viewport.setDocumentDimensions(documentDimensions); | 258 viewport.setDocumentDimensions(documentDimensions); |
259 viewport.setZoom(0.1); | 259 viewport.setZoom(0.1); |
260 mockCallback.reset(); | 260 mockCallback.reset(); |
261 viewport.fitToWidth(); | 261 viewport.fitToWidth(); |
262 chrome.test.assertTrue(mockCallback.wasCalled); | 262 chrome.test.assertTrue(mockCallback.wasCalled); |
263 chrome.test.assertEq('100px', mockSizer.style.width); | 263 chrome.test.assertEq('100px', mockSizer.style.width); |
(...skipping 30 matching lines...) Expand all Loading... |
294 viewport.fitToWidth(); | 294 viewport.fitToWidth(); |
295 chrome.test.assertTrue(mockCallback.wasCalled); | 295 chrome.test.assertTrue(mockCallback.wasCalled); |
296 chrome.test.assertEq(2, viewport.zoom); | 296 chrome.test.assertEq(2, viewport.zoom); |
297 chrome.test.assertEq(0, viewport.position.x); | 297 chrome.test.assertEq(0, viewport.position.x); |
298 chrome.test.assertEq(200, viewport.position.y); | 298 chrome.test.assertEq(200, viewport.position.y); |
299 | 299 |
300 // Test fitting works with scrollbars. The page will need to be zoomed to | 300 // Test fitting works with scrollbars. The page will need to be zoomed to |
301 // fit to width, which will cause the page height to span outside of the | 301 // fit to width, which will cause the page height to span outside of the |
302 // viewport, triggering 15px scrollbars to be shown. | 302 // viewport, triggering 15px scrollbars to be shown. |
303 viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 303 viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
304 function() {}, function() {}, 15); | 304 function() {}, function() {}, 15, 0); |
305 documentDimensions.reset(); | 305 documentDimensions.reset(); |
306 documentDimensions.addPage(50, 100); | 306 documentDimensions.addPage(50, 100); |
307 viewport.setDocumentDimensions(documentDimensions); | 307 viewport.setDocumentDimensions(documentDimensions); |
308 mockCallback.reset(); | 308 mockCallback.reset(); |
309 viewport.fitToWidth(); | 309 viewport.fitToWidth(); |
310 chrome.test.assertTrue(mockCallback.wasCalled); | 310 chrome.test.assertTrue(mockCallback.wasCalled); |
311 chrome.test.assertEq('85px', mockSizer.style.width); | 311 chrome.test.assertEq('85px', mockSizer.style.width); |
312 chrome.test.assertEq(1.7, viewport.zoom); | 312 chrome.test.assertEq(1.7, viewport.zoom); |
313 chrome.test.succeed(); | 313 chrome.test.succeed(); |
314 }, | 314 }, |
315 | 315 |
316 function testFitToPage() { | 316 function testFitToPage() { |
317 var mockWindow = new MockWindow(100, 100); | 317 var mockWindow = new MockWindow(100, 100); |
318 var mockSizer = new MockSizer(); | 318 var mockSizer = new MockSizer(); |
319 var mockCallback = new MockViewportChangedCallback(); | 319 var mockCallback = new MockViewportChangedCallback(); |
320 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 320 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
321 function() {}, function() {}, 0); | 321 function() {}, function() {}, 0, 0); |
322 var documentDimensions = new MockDocumentDimensions(); | 322 var documentDimensions = new MockDocumentDimensions(); |
323 | 323 |
324 // Test with a page size which matches the window size. | 324 // Test with a page size which matches the window size. |
325 documentDimensions.addPage(100, 100); | 325 documentDimensions.addPage(100, 100); |
326 viewport.setDocumentDimensions(documentDimensions); | 326 viewport.setDocumentDimensions(documentDimensions); |
327 viewport.setZoom(0.1); | 327 viewport.setZoom(0.1); |
328 mockCallback.reset(); | 328 mockCallback.reset(); |
329 viewport.fitToPage(); | 329 viewport.fitToPage(); |
330 chrome.test.assertTrue(mockCallback.wasCalled); | 330 chrome.test.assertTrue(mockCallback.wasCalled); |
331 chrome.test.assertEq('100px', mockSizer.style.width); | 331 chrome.test.assertEq('100px', mockSizer.style.width); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 chrome.test.assertEq(0, viewport.position.x); | 395 chrome.test.assertEq(0, viewport.position.x); |
396 chrome.test.assertEq(50, viewport.position.y); | 396 chrome.test.assertEq(50, viewport.position.y); |
397 chrome.test.succeed(); | 397 chrome.test.succeed(); |
398 }, | 398 }, |
399 | 399 |
400 function testGoToPage() { | 400 function testGoToPage() { |
401 var mockWindow = new MockWindow(100, 100); | 401 var mockWindow = new MockWindow(100, 100); |
402 var mockSizer = new MockSizer(); | 402 var mockSizer = new MockSizer(); |
403 var mockCallback = new MockViewportChangedCallback(); | 403 var mockCallback = new MockViewportChangedCallback(); |
404 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 404 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
405 function() {}, function() {}, 0); | 405 function() {}, function() {}, 0, 0); |
406 var documentDimensions = new MockDocumentDimensions(); | 406 var documentDimensions = new MockDocumentDimensions(); |
407 | 407 |
408 documentDimensions.addPage(100, 100); | 408 documentDimensions.addPage(100, 100); |
409 documentDimensions.addPage(200, 200); | 409 documentDimensions.addPage(200, 200); |
410 documentDimensions.addPage(100, 400); | 410 documentDimensions.addPage(100, 400); |
411 viewport.setDocumentDimensions(documentDimensions); | 411 viewport.setDocumentDimensions(documentDimensions); |
412 viewport.setZoom(1); | 412 viewport.setZoom(1); |
413 | 413 |
414 mockCallback.reset(); | 414 mockCallback.reset(); |
415 viewport.goToPage(0); | 415 viewport.goToPage(0); |
(...skipping 20 matching lines...) Expand all Loading... |
436 chrome.test.assertEq(0, viewport.position.x); | 436 chrome.test.assertEq(0, viewport.position.x); |
437 chrome.test.assertEq(150, viewport.position.y); | 437 chrome.test.assertEq(150, viewport.position.y); |
438 chrome.test.succeed(); | 438 chrome.test.succeed(); |
439 }, | 439 }, |
440 | 440 |
441 function testGetPageScreenRect() { | 441 function testGetPageScreenRect() { |
442 var mockWindow = new MockWindow(100, 100); | 442 var mockWindow = new MockWindow(100, 100); |
443 var mockSizer = new MockSizer(); | 443 var mockSizer = new MockSizer(); |
444 var mockCallback = new MockViewportChangedCallback(); | 444 var mockCallback = new MockViewportChangedCallback(); |
445 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 445 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
446 function() {}, function() {}, 0); | 446 function() {}, function() {}, 0, 0); |
447 var documentDimensions = new MockDocumentDimensions(); | 447 var documentDimensions = new MockDocumentDimensions(); |
448 documentDimensions.addPage(100, 100); | 448 documentDimensions.addPage(100, 100); |
449 documentDimensions.addPage(200, 200); | 449 documentDimensions.addPage(200, 200); |
450 viewport.setDocumentDimensions(documentDimensions); | 450 viewport.setDocumentDimensions(documentDimensions); |
451 viewport.setZoom(1); | 451 viewport.setZoom(1); |
452 | 452 |
453 // Test that the rect of the first page is positioned/sized correctly. | 453 // Test that the rect of the first page is positioned/sized correctly. |
454 mockWindow.scrollTo(0, 0); | 454 mockWindow.scrollTo(0, 0); |
455 var rect1 = viewport.getPageScreenRect(0); | 455 var rect1 = viewport.getPageScreenRect(0); |
456 chrome.test.assertEq(Viewport.PAGE_SHADOW.left + 100 / 2, rect1.x); | 456 chrome.test.assertEq(Viewport.PAGE_SHADOW.left + 100 / 2, rect1.x); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 afterZoomCalled = true; | 491 afterZoomCalled = true; |
492 chrome.test.assertTrue(beforeZoomCalled); | 492 chrome.test.assertTrue(beforeZoomCalled); |
493 chrome.test.assertEq(0.5, viewport.zoom); | 493 chrome.test.assertEq(0.5, viewport.zoom); |
494 }; | 494 }; |
495 var beforeZoom = function() { | 495 var beforeZoom = function() { |
496 beforeZoomCalled = true; | 496 beforeZoomCalled = true; |
497 chrome.test.assertFalse(afterZoomCalled); | 497 chrome.test.assertFalse(afterZoomCalled); |
498 chrome.test.assertEq(1, viewport.zoom); | 498 chrome.test.assertEq(1, viewport.zoom); |
499 }; | 499 }; |
500 viewport = new Viewport(mockWindow, mockSizer, function() {}, | 500 viewport = new Viewport(mockWindow, mockSizer, function() {}, |
501 beforeZoom, afterZoom, 0); | 501 beforeZoom, afterZoom, 0, 0); |
502 viewport.setZoom(0.5); | 502 viewport.setZoom(0.5); |
503 chrome.test.succeed(); | 503 chrome.test.succeed(); |
504 } | 504 } |
505 ]; | 505 ]; |
506 | 506 |
507 chrome.test.runTests(tests); | 507 chrome.test.runTests(tests); |
OLD | NEW |