blob: b5d1339dd7e93b8bba6980c68a3dde1fb9a6a160 [file] [log] [blame]
// Copyright 2014 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.
goog.provide('goog.style.transformTest');
goog.setTestOnly('goog.style.transformTest');
goog.require('goog.dom');
goog.require('goog.style.transform');
goog.require('goog.testing.jsunit');
goog.require('goog.userAgent');
goog.require('goog.userAgent.product.isVersion');
/**
* Element being transformed.
* @type {Element}
*/
var element;
/**
* Sets a transform translation and asserts the translation was applied.
* @param {number} x The horizontal translation
* @param {number} y The vertical translation
*/
var setAndAssertTranslation = function(x, y) {
if (goog.userAgent.GECKO ||
goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(10)) {
// Mozilla and <IE10 do not support CSSMatrix.
return;
}
var success = goog.style.transform.setTranslation(element, x, y);
if (!goog.style.transform.isSupported()) {
assertFalse(success);
} else {
assertTrue(success);
var translation = goog.style.transform.getTranslation(element);
assertEquals(x, translation.x);
assertEquals(y, translation.y);
}
};
/**
* Sets a transform translation and asserts the translation was applied.
* @param {number} x The horizontal scale
* @param {number} y The vertical scale
* @param {number} z The depth scale
*/
var setAndAssertScale = function(x, y, z) {
if (goog.userAgent.GECKO ||
goog.userAgent.IE && !goog.userAgent.isDocumentModeOrHigher(10)) {
// Mozilla and <IE10 do not support CSSMatrix.
return;
}
var success = goog.style.transform.setScale(element, x, y, z);
if (!goog.style.transform.isSupported()) {
assertFalse(success);
} else {
assertTrue(success);
var scale = goog.style.transform.getScale(element);
assertEquals(x, scale.x);
assertEquals(y, scale.y);
if (goog.style.transform.is3dSupported()) {
assertEquals(z, scale.z);
}
}
};
function setUp() {
element = goog.dom.createElement('div');
goog.dom.appendChild(goog.dom.getDocument().body, element);
}
function tearDown() {
goog.dom.removeNode(element);
}
function testIsSupported() {
if (goog.userAgent.IE && !goog.userAgent.product.isVersion(9)) {
assertFalse(goog.style.transform.isSupported());
} else {
assertTrue(goog.style.transform.isSupported());
}
}
function testIs3dSupported() {
if (goog.userAgent.GECKO && !goog.userAgent.product.isVersion(10) ||
(goog.userAgent.IE && !goog.userAgent.product.isVersion(10))) {
assertFalse(goog.style.transform.is3dSupported());
} else {
assertTrue(goog.style.transform.is3dSupported());
}
}
function testTranslateX() {
setAndAssertTranslation(10, 0);
}
function testTranslateY() {
setAndAssertTranslation(0, 10);
}
function testTranslateXY() {
setAndAssertTranslation(10, 20);
}
function testScaleX() {
setAndAssertScale(5, 1, 1);
}
function testScaleY() {
setAndAssertScale(1, 3, 1);
}
function testScaleZ() {
setAndAssertScale(1, 1, 8);
}
function testScale() {
setAndAssertScale(2, 2, 2);
}