blob: 84b969f942cadd462c3f5c330bc97567c40cb72b [file] [log] [blame]
/*
* Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
* for details. All rights reserved. Use of this source code is governed by a
* BSD-style license that can be found in the LICENSE file.
*/
/**
* @assertion
* @description
*/
import "dart:html";
import "../../testharness.dart";
const String htmlEL1 = r'''
<style>
body.hide-containers .container {
display: none;
}
.container {
width: 600px;
height: 200px;
-webkit-columns: 3;
columns: 3;
column-fill: auto;
line-height: 20px; /* 10 lines per page */
font-size: 16px;
margin: 0 0 20px 0;
padding: 0;
overflow: hidden;
orphans: 2;
}
.block {
margin: 0 0 15px 0;
padding: 0;
}
.top {
color: red;
}
.bottom {
color: green;
}
</style>
''';
const String htmlEL2 = r'''
<div class="container" id="test">
<div class="block">
<span id="test-block-1-line-1" class="top">Block 1 Line 1</span><br>
<span id="test-block-1-line-2">Block 1 Line 2</span><br>
<span id="test-block-1-line-3">Block 1 Line 3</span><br>
<span id="test-block-1-line-4">Block 1 Line 4</span><br>
<span id="test-block-1-line-5">Block 1 Line 5</span><br>
<span id="test-block-1-line-6">Block 1 Line 6</span><br>
<span id="test-block-1-line-7">Block 1 Line 7</span><br>
<span id="test-block-1-line-8" class="bottom">Block 1 Line 8</span><br>
</div>
<div class="block">
<span id="test-block-2-line-1" class="top">Block 2 Line 1</span><br>
<span id="test-block-2-line-2">Block 2 Line 2</span><br>
<span id="test-block-2-line-3">Block 2 Line 3</span><br>
<span id="test-block-2-line-4">Block 2 Line 4</span><br>
<span id="test-block-2-line-5">Block 2 Line 5</span><br>
<span id="test-block-2-line-6">Block 2 Line 6</span><br>
</div>
</div>
''';
void testIsFirstInColumn(containerId, blockNumber, lineNumber) {
// Get the upper bounds of the container and line.
var topOfContainer = document.getElementById(containerId).getBoundingClientRect().top;
var topOfLine = document.getElementById("$containerId-block-$blockNumber-line-$lineNumber").getBoundingClientRect().top;
shouldBeTrue((topOfContainer - topOfLine).abs() < 5, // Give 5 pixels to account for subpixel layout.
"$containerId Block $blockNumber Line $lineNumber");
}
void runTest(e) {
var container = document.getElementById("test");
document.body.offsetTop;
container.style.border = "3px solid blue"; // Modify a property that triggers a layout.
testIsFirstInColumn("test", 1, 1);
testIsFirstInColumn("test", 2, 1);
// Hide all the containers and leave just the test results for text output.
document.body.className = "hide-containers";
checkTestFailures();
}
void main() {
description("""
Test if an element with orphans relayouts correctly.
The red lines of text must be at the top of the blue rectangle.
The green lines of text must be at the bottom of the blue rectangle.
""");
document.head.appendHtml(htmlEL1, treeSanitizer: new NullTreeSanitizer());
document.body.appendHtml(htmlEL2, treeSanitizer: new NullTreeSanitizer());
window.addEventListener("load", runTest, false);
}