blob: 9ce9f9cae4a7fb9d20886ad9c7cbc184ce4713b2 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2011 WebDriver committers
Copyright 2011 Google Inc.
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.
-->
<html>
<head>
<meta charset="utf-8">
<title>atoms_test.html</title>
<link rel="stylesheet" href="/filez/_main/third_party/js/qunit/qunit.css">
<script src="/filez/_main/third_party/js/qunit/qunit.js"></script>
<script src="/filez/_main/third_party/js/qunit/qunit_test_runner.js"></script>
<script type="text/javascript" src="test_bootstrap.js">
</script>
<script type="text/javascript">
goog.require('goog.math.Coordinate');
goog.require('goog.math.Rect');
goog.require('goog.math.Size');
goog.require('webdriver.chrome');
</script>
<script type="text/javascript">
function assertRoughlyEquals(expected, actual, tolerance) {
QUnit.assert.ok(Math.abs(expected - actual) <= tolerance,
'Expected ' + expected + ' ± ' + tolerance + ', got ' + actual);
}
QUnit.testStart(function() {
// Reset iframe scroll position before each test to avoid order dependencies
if (frames[0] && frames[0].document && frames[0].document.documentElement) {
frames[0].document.documentElement.scrollLeft = 0;
frames[0].document.documentElement.scrollTop = 0;
}
});
QUnit.testDone(function() {
// Reset iframe scroll position after each test to avoid order dependencies
if (frames[0] && frames[0].document && frames[0].document.documentElement) {
frames[0].document.documentElement.scrollLeft = 0;
frames[0].document.documentElement.scrollTop = 0;
}
});
QUnit.test('computeScrollOffsets', function(assert) {
function computeX(left, right, center) {
var offsets = webdriver.chrome.computeScrollOffsets_(
new goog.math.Size(10, 10),
new goog.math.Rect(left, 1, right - left, 2),
center);
return offsets.x;
}
// In bounds
assert.strictEqual(computeX(1, 5, false), 0);
// On left edge
assert.strictEqual(computeX(0, 5, false), 0);
// Overlap left edge
assert.strictEqual(computeX(-1, 5, false), -1);
// Past left edge
assert.strictEqual(computeX(-5, -1, false), -5);
// On right edge
assert.strictEqual(computeX(5, 10, false), 0);
// Overlap right edge
assert.strictEqual(computeX(5, 11, false), 1);
// Past right edge
assert.strictEqual(computeX(12, 14, false), 4);
// Too big
assert.strictEqual(computeX(-1, 11, false), -1);
assert.strictEqual(computeX(-1, 15, true), 2);
function computeY(top, bottom, center) {
var offsets = webdriver.chrome.computeScrollOffsets_(
new goog.math.Size(10, 10),
new goog.math.Rect(1, top, 2, bottom - top),
center);
return offsets.y;
}
// Above top edge
assert.strictEqual(computeY(-3, -1, false), -3);
// Below bottom edge
assert.strictEqual(computeY(13, 15, false), 5);
// Too big
assert.strictEqual(computeY(-1, 11, false), -1);
assert.strictEqual(computeY(-1, 15, true), 2);
});
QUnit.test('computeOffsetInContainer', function(assert) {
function computeY(container, elem) {
return webdriver.chrome.computeOffsetInContainer_(
document.getElementById(container),
document.getElementById(elem)).y;
}
// Padding/margins/borders
assert.strictEqual(computeY('c1', 'e1'), 17);
// Absolute positioning
assert.strictEqual(computeY('c2', 'e2'), 50);
// Container hidden
assert.strictEqual(computeY('c3', 'e3'), 0);
// Element hidden
assert.strictEqual(computeY('c4', 'e4'), 0);
// Not displayed
assert.strictEqual(computeY('c5', 'e5'), 0);
});
QUnit.test('getLocationInViewNoScroll', function(assert) {
var elem = frames[0].document.getElementById('elem0');
var coord = webdriver.chrome.getLocationInView(
elem, false, new goog.math.Rect(0,0,4,4));
var tolerance = 1;
assertRoughlyEquals(108, coord.x, tolerance);
assertRoughlyEquals(108, coord.y, tolerance);
assert.strictEqual(frames[0].document.documentElement.scrollLeft, 0);
assert.strictEqual(frames[0].document.documentElement.scrollTop, 0);
});
QUnit.test('getLocationInViewScrolling', function(assert) {
var elem = frames[0].document.getElementById('elem');
var coord = webdriver.chrome.getLocationInView(
elem, false, new goog.math.Rect(0,0,4,4));
var tolerance = 1;
assertRoughlyEquals(280, coord.x, tolerance);
assertRoughlyEquals(280, coord.y, tolerance);
assert.strictEqual(frames[0].document.documentElement.scrollLeft, 408);
assert.strictEqual(frames[0].document.documentElement.scrollTop, 408);
});
QUnit.test('getLocationInViewDocumentElement', function(assert) {
var elem = document.documentElement;
var coord = webdriver.chrome.getLocationInView(
elem, false, new goog.math.Rect(0,0,4,4));
assert.strictEqual(coord.x, 0);
assert.strictEqual(coord.y, 0);
assert.strictEqual(document.documentElement.scrollLeft, 0);
assert.strictEqual(document.documentElement.scrollTop, 0);
});
QUnit.test('getLocationInViewFrameDocumentElement', function(assert) {
var elem = frames[0].document.documentElement;
var coord = webdriver.chrome.getLocationInView(
elem, false, new goog.math.Rect(0,0,4,4));
assert.strictEqual(coord.x, 0);
assert.strictEqual(coord.y, 0);
assert.strictEqual(frames[0].document.documentElement.scrollLeft, 0);
assert.strictEqual(frames[0].document.documentElement.scrollTop, 0);
});
QUnit.test('getFirstClientRect', function(assert) {
var rect = webdriver.chrome.getFirstClientRect(
document.getElementById('span'));
assert.strictEqual(rect.left, 0);
assert.strictEqual(rect.top, 0);
assert.ok(rect.width > 0);
assert.ok(rect.height > 0);
});
QUnit.test('getFirstClientRectThrows', function(assert) {
assert.throws(function() {
webdriver.chrome.getFirstClientRect(
document.getElementById('e5'));
});
});
</script>
</head>
<style>
body {
padding: 0px;
margin: 0px;
}
#c1 {
padding-top: 1px;
margin-top: 2px;
border: 0px solid blue;
border-top-width: 4px;
}
#e1 {
padding-top: 8px;
margin-top: 16px;
border: 0px solid red;
border-top-width: 32px;
}
</style>
<body id='body'>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<div id='c1'>
<div id='e1'>1</div>
</div>
<div id='c2' style='position:fixed; top:50px'>
<div id='e2' style='position:absolute; top:50px'>2</div>
</div>
<div id='c3' style='visibility:hidden'>
<div id='e3'>3</div>
</div>
<div id='c4'>
<div id='e4' style='visibility:hidden'>4</div>
</div>
<div id='c5' style='display:none'>
<div id='e5'>5</div>
</div>
<div style='width:1px'>
<span id='span'>a b</span>
</div>
<iframe width=300 height=300 src='location_in_view.html'></iframe>
</body>
</html>