blob: 76709ed57325f6bd2ac2b258764ee05e46dbd436 [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>
<title>atoms_test.html</title>
<script type="text/javascript" src="../../webdriver-bootstrap.js">
</script>
<script type="text/javascript">
goog.require('goog.math.Coordinate');
goog.require('goog.math.Rect');
goog.require('goog.math.Size');
goog.require('goog.testing.jsunit');
goog.require('webdriver.chrome');
</script>
<script type="text/javascript">
function testComputeScrollOffsets() {
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
assertEquals(0, computeX(1, 5, false));
// On left edge
assertEquals(0, computeX(0, 5, false));
// Overlap left edge
assertEquals(-1, computeX(-1, 5, false));
// Past left edge
assertEquals(-5, computeX(-5, -1, false));
// On right edge
assertEquals(0, computeX(5, 10, false));
// Overlap right edge
assertEquals(1, computeX(5, 11, false));
// Past right edge
assertEquals(4, computeX(12, 14, false));
// Too big
assertEquals(-1, computeX(-1, 11, false));
assertEquals(2, computeX(-1, 15, true));
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
assertEquals(-3, computeY(-3, -1, false));
// Below bottom edge
assertEquals(5, computeY(13, 15, false));
// Too big
assertEquals(-1, computeY(-1, 11, false));
assertEquals(2, computeY(-1, 15, true));
}
function testComputeOffsetInContainer() {
function computeY(container, elem) {
return webdriver.chrome.computeOffsetInContainer_(
document.getElementById(container),
document.getElementById(elem)).y;
}
// Padding/margins/borders
assertEquals(17, computeY('c1', 'e1'));
// Absolute positioning
assertEquals(50, computeY('c2', 'e2'));
// Container hidden
assertEquals(0, computeY('c3', 'e3'));
// Element hidden
assertEquals(0, computeY('c4', 'e4'));
// Not displayed
assertEquals(0, computeY('c5', 'e5'));
}
function testGetLocationInView() {
var elem = frames[0].document.getElementById('elem');
var coord = webdriver.chrome.getLocationInView(
elem, false, new goog.math.Rect(0,0,4,4));
assertEquals(281, coord.x);
assertEquals(281, coord.y);
assertEquals(408, frames[0].document.body.scrollLeft);
assertEquals(408, frames[0].document.body.scrollTop);
}
function testGetFirstClientRect() {
var rect = webdriver.chrome.getFirstClientRect(
document.getElementById('span'));
assertEquals(0, rect.left);
assertEquals(0, rect.top);
assertTrue(rect.width > 0);
assertTrue(rect.height > 0);
}
function testGetFirstClientRectThrows() {
assertThrows(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='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'>
</body>
</html>