mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 21:00:42 +02:00
Automatic update from web-platform-tests[LayoutNG] Allow epsilon when fitting into a line When NGLineBreaker tries to fit items into a line, rounding errors are hard to avoid. One case is to fit `monospace` font into a container whose `width` is set by `ch` unit. Blink computes `ch` units in float, then round to LayoutUnit. This rounding often prevents the specified number of characters to fit into the line. All 4 impls pass this test for `3ch` to `100ch`. Bug: 636993 Cq-Include-Trybots: luci.chromium.try :linux_layout_tests_layout_ng Change-Id: I9fe68a8bb44820aa15c7eb8c564776688c8320ee Reviewed-on: https://chromium-review.googlesource.com/1116409 Commit-Queue: Emil A Eklund <eae@chromium.org> Reviewed-by: Emil A Eklund <eae@chromium.org> Cr-Commit-Position: refs/heads/master@{#571642} -- wpt-commits: c360ca023dc5c341065de0f2814914b3c6004e4f wpt-pr: 11688 MozReview-Commit-ID: IgzIRG31IMn
52 lines
1.5 KiB
HTML
52 lines
1.5 KiB
HTML
<!DOCTYPE html>
|
|
<title>CSS Values and Units Test: Lines of the ch unit can fit the specified number of characters</title>
|
|
<link rel="help" href="https://drafts.csswg.org/css-values-3/#font-relative-lengths">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<style>
|
|
div {
|
|
font-family: monospace;
|
|
font-size: 10px;
|
|
line-height: 1;
|
|
}
|
|
</style>
|
|
<body>
|
|
<div id=log></div>
|
|
<script>
|
|
(function() {
|
|
// Test that lines do not wrap for elements of the width of
|
|
// 'ch' unit that have the specified number of characters.
|
|
let container = document.body;
|
|
let should_fit = [];
|
|
for (let i = 3; i < 100; i++) {
|
|
let element = document.createElement('div');
|
|
element.style.width = `${i}ch`;
|
|
element.textContent = `0 ${'0'.repeat(i - 2)}`;
|
|
container.appendChild(element);
|
|
should_fit.push(element);
|
|
}
|
|
|
|
// When the number of characters is +1, it should wrap.
|
|
let should_wrap = [];
|
|
for (let i = 3; i < 100; i++) {
|
|
let element = document.createElement('div');
|
|
element.style.width = `${i}ch`;
|
|
element.textContent = `0 ${'0'.repeat(i - 1)}`;
|
|
container.appendChild(element);
|
|
should_wrap.push(element);
|
|
}
|
|
|
|
for (let element of should_fit) {
|
|
test(() => {
|
|
assert_approx_equals(element.offsetHeight, 10, 1);
|
|
}, `${element.style.width} should fit`);
|
|
}
|
|
|
|
for (let element of should_wrap) {
|
|
test(() => {
|
|
assert_approx_equals(element.offsetHeight, 20, 1);
|
|
}, `${element.style.width} should wrap`);
|
|
}
|
|
})();
|
|
</script>
|
|
</body>
|