| // Copyright 2009 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.testing.style.layoutassertsTest'); |
| goog.setTestOnly('goog.testing.style.layoutassertsTest'); |
| |
| goog.require('goog.dom'); |
| goog.require('goog.style'); |
| goog.require('goog.testing.jsunit'); |
| /** @suppress {extraRequire} */ |
| goog.require('goog.testing.style.layoutasserts'); |
| |
| var div1; |
| var div2; |
| var DEFAULT_WIDTH = 200; |
| var DEFAULT_HEIGHT = 100; |
| |
| function setUp() { |
| div1 = goog.dom.createDom( |
| 'div', |
| { |
| id: 'test', |
| className: 'test', |
| style: 'position:absolute;top:0;left:0;' + |
| 'width:' + DEFAULT_WIDTH + 'px;' + |
| 'height:' + DEFAULT_HEIGHT + 'px;' + |
| 'background-color:#EEE', |
| innerHTML: 'abc' |
| }); |
| div2 = goog.dom.createDom('div', |
| { |
| id: 'test2', |
| className: 'test2', |
| style: 'position:absolute;' + |
| 'top:0;left:0;' + |
| 'width:' + DEFAULT_WIDTH + 'px;' + |
| 'height:' + DEFAULT_HEIGHT + 'px;' + |
| 'background-color:#F00', |
| innerHTML: 'abc' |
| }); |
| |
| } |
| |
| |
| function tearDown() { |
| div1 = null; |
| div2 = null; |
| } |
| |
| |
| /** |
| * Tests assertIsVisible. |
| */ |
| function testAssertIsVisible() { |
| assertThrows('Exception should be thrown when asserting visibility.', |
| goog.bind(assertIsVisible, null, null)); // assertIsVisible(null) |
| |
| // Attach it to BODY tag and assert that it is visible. |
| document.body.appendChild(div1); |
| assertIsVisible('Div should be visible.', div1); |
| |
| // Tests with hidden element |
| failed = false; |
| goog.style.setElementShown(div1, false /* display */); |
| assertThrows('Exception should be thrown when asserting visibility.', |
| goog.bind(assertIsVisible, null, div1)); |
| |
| // Clean up. |
| document.body.removeChild(div1); |
| } |
| |
| |
| /** |
| * Tests assertNotVisible. |
| */ |
| function testAssertNotVisible() { |
| // Tests null as a parameter. |
| var element = null; |
| assertNotVisible(element); |
| |
| // Attach the element to BODY element, assert should fail. |
| document.body.appendChild(div1); |
| assertThrows('Exception should be thrown when asserting non-visibility.', |
| goog.bind(assertNotVisible, null, div1)); |
| |
| // Clean up. |
| document.body.removeChild(div1); |
| } |
| |
| |
| /** |
| * Tests assertIsIntersect. |
| */ |
| function testAssertIntersect() { |
| document.body.appendChild(div1); |
| document.body.appendChild(div2); |
| |
| // No intersection |
| goog.style.setPosition(div1, 0, 0); |
| goog.style.setPosition(div2, 500, 500); |
| assertThrows('Exception should be thrown when asserting intersection.', |
| goog.bind(assertIntersect, null, div1, div2)); |
| assertNoIntersect(div1, div2); |
| |
| // Some intersection |
| goog.style.setPosition(div1, 0, 0); |
| goog.style.setPosition(div2, 50, 50); |
| assertThrows('Exception should be thrown when asserting no intersection.', |
| goog.bind(assertNoIntersect, null, div1, div2)); |
| assertIntersect(div1, div2); |
| |
| // Completely superimposed. |
| goog.style.setPosition(div1, 0, 0); |
| goog.style.setPosition(div2, 0, 0); |
| assertThrows('Exception should be thrown when asserting no intersection.', |
| goog.bind(assertNoIntersect, null, div1, div2)); |
| assertIntersect(div1, div2); |
| } |
| |
| |
| /** |
| * Tests assertWidth. |
| */ |
| function testAssertWidth() { |
| document.body.appendChild(div1); |
| |
| // Test correct width |
| assertWidth(div1, DEFAULT_WIDTH); |
| |
| // Test wrong width |
| assertThrows('Exception should be thrown when elements has wrong width', |
| goog.bind(assertWidth, null, div1, 400)); |
| |
| // Test a valid tolerance value |
| assertWidthWithinTolerance(div1, 180, 20); |
| |
| // Test exceeding tolerance value |
| assertThrows( |
| 'Exception should be thrown when element\'s width exceeds tolerance', |
| goog.bind(assertWidthWithinTolerance, null, div1, 100, 0.1)); |
| } |
| |
| |
| /** |
| * Tests assertHeight. |
| */ |
| function testAssertHeight() { |
| document.body.appendChild(div1); |
| |
| // Test correct height |
| assertHeight(div1, DEFAULT_HEIGHT); |
| |
| // Test wrong height |
| assertThrows('Exception should be thrown when element has wrong height.', |
| goog.bind(assertHeightWithinTolerance, null, div1, 300)); |
| |
| // Test a valid tolerance value |
| assertHeightWithinTolerance(div1, 90, 10); |
| |
| // Test exceeding tolerance value |
| assertThrows( |
| 'Exception should be thrown when element\'s height exceeds tolerance', |
| goog.bind(assertHeight, null, div1, 50, 0.2)); |
| } |
| |
| |
| /** |
| * Tests assertIsLeftOf. |
| */ |
| function testAssertIsLeftOf() { |
| document.body.appendChild(div1); |
| document.body.appendChild(div2); |
| |
| // Test elements of same size & location |
| assertThrows('Exception should be thrown when elements intersect.', |
| goog.bind(assertIsLeftOf, null, div1, div2)); |
| assertThrows('Exception should be thrown when elements intersect.', |
| goog.bind( |
| assertIsStrictlyLeftOf, null, div1, div2)); |
| |
| // Test elements that are not left to right |
| goog.style.setPosition(div1, 100, 0); |
| goog.style.setPosition(div2, 0, 0); |
| assertThrows( |
| 'Exception should be thrown when elements are not left to right.', |
| goog.bind(assertIsLeftOf, null, div1, div2)); |
| assertThrows( |
| 'Exception should be thrown when elements are not left to right.', |
| goog.bind( |
| assertIsStrictlyLeftOf, null, div1, div2)); |
| |
| // Test elements that intersect, but is left to right |
| goog.style.setPosition(div1, 0, 0); |
| goog.style.setPosition(div2, 100, 0); |
| assertIsLeftOf(div1, div2); |
| assertThrows('Exception should be thrown when elements intersect.', |
| goog.bind( |
| assertIsStrictlyLeftOf, null, div1, div2)); |
| |
| // Test elements that are strictly left to right |
| goog.style.setPosition(div1, 0, 0); |
| goog.style.setPosition(div2, 999, 0); |
| assertIsLeftOf(div1, div2); |
| assertIsStrictlyLeftOf(div1, div2); |
| } |
| |
| |
| /** |
| * Tests assertIsAbove. |
| */ |
| function testAssertIsAbove() { |
| document.body.appendChild(div1); |
| document.body.appendChild(div2); |
| |
| // Test elements of same size & location |
| assertThrows('Exception should be thrown when elements intersect.', |
| goog.bind(assertIsAbove, null, div1, div2)); |
| assertThrows('Exception should be thrown when elements intersect.', |
| goog.bind( |
| assertIsStrictlyAbove, null, div1, div2)); |
| |
| // Test elements that are not top to bottom |
| goog.style.setPosition(div1, 0, 999); |
| goog.style.setPosition(div2, 0, 0); |
| assertThrows( |
| 'Exception should be thrown when elements are not top to bottom.', |
| goog.bind(assertIsAbove, null, div1, div2)); |
| assertThrows( |
| 'Exception should be thrown when elements are not top to bottom.', |
| goog.bind( |
| assertIsStrictlyAbove, null, div1, div2)); |
| |
| // Test elements that intersect, but is top to bottom |
| goog.style.setPosition(div1, 0, 0); |
| goog.style.setPosition(div2, 0, 50); |
| assertIsAbove(div1, div2); |
| assertThrows('Exception should be thrown when elements intersect.', |
| goog.bind( |
| assertIsStrictlyAbove, null, div1, div2)); |
| |
| // Test elements that are top to bottom |
| goog.style.setPosition(div1, 0, 0); |
| goog.style.setPosition(div2, 0, 999); |
| assertIsAbove(div1, div2); |
| assertIsStrictlyAbove(div1, div2); |
| } |