| // Copyright 2013 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.labs.style.PixelDensityMonitor. |
| * |
| */ |
| |
| goog.provide('goog.labs.style.PixelDensityMonitorTest'); |
| goog.setTestOnly('goog.labs.style.PixelDensityMonitorTest'); |
| |
| goog.require('goog.array'); |
| goog.require('goog.dom.DomHelper'); |
| goog.require('goog.events'); |
| goog.require('goog.labs.style.PixelDensityMonitor'); |
| goog.require('goog.testing.MockControl'); |
| goog.require('goog.testing.jsunit'); |
| goog.require('goog.testing.recordFunction'); |
| |
| var fakeWindow; |
| var recordFunction; |
| var monitor; |
| var mockControl; |
| var mediaQueryLists; |
| |
| function setUp() { |
| recordFunction = goog.testing.recordFunction(); |
| mediaQueryLists = []; |
| mockControl = new goog.testing.MockControl(); |
| } |
| |
| function tearDown() { |
| mockControl.$verifyAll(); |
| goog.dispose(monitor); |
| goog.dispose(recordFunction); |
| } |
| |
| function setUpMonitor(initialRatio, hasMatchMedia) { |
| fakeWindow = { |
| devicePixelRatio: initialRatio |
| }; |
| |
| if (hasMatchMedia) { |
| // Every call to matchMedia should return a new media query list with its |
| // own set of listeners. |
| fakeWindow.matchMedia = function(query) { |
| var listeners = []; |
| var newList = { |
| addListener: function(listener) { |
| listeners.push(listener); |
| }, |
| removeListener: function(listener) { |
| goog.array.remove(listeners, listener); |
| }, |
| callListeners: function() { |
| for (var i = 0; i < listeners.length; i++) { |
| listeners[i](); |
| } |
| }, |
| getListenerCount: function() { |
| return listeners.length; |
| } |
| }; |
| mediaQueryLists.push(newList); |
| return newList; |
| }; |
| } |
| |
| var domHelper = mockControl.createStrictMock(goog.dom.DomHelper); |
| domHelper.getWindow().$returns(fakeWindow); |
| mockControl.$replayAll(); |
| |
| monitor = new goog.labs.style.PixelDensityMonitor(domHelper); |
| goog.events.listen(monitor, |
| goog.labs.style.PixelDensityMonitor.EventType.CHANGE, recordFunction); |
| } |
| |
| function setNewRatio(newRatio) { |
| fakeWindow.devicePixelRatio = newRatio; |
| for (var i = 0; i < mediaQueryLists.length; i++) { |
| mediaQueryLists[i].callListeners(); |
| } |
| } |
| |
| function testNormalDensity() { |
| setUpMonitor(1, false); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.NORMAL, |
| monitor.getDensity()); |
| } |
| |
| function testHighDensity() { |
| setUpMonitor(1.5, false); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.HIGH, |
| monitor.getDensity()); |
| } |
| |
| function testNormalDensityIfUndefined() { |
| setUpMonitor(undefined, false); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.NORMAL, |
| monitor.getDensity()); |
| } |
| |
| function testChangeEvent() { |
| setUpMonitor(1, true); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.NORMAL, |
| monitor.getDensity()); |
| monitor.start(); |
| |
| setNewRatio(2); |
| var call = recordFunction.popLastCall(); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.HIGH, |
| call.getArgument(0).target.getDensity()); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.HIGH, |
| monitor.getDensity()); |
| |
| setNewRatio(1); |
| call = recordFunction.popLastCall(); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.NORMAL, |
| call.getArgument(0).target.getDensity()); |
| assertEquals(goog.labs.style.PixelDensityMonitor.Density.NORMAL, |
| monitor.getDensity()); |
| } |
| |
| function testListenerIsDisposed() { |
| setUpMonitor(1, true); |
| monitor.start(); |
| |
| assertEquals(1, mediaQueryLists.length); |
| assertEquals(1, mediaQueryLists[0].getListenerCount()); |
| |
| goog.dispose(monitor); |
| |
| assertEquals(1, mediaQueryLists.length); |
| assertEquals(0, mediaQueryLists[0].getListenerCount()); |
| } |