Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html

Issue 1949373003: Change Range.getBoundingClientRect() when the first rect is empty (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed test as per eae review Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html
diff --git a/third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html b/third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html
new file mode 100644
index 0000000000000000000000000000000000000000..dbaac62086570e84e04abf295509a733129ff5ac
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/dom/Range/get-bounding-client-rect-empty-and-non-empty.html
@@ -0,0 +1,70 @@
+<!DOCTPYE html>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<style>
+html, body {
+ margin: 0;
+}
+
+#container > div {
+ font-size: 10px;
+ width: 5ch;
+ border: thin solid black;
+}
+</style>
+<div id="log"></div>
+<div id="container">
+ <div id="normal-wrap">0123 456</div>
+ <div id="normal-wrap-with-overflow-space">01234 567</div>
+ <div id="pre-wrap" style="white-space: pre-wrap">0123 45678</div>
+ <div id="pre-wrap-with-overflow-space" style="white-space: pre-wrap">01234 5678</div>
+ <div id="break-word" style="word-wrap: break-word">0123456789</div>
+ <div id="pre" style="white-space:pre">a
+b<span></span>b</div>
+</div>
+<script>
+var range = document.createRange();
+
+testWhenFirstRectIsEmpty("normal-wrap", [4]);
+testWhenFirstRectIsEmpty("normal-wrap-with-overflow-space", [5]);
+testWhenFirstRectIsEmpty("pre-wrap", [3, 4, 5]);
+testWhenFirstRectIsEmpty("pre-wrap-with-overflow-space", [4, 5, 6]);
+testWhenFirstRectIsEmpty("break-word", [4, 5]);
+testWhenFirstRectIsEmpty("pre", [0, 1, 2]);
+
+function testWhenFirstRectIsEmpty(id, offsets) {
+ let element = document.getElementById(id);
+ let node = element.firstChild;
+ for (let offset of offsets) {
+ range.setStart(node, offset);
+ range.setEnd(node, offset + 1);
+ let rects = range.getClientRects();
+ let bounds = range.getBoundingClientRect();
+ if (rects.length <= 1)
+ continue;
+
+ if (!bounds.width || !bounds.height) {
+ // If all rects are empty, bounds should be equal to rects[0].
+ test(() => assert_equals_rect(bounds, rects[0]),
+ `${name}[${offset}]: ${rectToString(bounds)} should be equal to the first of ${rectsToString(rects)}`);
+ } else {
+ // Otherwise, it should be the union of rects excluding empty ones.
+ // Since we measure one character, it should have the same height as rects[0].
+ test(() => assert_equals(bounds.height, rects[0].height),
+ `${name}[${offset}]: Height of ${rectToString(bounds)} should match to the first of ${rectsToString(rects)}`);
+ }
+ }
+}
+
+function assert_equals_rect(actual, expected, description) {
+ for (let prop in expected)
+ assert_equals(actual[prop], expected[prop], description + "." + prop);
+}
+function rectsToString(rects) {
+ return "[" + Array.prototype.map.call(rects, rectToString).join() + "]";
+}
+
+function rectToString(r) {
+ return "(" + r.left + "," + r.top + "-" + r.width + "," + r.height + ")";
+}
+</script>

Powered by Google App Engine
This is Rietveld 408576698