| // Copyright 2012 The Closure Library Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS-IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| /** |
| * @fileoverview Tests for goog.dom.BufferedViewportSizeMonitor. |
| * |
| */ |
| |
| |
| /** @suppress {extraProvide} */ |
| goog.provide('goog.dom.BufferedViewportSizeMonitorTest'); |
| |
| goog.require('goog.dom.BufferedViewportSizeMonitor'); |
| goog.require('goog.dom.ViewportSizeMonitor'); |
| goog.require('goog.events'); |
| goog.require('goog.events.EventType'); |
| goog.require('goog.math.Size'); |
| goog.require('goog.testing.MockClock'); |
| goog.require('goog.testing.events'); |
| goog.require('goog.testing.events.Event'); |
| goog.require('goog.testing.jsunit'); |
| |
| goog.setTestOnly('goog.dom.BufferedViewportSizeMonitorTest'); |
| |
| var RESIZE_DELAY = goog.dom.BufferedViewportSizeMonitor.RESIZE_EVENT_DELAY_MS_; |
| var INITIAL_SIZE = new goog.math.Size(111, 111); |
| |
| var mockControl; |
| var viewportSizeMonitor; |
| var bufferedVsm; |
| var timer = new goog.testing.MockClock(); |
| var resizeEventCount = 0; |
| var size; |
| |
| var resizeCallback = function() { |
| resizeEventCount++; |
| }; |
| |
| function setUp() { |
| timer.install(); |
| |
| size = INITIAL_SIZE; |
| viewportSizeMonitor = new goog.dom.ViewportSizeMonitor(); |
| viewportSizeMonitor.getSize = function() { return size; }; |
| bufferedVsm = new goog.dom.BufferedViewportSizeMonitor(viewportSizeMonitor); |
| |
| goog.events.listen(bufferedVsm, goog.events.EventType.RESIZE, resizeCallback); |
| } |
| |
| function tearDown() { |
| goog.events.unlisten( |
| bufferedVsm, goog.events.EventType.RESIZE, resizeCallback); |
| resizeEventCount = 0; |
| timer.uninstall(); |
| } |
| |
| function testInitialSizes() { |
| assertTrue(goog.math.Size.equals(INITIAL_SIZE, bufferedVsm.getSize())); |
| } |
| |
| function testWindowResize() { |
| assertEquals(0, resizeEventCount); |
| resize(100, 100); |
| timer.tick(RESIZE_DELAY - 1); |
| assertEquals( |
| 'No resize expected before the delay is fired', 0, resizeEventCount); |
| timer.tick(1); |
| assertEquals('Expected resize after delay', 1, resizeEventCount); |
| assertTrue(goog.math.Size.equals( |
| new goog.math.Size(100, 100), bufferedVsm.getSize())); |
| } |
| |
| function testWindowResize_eventBatching() { |
| assertEquals('No resize calls expected before resize events', |
| 0, resizeEventCount); |
| resize(100, 100); |
| timer.tick(RESIZE_DELAY - 1); |
| resize(200, 200); |
| assertEquals( |
| 'No resize expected before the delay is fired', 0, resizeEventCount); |
| timer.tick(1); |
| assertEquals( |
| 'No resize expected when delay is restarted', 0, resizeEventCount); |
| timer.tick(RESIZE_DELAY); |
| assertEquals('Expected resize after delay', 1, resizeEventCount); |
| } |
| |
| function testWindowResize_noChange() { |
| resize(100, 100); |
| timer.tick(RESIZE_DELAY); |
| assertEquals(1, resizeEventCount); |
| resize(100, 100); |
| timer.tick(RESIZE_DELAY); |
| assertEquals( |
| 'No resize expected when size doesn\'t change', 1, resizeEventCount); |
| assertTrue(goog.math.Size.equals( |
| new goog.math.Size(100, 100), bufferedVsm.getSize())); |
| } |
| |
| function testWindowResize_previousSize() { |
| resize(100, 100); |
| timer.tick(RESIZE_DELAY); |
| assertEquals(1, resizeEventCount); |
| assertTrue(goog.math.Size.equals( |
| new goog.math.Size(100, 100), bufferedVsm.getSize())); |
| |
| resize(200, 200); |
| timer.tick(RESIZE_DELAY); |
| assertEquals(2, resizeEventCount); |
| assertTrue(goog.math.Size.equals( |
| new goog.math.Size(200, 200), bufferedVsm.getSize())); |
| } |
| |
| function resize(width, height) { |
| size = new goog.math.Size(width, height); |
| goog.testing.events.fireBrowserEvent( |
| new goog.testing.events.Event( |
| goog.events.EventType.RESIZE, viewportSizeMonitor)); |
| } |