123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- // 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.positioning.AnchoredViewportPositionTest');
- goog.setTestOnly('goog.positioning.AnchoredViewportPositionTest');
- goog.require('goog.dom');
- goog.require('goog.math.Box');
- goog.require('goog.positioning.AnchoredViewportPosition');
- goog.require('goog.positioning.Corner');
- goog.require('goog.positioning.OverflowStatus');
- goog.require('goog.style');
- goog.require('goog.testing.jsunit');
- var frame, doc, dom, viewportSize, anchor, popup;
- var corner = goog.positioning.Corner;
- function setUp() {
- frame = document.getElementById('frame1');
- doc = goog.dom.getFrameContentDocument(frame);
- dom = goog.dom.getDomHelper(doc);
- viewportSize = dom.getViewportSize();
- anchor = dom.getElement('anchor');
- popup = dom.getElement('popup');
- goog.style.setSize(popup, 20, 20);
- }
- // The frame has enough space at the bottom of the anchor.
- function testRepositionBottom() {
- var avp = new goog.positioning.AnchoredViewportPosition(
- anchor, corner.BOTTOM_LEFT, false);
- goog.style.setSize(anchor, 100, 100);
- goog.style.setPosition(anchor, 0, 0);
- assertTrue(viewportSize.height >= 100 + 20);
- avp.reposition(popup, corner.TOP_LEFT);
- var anchorRect = goog.style.getBounds(anchor);
- assertEquals(
- anchorRect.top + anchorRect.height, goog.style.getPageOffset(popup).y);
- }
- // No enough space at the bottom, but at the top.
- function testRepositionTop() {
- var avp = new goog.positioning.AnchoredViewportPosition(
- anchor, corner.BOTTOM_LEFT, false);
- var newTop = viewportSize.height - 100;
- goog.style.setSize(anchor, 100, 100);
- goog.style.setPosition(anchor, 50, newTop);
- assertTrue(newTop >= 20);
- avp.reposition(popup, corner.TOP_LEFT);
- anchorRect = goog.style.getBounds(anchor);
- var popupRect = goog.style.getBounds(popup);
- assertEquals(anchorRect.top, popupRect.top + popupRect.height);
- }
- // Not enough space either at the bottom or right but there is enough space at
- // top left.
- function testRepositionBottomRight() {
- var avp = new goog.positioning.AnchoredViewportPosition(
- anchor, corner.BOTTOM_RIGHT, false);
- goog.style.setSize(anchor, 100, 100);
- goog.style.setPosition(
- anchor, viewportSize.width - 110, viewportSize.height - 110);
- avp.reposition(popup, corner.TOP_LEFT);
- anchorRect = goog.style.getBounds(anchor);
- var popupRect = goog.style.getBounds(popup);
- assertEquals(anchorRect.top, popupRect.top + popupRect.height);
- assertEquals(anchorRect.left, popupRect.left + popupRect.width);
- }
- // Enough space at neither the bottom nor the top. Adjustment flag is false.
- function testRepositionNoSpaceWithoutAdjustment() {
- var avp = new goog.positioning.AnchoredViewportPosition(
- anchor, corner.BOTTOM_LEFT, false);
- goog.style.setPosition(anchor, 50, 10);
- goog.style.setSize(anchor, 100, viewportSize.height - 20);
- avp.reposition(popup, corner.TOP_LEFT);
- anchorRect = goog.style.getBounds(anchor);
- popupRect = goog.style.getBounds(popup);
- assertEquals(anchorRect.top + anchorRect.height, popupRect.top);
- assertTrue(popupRect.top + popupRect.height > viewportSize.height);
- }
- // Enough space at neither the bottom nor the top. Adjustment flag is true.
- function testRepositionNoSpaceWithAdjustment() {
- var avp = new goog.positioning.AnchoredViewportPosition(
- anchor, corner.BOTTOM_LEFT, true);
- goog.style.setPosition(anchor, 50, 10);
- goog.style.setSize(anchor, 100, viewportSize.height - 20);
- avp.reposition(popup, corner.TOP_LEFT);
- anchorRect = goog.style.getBounds(anchor);
- popupRect = goog.style.getBounds(popup);
- assertTrue(anchorRect.top + anchorRect.height > popupRect.top);
- assertEquals(viewportSize.height, popupRect.top + popupRect.height);
- }
- function testAdjustCorner() {
- var avp =
- new goog.positioning.AnchoredViewportPosition(anchor, corner.BOTTOM_LEFT);
- assertEquals(corner.BOTTOM_LEFT, avp.adjustCorner(0, corner.BOTTOM_LEFT));
- assertEquals(
- corner.BOTTOM_RIGHT,
- avp.adjustCorner(
- goog.positioning.OverflowStatus.FAILED_HORIZONTAL,
- corner.BOTTOM_LEFT));
- assertEquals(
- corner.TOP_LEFT,
- avp.adjustCorner(
- goog.positioning.OverflowStatus.FAILED_VERTICAL, corner.BOTTOM_LEFT));
- assertEquals(
- corner.TOP_RIGHT,
- avp.adjustCorner(
- goog.positioning.OverflowStatus.FAILED_VERTICAL |
- goog.positioning.OverflowStatus.FAILED_HORIZONTAL,
- corner.BOTTOM_LEFT));
- }
- // No space to fit, so uses fallback.
- function testOverflowConstraint() {
- var tinyBox = new goog.math.Box(0, 0, 0, 0);
- var avp = new goog.positioning.AnchoredViewportPosition(
- anchor, corner.BOTTOM_LEFT, false, tinyBox);
- assertEquals(tinyBox, avp.getOverflowConstraint());
- goog.style.setSize(anchor, 50, 50);
- goog.style.setPosition(anchor, 80, 80);
- avp.reposition(popup, corner.TOP_LEFT);
- anchorRect = goog.style.getBounds(anchor);
- popupRect = goog.style.getBounds(popup);
- assertEquals(anchorRect.left, popupRect.left);
- assertEquals(anchorRect.top + anchorRect.height, popupRect.top);
- }
- // Initially no space to fit above, then changes to have room.
- function testChangeOverflowConstraint() {
- var tinyBox = new goog.math.Box(0, 0, 0, 0);
- var avp = new goog.positioning.AnchoredViewportPosition(
- anchor, corner.BOTTOM_LEFT, false, tinyBox);
- assertEquals(tinyBox, avp.getOverflowConstraint());
- goog.style.setSize(anchor, 50, 50);
- goog.style.setPosition(anchor, 80, 80);
- avp.reposition(popup, corner.TOP_LEFT);
- popupRect = goog.style.getBounds(popup);
- assertNotEquals(60, popupRect.top);
- var movedBox = new goog.math.Box(60, 100, 100, 60);
- avp.setOverflowConstraint(movedBox);
- assertEquals(movedBox, avp.getOverflowConstraint());
- avp.reposition(popup, corner.TOP_LEFT);
- popupRect = goog.style.getBounds(popup);
- assertEquals(80, popupRect.left);
- assertEquals(60, popupRect.top);
- }
|