blob: dd75fe8013f82e93ca2372b31523a2f8ddf65c85 [file] [log] [blame]
// 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.
goog.provide('goog.style.bidiTest');
goog.setTestOnly('goog.style.bidiTest');
goog.require('goog.dom');
goog.require('goog.style');
goog.require('goog.style.bidi');
goog.require('goog.testing.jsunit');
goog.require('goog.userAgent');
// Updates the calculated metrics.
function updateInfo() {
var element = document.getElementById('scrolledElementRtl');
document.getElementById('elementScrollLeftRtl').innerHTML =
element.offsetParent.scrollLeft;
document.getElementById('bidiOffsetStartRtl').innerHTML =
goog.style.bidi.getOffsetStart(element);
document.getElementById('bidiScrollLeftRtl').innerHTML =
goog.style.bidi.getScrollLeft(element.offsetParent);
element = document.getElementById('scrolledElementLtr');
document.getElementById('elementScrollLeftLtr').innerHTML =
element.offsetParent.scrollLeft;
document.getElementById('bidiOffsetStartLtr').innerHTML =
goog.style.bidi.getOffsetStart(element);
document.getElementById('bidiScrollLeftLtr').innerHTML =
goog.style.bidi.getScrollLeft(element.offsetParent);
}
function setUpPage() {
updateInfo();
}
function tearDown() {
document.documentElement.dir = 'ltr';
document.body.dir = 'ltr';
}
function testGetOffsetStart() {
var elm = document.getElementById('scrolledElementRtl');
assertEquals(elm.style['right'], goog.style.bidi.getOffsetStart(elm) + 'px');
elm = document.getElementById('scrolledElementLtr');
assertEquals(elm.style['left'], goog.style.bidi.getOffsetStart(elm) + 'px');
}
function testSetScrollOffsetRtl() {
var scrollElm = document.getElementById('scrollDivRtl');
var scrolledElm = document.getElementById('scrolledElementRtl');
var originalDistance =
goog.style.getRelativePosition(scrolledElm, document.body).x;
var scrollAndAssert = function(pixels) {
goog.style.bidi.setScrollOffset(scrollElm, pixels);
assertEquals(originalDistance + pixels,
goog.style.getRelativePosition(scrolledElm, document.body).x);
};
scrollAndAssert(0);
scrollAndAssert(50);
scrollAndAssert(100);
scrollAndAssert(150);
scrollAndAssert(155);
scrollAndAssert(0);
}
function testSetScrollOffsetLtr() {
var scrollElm = document.getElementById('scrollDivLtr');
var scrolledElm = document.getElementById('scrolledElementLtr');
var originalDistance =
goog.style.getRelativePosition(scrolledElm, document.body).x;
var scrollAndAssert = function(pixels) {
goog.style.bidi.setScrollOffset(scrollElm, pixels);
assertEquals(originalDistance - pixels,
goog.style.getRelativePosition(scrolledElm, document.body).x);
};
scrollAndAssert(0);
scrollAndAssert(50);
scrollAndAssert(100);
scrollAndAssert(150);
scrollAndAssert(155);
scrollAndAssert(0);
}
function testFixedBodyChildLtr() {
var bodyChild = document.getElementById('bodyChild');
assertEquals(goog.userAgent.GECKO ? document.body : null,
bodyChild.offsetParent);
assertEquals(60, goog.style.bidi.getOffsetStart(bodyChild));
}
function testFixedBodyChildRtl() {
document.documentElement.dir = 'rtl';
document.body.dir = 'rtl';
var bodyChild = document.getElementById('bodyChild');
assertEquals(goog.userAgent.GECKO ? document.body : null,
bodyChild.offsetParent);
var expectedOffsetStart =
goog.dom.getViewportSize().width - 60 - bodyChild.offsetWidth;
// Gecko seems to also add in the marginbox for the body.
// It's not really clear to me if this is true in the general case,
// or just under certain conditions.
if (goog.userAgent.GECKO) {
var marginBox = goog.style.getMarginBox(document.body);
expectedOffsetStart -= (marginBox.left + marginBox.right);
}
assertEquals(expectedOffsetStart,
goog.style.bidi.getOffsetStart(bodyChild));
}
function testGetScrollLeftRTL() {
var scrollLeftDiv = document.getElementById('scrollLeftRtl');
scrollLeftDiv.style.overflow = 'visible';
assertEquals(0, goog.style.bidi.getScrollLeft(scrollLeftDiv));
scrollLeftDiv.style.overflow = 'hidden';
assertEquals(0, goog.style.bidi.getScrollLeft(scrollLeftDiv));
scrollLeftDiv.style.overflow = 'scroll';
assertEquals(0, goog.style.bidi.getScrollLeft(scrollLeftDiv));
scrollLeftDiv.style.overflow = 'auto';
assertEquals(0, goog.style.bidi.getScrollLeft(scrollLeftDiv));
}