123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- // 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));
- // NOTE: 'auto' must go above the 'scroll' assertion. Chrome 47 has a bug
- // with non-deterministic scroll positioning. Maybe it recalculates the
- // layout on accessing those properties?
- // TODO(joeltine): Remove this comment when
- // https://code.google.com/p/chromium/issues/detail?id=568706 is resolved.
- scrollLeftDiv.style.overflow = 'auto';
- assertEquals(0, goog.style.bidi.getScrollLeft(scrollLeftDiv));
- scrollLeftDiv.style.overflow = 'scroll';
- assertEquals(0, goog.style.bidi.getScrollLeft(scrollLeftDiv));
- }
|