| 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 |