blob: 21f34b8dc6d41972cf312b2b3105297a81d9680b [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.
*/
/**
* @description
*/
import "dart:html";
import "../../testcommon.dart";
import "../../../Utils/async_utils.dart";
import "pwd.dart";
main() {
document.body.setInnerHtml('''
<div id=test_body>
<h3>
Test that verifies the behavior of text-align:-webkit-match-parent.
</h3>
<div>
The test passes if all the lines containing the text "Left Align" are aligned to the left and vice-versa for "Right Align".
</div>
<h4>Cases where the outermost div is LTR.</h4>
<div style="text-align:start">
<div style="text-align:-webkit-match-parent" dir=rtl class=l><span>Left Aligned</span></div>
</div>
<div style="text-align:start" dir=ltr>
<div style="text-align:-webkit-match-parent" dir=rtl class=l><span>Left Aligned</span></div>
</div>
<div style="text-align:end" dir=ltr>
<div style="text-align:-webkit-match-parent" dir=rtl class=r><span>Right Aligned</span></div>
</div>
<h4>Cases where the outermost div is RTL.</h4>
<div style="text-align:start" dir=rtl>
<div style="text-align:-webkit-match-parent" dir=ltr class=r><span>Right Aligned</span></div>
</div>
<div style="text-align:end" dir=rtl>
<div style="text-align:-webkit-match-parent" dir=ltr class=l><span>Left Aligned</span></div>
</div>
<h4>Changing text-align programmatically</h4>
<div id=programmatic_change_div style="text-align:end" dir=ltr>
<div style="text-align:-webkit-match-parent" dir=rtl class=l><span>Left Aligned</span></div>
</div>
''', treeSanitizer: new NullTreeSanitizer());
var top_div = document.getElementById('programmatic_change_div');
top_div.style.setProperty('text-align', 'start', 'important');
document.body.append(new DocumentFragment.html('''
<h4>check -webkit-match-parent in a nested div</h4>
<div style="text-align:end" dir=ltr>
<div>
<div style="text-align:-webkit-match-parent" dir=rtl class=r><span>Right Aligned</span></div>
</div>
</div>
<div style="text-align:start" dir=ltr>
<div style="text-align:-webkit-match-parent" dir=rtl>
<div style="text-align:-webkit-match-parent" dir=rtl class=l><span>Left Aligned</span></div>
</div>
</div>
</div>
<pre id="console">
''', treeSanitizer: new NullTreeSanitizer()));
// Checks that the given element is left aligned if expectedAlignment is 'left', or right aligned if
// expectedAlignment is 'right'.
// Our check for right alignment is just !isLeftAligned at the moment, but this is
// enough for our purposes.
assertAlignment(element, i, expectedAlignment)
{
var enclosingDiv = element;
var computedStyle = getComputedStyle(enclosingDiv, null);
var innerSpan = enclosingDiv.children[0];
var leftAlign = expectedAlignment == 'left';
var isLeftAligned = (enclosingDiv.offsetLeft == innerSpan.offsetLeft);
shouldBeTrue(leftAlign && isLeftAligned && computedStyle.textAlign == 'left'
|| !leftAlign && !isLeftAligned && computedStyle.textAlign == 'right');
}
// Actual test.
var leftAlignedDivs = document.querySelectorAll(".l");
for (var i = 0; i < leftAlignedDivs.length; i++)
assertAlignment(leftAlignedDivs[i], i, 'left');
var rightAlignedDivs = document.querySelectorAll(".r");
for (var i = 0; i < rightAlignedDivs.length; i++)
assertAlignment(rightAlignedDivs[i], i, 'right');
}