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 var tests = [ | 5 var tests = [ |
6 function testDocumentNeedsScrollbars() { | 6 function testDocumentNeedsScrollbars() { |
7 var viewport = | 7 var viewport = |
8 new Viewport(new MockWindow(100, 100), new MockSizer(), function() {}, | 8 new Viewport(new MockWindow(100, 100), new MockSizer(), function() {}, |
9 function() {}, function() {}, 10, 1); | 9 function() {}, function() {}, 10, 1, 0); |
10 var scrollbars; | 10 var scrollbars; |
11 | 11 |
12 viewport.setDocumentDimensions(new MockDocumentDimensions(90, 90)); | 12 viewport.setDocumentDimensions(new MockDocumentDimensions(90, 90)); |
13 scrollbars = viewport.documentNeedsScrollbars_(1); | 13 scrollbars = viewport.documentNeedsScrollbars_(1); |
14 chrome.test.assertFalse(scrollbars.vertical); | 14 chrome.test.assertFalse(scrollbars.vertical); |
15 chrome.test.assertFalse(scrollbars.horizontal); | 15 chrome.test.assertFalse(scrollbars.horizontal); |
16 | 16 |
17 viewport.setDocumentDimensions(new MockDocumentDimensions(100, 100)); | 17 viewport.setDocumentDimensions(new MockDocumentDimensions(100, 100)); |
18 scrollbars = viewport.documentNeedsScrollbars_(1); | 18 scrollbars = viewport.documentNeedsScrollbars_(1); |
19 chrome.test.assertFalse(scrollbars.vertical); | 19 chrome.test.assertFalse(scrollbars.vertical); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 chrome.test.assertTrue(scrollbars.vertical); | 54 chrome.test.assertTrue(scrollbars.vertical); |
55 chrome.test.assertFalse(scrollbars.horizontal); | 55 chrome.test.assertFalse(scrollbars.horizontal); |
56 chrome.test.succeed(); | 56 chrome.test.succeed(); |
57 }, | 57 }, |
58 | 58 |
59 function testSetZoom() { | 59 function testSetZoom() { |
60 var mockSizer = new MockSizer(); | 60 var mockSizer = new MockSizer(); |
61 var mockWindow = new MockWindow(100, 100, mockSizer); | 61 var mockWindow = new MockWindow(100, 100, mockSizer); |
62 var mockCallback = new MockViewportChangedCallback(); | 62 var mockCallback = new MockViewportChangedCallback(); |
63 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 63 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
64 function() {}, function() {}, 0, 1); | 64 function() {}, function() {}, 0, 1, 0); |
65 | 65 |
66 // Test setting the zoom without the document dimensions set. The sizer | 66 // Test setting the zoom without the document dimensions set. The sizer |
67 // shouldn't change size. | 67 // shouldn't change size. |
68 mockCallback.reset(); | 68 mockCallback.reset(); |
69 viewport.setZoom(0.5); | 69 viewport.setZoom(0.5); |
70 chrome.test.assertEq(0.5, viewport.zoom); | 70 chrome.test.assertEq(0.5, viewport.zoom); |
71 chrome.test.assertTrue(mockCallback.wasCalled); | 71 chrome.test.assertTrue(mockCallback.wasCalled); |
72 chrome.test.assertEq('0px', mockSizer.style.width); | 72 chrome.test.assertEq('0px', mockSizer.style.width); |
73 chrome.test.assertEq('0px', mockSizer.style.height); | 73 chrome.test.assertEq('0px', mockSizer.style.height); |
74 chrome.test.assertEq(0, mockWindow.pageXOffset); | 74 chrome.test.assertEq(0, mockWindow.pageXOffset); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 chrome.test.assertEq('200px', mockSizer.style.height); | 129 chrome.test.assertEq('200px', mockSizer.style.height); |
130 chrome.test.assertEq(0, mockWindow.pageXOffset); | 130 chrome.test.assertEq(0, mockWindow.pageXOffset); |
131 chrome.test.assertEq(0, mockWindow.pageYOffset); | 131 chrome.test.assertEq(0, mockWindow.pageYOffset); |
132 | 132 |
133 chrome.test.succeed(); | 133 chrome.test.succeed(); |
134 }, | 134 }, |
135 | 135 |
136 function testGetMostVisiblePage() { | 136 function testGetMostVisiblePage() { |
137 var mockWindow = new MockWindow(100, 100); | 137 var mockWindow = new MockWindow(100, 100); |
138 var viewport = new Viewport(mockWindow, new MockSizer(), function() {}, | 138 var viewport = new Viewport(mockWindow, new MockSizer(), function() {}, |
139 function() {}, function() {}, 0, 1); | 139 function() {}, function() {}, 0, 1, 0); |
140 | 140 |
141 var documentDimensions = new MockDocumentDimensions(100, 100); | 141 var documentDimensions = new MockDocumentDimensions(100, 100); |
142 documentDimensions.addPage(50, 100); | 142 documentDimensions.addPage(50, 100); |
143 documentDimensions.addPage(100, 100); | 143 documentDimensions.addPage(100, 100); |
144 documentDimensions.addPage(100, 200); | 144 documentDimensions.addPage(100, 200); |
145 viewport.setDocumentDimensions(documentDimensions); | 145 viewport.setDocumentDimensions(documentDimensions); |
146 viewport.setZoom(1); | 146 viewport.setZoom(1); |
147 | 147 |
148 // Scrolled to the start of the first page. | 148 // Scrolled to the start of the first page. |
149 mockWindow.scrollTo(0, 0); | 149 mockWindow.scrollTo(0, 0); |
(...skipping 29 matching lines...) Expand all Loading... |
179 mockWindow.scrollTo(0, 0); | 179 mockWindow.scrollTo(0, 0); |
180 chrome.test.assertEq(0, viewport.getMostVisiblePage()); | 180 chrome.test.assertEq(0, viewport.getMostVisiblePage()); |
181 chrome.test.succeed(); | 181 chrome.test.succeed(); |
182 }, | 182 }, |
183 | 183 |
184 function testFitToWidth() { | 184 function testFitToWidth() { |
185 var mockWindow = new MockWindow(100, 100); | 185 var mockWindow = new MockWindow(100, 100); |
186 var mockSizer = new MockSizer(); | 186 var mockSizer = new MockSizer(); |
187 var mockCallback = new MockViewportChangedCallback(); | 187 var mockCallback = new MockViewportChangedCallback(); |
188 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 188 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
189 function() {}, function() {}, 0, 1); | 189 function() {}, function() {}, 0, 1, 0); |
190 var documentDimensions = new MockDocumentDimensions(); | 190 var documentDimensions = new MockDocumentDimensions(); |
191 | 191 |
192 // Test with a document width which matches the window width. | 192 // Test with a document width which matches the window width. |
193 documentDimensions.addPage(100, 100); | 193 documentDimensions.addPage(100, 100); |
194 viewport.setDocumentDimensions(documentDimensions); | 194 viewport.setDocumentDimensions(documentDimensions); |
195 viewport.setZoom(0.1); | 195 viewport.setZoom(0.1); |
196 mockCallback.reset(); | 196 mockCallback.reset(); |
197 viewport.fitToWidth(); | 197 viewport.fitToWidth(); |
198 chrome.test.assertEq(Viewport.FittingType.FIT_TO_WIDTH, | 198 chrome.test.assertEq(Viewport.FittingType.FIT_TO_WIDTH, |
199 viewport.fittingType); | 199 viewport.fittingType); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 viewport.fittingType); | 238 viewport.fittingType); |
239 chrome.test.assertTrue(mockCallback.wasCalled); | 239 chrome.test.assertTrue(mockCallback.wasCalled); |
240 chrome.test.assertEq(2, viewport.zoom); | 240 chrome.test.assertEq(2, viewport.zoom); |
241 chrome.test.assertEq(0, viewport.position.x); | 241 chrome.test.assertEq(0, viewport.position.x); |
242 chrome.test.assertEq(200, viewport.position.y); | 242 chrome.test.assertEq(200, viewport.position.y); |
243 | 243 |
244 // Test fitting works with scrollbars. The page will need to be zoomed to | 244 // Test fitting works with scrollbars. The page will need to be zoomed to |
245 // fit to width, which will cause the page height to span outside of the | 245 // fit to width, which will cause the page height to span outside of the |
246 // viewport, triggering 15px scrollbars to be shown. | 246 // viewport, triggering 15px scrollbars to be shown. |
247 viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 247 viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
248 function() {}, function() {}, 15, 1); | 248 function() {}, function() {}, 15, 1, 0); |
249 documentDimensions.reset(); | 249 documentDimensions.reset(); |
250 documentDimensions.addPage(50, 100); | 250 documentDimensions.addPage(50, 100); |
251 viewport.setDocumentDimensions(documentDimensions); | 251 viewport.setDocumentDimensions(documentDimensions); |
252 mockCallback.reset(); | 252 mockCallback.reset(); |
253 viewport.fitToWidth(); | 253 viewport.fitToWidth(); |
254 chrome.test.assertEq(Viewport.FittingType.FIT_TO_WIDTH, | 254 chrome.test.assertEq(Viewport.FittingType.FIT_TO_WIDTH, |
255 viewport.fittingType); | 255 viewport.fittingType); |
256 chrome.test.assertTrue(mockCallback.wasCalled); | 256 chrome.test.assertTrue(mockCallback.wasCalled); |
257 chrome.test.assertEq('85px', mockSizer.style.width); | 257 chrome.test.assertEq('85px', mockSizer.style.width); |
258 chrome.test.assertEq(1.7, viewport.zoom); | 258 chrome.test.assertEq(1.7, viewport.zoom); |
259 chrome.test.succeed(); | 259 chrome.test.succeed(); |
260 }, | 260 }, |
261 | 261 |
262 function testFitToPage() { | 262 function testFitToPage() { |
263 var mockWindow = new MockWindow(100, 100); | 263 var mockWindow = new MockWindow(100, 100); |
264 var mockSizer = new MockSizer(); | 264 var mockSizer = new MockSizer(); |
265 var mockCallback = new MockViewportChangedCallback(); | 265 var mockCallback = new MockViewportChangedCallback(); |
266 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 266 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
267 function() {}, function() {}, 0, 1); | 267 function() {}, function() {}, 0, 1, 0); |
268 var documentDimensions = new MockDocumentDimensions(); | 268 var documentDimensions = new MockDocumentDimensions(); |
269 | 269 |
270 // Test with a page size which matches the window size. | 270 // Test with a page size which matches the window size. |
271 documentDimensions.addPage(100, 100); | 271 documentDimensions.addPage(100, 100); |
272 viewport.setDocumentDimensions(documentDimensions); | 272 viewport.setDocumentDimensions(documentDimensions); |
273 viewport.setZoom(0.1); | 273 viewport.setZoom(0.1); |
274 mockCallback.reset(); | 274 mockCallback.reset(); |
275 viewport.fitToPage(); | 275 viewport.fitToPage(); |
276 chrome.test.assertEq(Viewport.FittingType.FIT_TO_PAGE, | 276 chrome.test.assertEq(Viewport.FittingType.FIT_TO_PAGE, |
277 viewport.fittingType); | 277 viewport.fittingType); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 chrome.test.assertEq(5, viewport.position.y); | 366 chrome.test.assertEq(5, viewport.position.y); |
367 | 367 |
368 chrome.test.succeed(); | 368 chrome.test.succeed(); |
369 }, | 369 }, |
370 | 370 |
371 function testGoToPage() { | 371 function testGoToPage() { |
372 var mockWindow = new MockWindow(100, 100); | 372 var mockWindow = new MockWindow(100, 100); |
373 var mockSizer = new MockSizer(); | 373 var mockSizer = new MockSizer(); |
374 var mockCallback = new MockViewportChangedCallback(); | 374 var mockCallback = new MockViewportChangedCallback(); |
375 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 375 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
376 function() {}, function() {}, 0, 1); | 376 function() {}, function() {}, 0, 1, 0); |
377 var documentDimensions = new MockDocumentDimensions(); | 377 var documentDimensions = new MockDocumentDimensions(); |
378 | 378 |
379 documentDimensions.addPage(100, 100); | 379 documentDimensions.addPage(100, 100); |
380 documentDimensions.addPage(200, 200); | 380 documentDimensions.addPage(200, 200); |
381 documentDimensions.addPage(100, 400); | 381 documentDimensions.addPage(100, 400); |
382 viewport.setDocumentDimensions(documentDimensions); | 382 viewport.setDocumentDimensions(documentDimensions); |
383 viewport.setZoom(1); | 383 viewport.setZoom(1); |
384 | 384 |
385 mockCallback.reset(); | 385 mockCallback.reset(); |
386 viewport.goToPage(0); | 386 viewport.goToPage(0); |
(...skipping 20 matching lines...) Expand all Loading... |
407 chrome.test.assertEq(0, viewport.position.x); | 407 chrome.test.assertEq(0, viewport.position.x); |
408 chrome.test.assertEq(150, viewport.position.y); | 408 chrome.test.assertEq(150, viewport.position.y); |
409 chrome.test.succeed(); | 409 chrome.test.succeed(); |
410 }, | 410 }, |
411 | 411 |
412 function testGetPageScreenRect() { | 412 function testGetPageScreenRect() { |
413 var mockWindow = new MockWindow(100, 100); | 413 var mockWindow = new MockWindow(100, 100); |
414 var mockSizer = new MockSizer(); | 414 var mockSizer = new MockSizer(); |
415 var mockCallback = new MockViewportChangedCallback(); | 415 var mockCallback = new MockViewportChangedCallback(); |
416 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, | 416 var viewport = new Viewport(mockWindow, mockSizer, mockCallback.callback, |
417 function() {}, function() {}, 0, 1); | 417 function() {}, function() {}, 0, 1, 0); |
418 var documentDimensions = new MockDocumentDimensions(); | 418 var documentDimensions = new MockDocumentDimensions(); |
419 documentDimensions.addPage(100, 100); | 419 documentDimensions.addPage(100, 100); |
420 documentDimensions.addPage(200, 200); | 420 documentDimensions.addPage(200, 200); |
421 viewport.setDocumentDimensions(documentDimensions); | 421 viewport.setDocumentDimensions(documentDimensions); |
422 viewport.setZoom(1); | 422 viewport.setZoom(1); |
423 | 423 |
424 // Test that the rect of the first page is positioned/sized correctly. | 424 // Test that the rect of the first page is positioned/sized correctly. |
425 mockWindow.scrollTo(0, 0); | 425 mockWindow.scrollTo(0, 0); |
426 var rect1 = viewport.getPageScreenRect(0); | 426 var rect1 = viewport.getPageScreenRect(0); |
427 chrome.test.assertEq(Viewport.PAGE_SHADOW.left + 100 / 2, rect1.x); | 427 chrome.test.assertEq(Viewport.PAGE_SHADOW.left + 100 / 2, rect1.x); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 afterZoomCalled = true; | 462 afterZoomCalled = true; |
463 chrome.test.assertTrue(beforeZoomCalled); | 463 chrome.test.assertTrue(beforeZoomCalled); |
464 chrome.test.assertEq(0.5, viewport.zoom); | 464 chrome.test.assertEq(0.5, viewport.zoom); |
465 }; | 465 }; |
466 var beforeZoom = function() { | 466 var beforeZoom = function() { |
467 beforeZoomCalled = true; | 467 beforeZoomCalled = true; |
468 chrome.test.assertFalse(afterZoomCalled); | 468 chrome.test.assertFalse(afterZoomCalled); |
469 chrome.test.assertEq(1, viewport.zoom); | 469 chrome.test.assertEq(1, viewport.zoom); |
470 }; | 470 }; |
471 viewport = new Viewport(mockWindow, mockSizer, function() {}, | 471 viewport = new Viewport(mockWindow, mockSizer, function() {}, |
472 beforeZoom, afterZoom, 0, 1); | 472 beforeZoom, afterZoom, 0, 1, 0); |
473 viewport.setZoom(0.5); | 473 viewport.setZoom(0.5); |
474 chrome.test.succeed(); | 474 chrome.test.succeed(); |
475 }, | 475 }, |
476 | 476 |
477 function testInitialSetDocumentDimensionsZoomConstrained() { | 477 function testInitialSetDocumentDimensionsZoomConstrained() { |
478 var viewport = | 478 var viewport = |
479 new Viewport(new MockWindow(100, 100), new MockSizer(), function() {}, | 479 new Viewport(new MockWindow(100, 100), new MockSizer(), function() {}, |
480 function() {}, function() {}, 0, 1.2); | 480 function() {}, function() {}, 0, 1.2, 0); |
481 viewport.setDocumentDimensions(new MockDocumentDimensions(50, 50)); | 481 viewport.setDocumentDimensions(new MockDocumentDimensions(50, 50)); |
482 chrome.test.assertEq(1.2, viewport.zoom); | 482 chrome.test.assertEq(1.2, viewport.zoom); |
483 chrome.test.succeed(); | 483 chrome.test.succeed(); |
484 }, | 484 }, |
485 | 485 |
486 function testInitialSetDocumentDimensionsZoomUnconstrained() { | 486 function testInitialSetDocumentDimensionsZoomUnconstrained() { |
487 var viewport = new Viewport( | 487 var viewport = new Viewport( |
488 new MockWindow(100, 100), | 488 new MockWindow(100, 100), |
489 new MockSizer(), function() {}, function() {}, function() {}, 0, 3); | 489 new MockSizer(), function() {}, function() {}, function() {}, 0, 3, 0); |
490 viewport.setDocumentDimensions(new MockDocumentDimensions(50, 50)); | 490 viewport.setDocumentDimensions(new MockDocumentDimensions(50, 50)); |
491 chrome.test.assertEq(2, viewport.zoom); | 491 chrome.test.assertEq(2, viewport.zoom); |
492 chrome.test.succeed(); | 492 chrome.test.succeed(); |
493 }, | 493 }, |
| 494 |
| 495 function testToolbarHeightOffset() { |
| 496 var mockSizer = new MockSizer(); |
| 497 var mockWindow = new MockWindow(100, 100); |
| 498 var viewport = new Viewport(mockWindow, |
| 499 mockSizer, function() {}, function() {}, function() {}, 0, 1, 50); |
| 500 var documentDimensions = new MockDocumentDimensions(0, 0); |
| 501 documentDimensions.addPage(50, 500); |
| 502 viewport.setDocumentDimensions(documentDimensions); |
| 503 viewport.setZoom(1); |
| 504 |
| 505 // Check that the sizer incorporates the toolbar height. |
| 506 chrome.test.assertEq('550px', mockSizer.style.height); |
| 507 chrome.test.assertEq('50px', mockSizer.style.width); |
| 508 chrome.test.assertEq(0, viewport.position.x); |
| 509 |
| 510 // Check the sizer incorporates the toolbar height correctly even if zoomed. |
| 511 viewport.setZoom(2); |
| 512 chrome.test.assertEq('1050px', mockSizer.style.height); |
| 513 chrome.test.assertEq('100px', mockSizer.style.width); |
| 514 |
| 515 // Test that the viewport scrolls to the correct offset when fit-to-page is |
| 516 // enabled. The top of the viewport should be at the start of the document. |
| 517 viewport.fitToPage(); |
| 518 chrome.test.assertEq(0, viewport.position.y); |
| 519 |
| 520 // Check that going to a page scrolls to the correct offset when fit-to-page |
| 521 // is enabled. The top of the viewport should be at the start of the |
| 522 // document. |
| 523 mockWindow.scrollTo(0, 100); |
| 524 viewport.goToPage(0); |
| 525 chrome.test.assertEq(0, viewport.position.y); |
| 526 |
| 527 // Check that going to a page scrolls to the correct offset when fit-to-page |
| 528 // is not enabled. The top of the viewport should be before start of the |
| 529 // document. |
| 530 viewport.setZoom(1); |
| 531 viewport.goToPage(0); |
| 532 chrome.test.assertEq(-50, viewport.position.y); |
| 533 chrome.test.succeed(); |
| 534 } |
494 ]; | 535 ]; |
495 | 536 |
496 chrome.test.runTests(tests); | 537 chrome.test.runTests(tests); |
OLD | NEW |