Title: [270248] trunk
Revision
270248
Author
[email protected]
Date
2020-11-30 09:39:41 -0800 (Mon, 30 Nov 2020)

Log Message

getComputedStyle rounds lineHeight to nearest pixel
https://bugs.webkit.org/show_bug.cgi?id=216601

Patch by Tyler Wilcock <[email protected]> on 2020-11-30
Reviewed by Simon Fraser.

LayoutTests/imported/w3c:

* web-platform-tests/css/css-fonts/parsing/font-computed-expected.txt:
    Update test reflecting the fact that serialization of `line-height` from
    `getComputedStyle` is now represented fractionally (when appropriate).
    Prior to this patch, `line-height` serialization was always an integer value.

Source/WebCore:

When serializing `line-height` for `getComputedStyle`, ensure the
value can be represented fractionally (when appropriate). Prior to this
patch, `line-height` serialization was always an integer value.  Per
spec, the used value of `line-height` can be a `<number>` value, which
is fractional.  Gecko and Chromium allow fractional `line-height`s to be
returned from `getComputedStyle`, further confirming this.

https://drafts.csswg.org/css2/#propdef-line-height

Test: fast/css/line-height-get-computed-style.html

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::lineHeightFromStyle): Cast result to `double` instead of
`int` since `line-height` can be represented fractionally.

LayoutTests:

Add test ensuring serialization of `line-height` from
`getComputedStyle` is represented fractionally (when appropriate).
Prior to this patch, `line-height` serialization was always an integer value.

The `line-height-rounding.html` test has been removed, as it expected
`line-height` to serialize as an integer, which seems wrong
considering the used value for `line-height` can be a `<number>`
(which is fractional).  Gecko and Chromium allow fractional
`line-height`s to be returned from `getComputedStyle`, further
confirming this.

https://drafts.csswg.org/css2/#propdef-line-height

* fast/css/line-height-get-computed-style-expected.txt: Added.
* fast/css/line-height-get-computed-style.html: Added.
* fast/css/line-height-rounding-expected.txt: Removed.
* fast/css/line-height-rounding.html: Removed.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (270247 => 270248)


--- trunk/LayoutTests/ChangeLog	2020-11-30 17:07:35 UTC (rev 270247)
+++ trunk/LayoutTests/ChangeLog	2020-11-30 17:39:41 UTC (rev 270248)
@@ -1,3 +1,28 @@
+2020-11-30  Tyler Wilcock  <[email protected]>
+
+        getComputedStyle rounds lineHeight to nearest pixel
+        https://bugs.webkit.org/show_bug.cgi?id=216601
+
+        Reviewed by Simon Fraser.
+
+        Add test ensuring serialization of `line-height` from
+        `getComputedStyle` is represented fractionally (when appropriate).
+        Prior to this patch, `line-height` serialization was always an integer value.
+
+        The `line-height-rounding.html` test has been removed, as it expected
+        `line-height` to serialize as an integer, which seems wrong
+        considering the used value for `line-height` can be a `<number>`
+        (which is fractional).  Gecko and Chromium allow fractional
+        `line-height`s to be returned from `getComputedStyle`, further
+        confirming this.
+
+        https://drafts.csswg.org/css2/#propdef-line-height
+
+        * fast/css/line-height-get-computed-style-expected.txt: Added.
+        * fast/css/line-height-get-computed-style.html: Added.
+        * fast/css/line-height-rounding-expected.txt: Removed.
+        * fast/css/line-height-rounding.html: Removed.
+
 2020-11-30  Lauro Moura  <[email protected]>
 
         [GLIB] Properly garden webrtc crashes

Added: trunk/LayoutTests/fast/css/line-height-get-computed-style-expected.txt (0 => 270248)


--- trunk/LayoutTests/fast/css/line-height-get-computed-style-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css/line-height-get-computed-style-expected.txt	2020-11-30 17:39:41 UTC (rev 270248)
@@ -0,0 +1,13 @@
+
+PASS with font-size: 10px, #target.style['line-height'] = 1e+26 should result in a used line-height of 9.999999146971785e+26px
+PASS with font-size: 10px, #target.style['line-height'] = 2.53821 should result in a used line-height of 25.382099151611328px
+PASS with font-size: 10px, #target.style['line-height'] = 2.6666667 should result in a used line-height of 26.666664123535156px
+PASS with font-size: 10px, #target.style['line-height'] = 2.123456789123457 should result in a used line-height of 21.234567642211914px
+PASS with font-size: 10px, #target.style['line-height'] = 2.5 should result in a used line-height of 25px
+PASS with font-size: 10px, #target.style['line-height'] = 2 should result in a used line-height of 20px
+PASS with font-size: 10px, #target.style['line-height'] = 1.05 should result in a used line-height of 10.5px
+PASS with font-size: 10px, #target.style['line-height'] = 1.049 should result in a used line-height of 10.489999771118164px
+PASS with font-size: 10px, #target.style['line-height'] = 1.0491 should result in a used line-height of 10.49100112915039px
+PASS with font-size: 10px, #target.style['line-height'] = 0 should result in a used line-height of 0px
+PASS with font-size: 10px, #target.style['line-height'] = 1 should result in a used line-height of 10px
+

Added: trunk/LayoutTests/fast/css/line-height-get-computed-style.html (0 => 270248)


--- trunk/LayoutTests/fast/css/line-height-get-computed-style.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css/line-height-get-computed-style.html	2020-11-30 17:39:41 UTC (rev 270248)
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <title>Test line-height `getComputedStyle` serialization</title>
+    <style>
+        #target {
+            font-family: Ahem;
+            font-size: 10px;
+        }
+    </style>
+</head>
+<body>
+<p id="target">text of font-size 10px</p>
+<script src=""
+<script src=""
+<script>
+    let target = document.getElementById('target')
+    const test_line_height = (line_height_percent, expected_line_height) => {
+        test(() => {
+            target.style['line-height'] = line_height_percent
+            const actual_line_height = window.getComputedStyle(target)['line-height']
+            assert_equals(actual_line_height, expected_line_height)
+        }, `with font-size: 10px, #target.style['line-height'] = ${line_height_percent} should result in a used line-height of ${expected_line_height}`)
+    }
+    
+    // Per spec, CSS numbers shouldn't serialize with exponents.  When the following bug is fixed, this expectation will
+    // need to be updated. https://bugs.webkit.org/show_bug.cgi?id=218880
+    test_line_height(1e+26, '9.999999146971785e+26px')
+    
+    // Per spec, CSS numbers shouldn't serialize with more than 6 digits.  When the following bug is fixed, the
+    // offending expectations below will need to be updated. https://bugs.webkit.org/show_bug.cgi?id=218880
+    test_line_height(2.53821, '25.382099151611328px')
+    test_line_height(2.6666667, '26.666664123535156px')
+    // 20 decimals.
+    test_line_height(2.12345678912345678912, '21.234567642211914px')
+    test_line_height(2.5, '25px')
+    test_line_height(2, '20px')
+    test_line_height(1.05, '10.5px')
+    test_line_height(1.049, '10.489999771118164px')
+    test_line_height(1.0491, '10.49100112915039px')
+    test_line_height(0, '0px')
+    test_line_height(1, '10px')
+    
+    target.remove()
+</script>
+</body>
+</html>

Deleted: trunk/LayoutTests/fast/css/line-height-rounding-expected.txt (270247 => 270248)


--- trunk/LayoutTests/fast/css/line-height-rounding-expected.txt	2020-11-30 17:07:35 UTC (rev 270247)
+++ trunk/LayoutTests/fast/css/line-height-rounding-expected.txt	2020-11-30 17:39:41 UTC (rev 270248)
@@ -1,5 +0,0 @@
-This tests non-integer line height is rounded to the nearest integer.
-
-Test failed:
-FAIL: font size: 10px; line height percent: 1.05; expected line height: 11px; actual line height: 10px
-

Deleted: trunk/LayoutTests/fast/css/line-height-rounding.html (270247 => 270248)


--- trunk/LayoutTests/fast/css/line-height-rounding.html	2020-11-30 17:07:35 UTC (rev 270247)
+++ trunk/LayoutTests/fast/css/line-height-rounding.html	2020-11-30 17:39:41 UTC (rev 270248)
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-<style type="text/css">
-</style>
-
-<script>
-if (window.testRunner)
-    testRunner.dumpAsText();
-
-function checkLineHeight(fontSize, lineHeightPercent, expectedLineHeight) {
-    var testElement = document.getElementById('testElement');
-    testElement.style.fontSize = fontSize;
-    testElement.style.lineHeight = lineHeightPercent;
-
-    var style = document.defaultView.getComputedStyle(testElement, null);
-    var actualLineHeight = style.getPropertyValue('line-height');
-    if (actualLineHeight != expectedLineHeight) {
-        return "FAIL: font size: " + fontSize +
-               "; line height percent: " + lineHeightPercent +
-               "; expected line height: " + expectedLineHeight +
-               "; actual line height: " + actualLineHeight + "<br>";
-    }
-
-    return "";
-}
-
-function test() {
-    var message = checkLineHeight("10px", 1.05, '11px');  // 10*1.05  = 10.50
-    message += checkLineHeight("10px", 1.049, '10px');    // 10*1.049 = 10.49
-    message += checkLineHeight("10px", 0, '0px');         // 10*0 = 0
-    message += checkLineHeight("10px", 1, '10px');        // 10*1.00 = 10.00
-
-    if (message != "")
-        document.getElementById("results").innerHTML = "Test failed:<br>" + message;
-    else
-        document.getElementById("results").innerHTML = "Test passed.";
-
-    document.getElementById('testElement').innerHTML = "";
-}
-
-</script>
-</head>
-<body _onload_="test()">
-    <p>This tests non-integer line height is rounded to the nearest integer.</p>
-    <p id='testElement'>test data</p> 
-    <div id='results'></div>
-</body>
-</html>

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (270247 => 270248)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2020-11-30 17:07:35 UTC (rev 270247)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2020-11-30 17:39:41 UTC (rev 270248)
@@ -1,3 +1,15 @@
+2020-11-30  Tyler Wilcock  <[email protected]>
+
+        getComputedStyle rounds lineHeight to nearest pixel
+        https://bugs.webkit.org/show_bug.cgi?id=216601
+
+        Reviewed by Simon Fraser.
+
+        * web-platform-tests/css/css-fonts/parsing/font-computed-expected.txt:
+            Update test reflecting the fact that serialization of `line-height` from
+            `getComputedStyle` is now represented fractionally (when appropriate).
+            Prior to this patch, `line-height` serialization was always an integer value.
+
 2020-11-30  Sergio Villar Senin  <[email protected]>
 
         [css-flex] Import flex-aspect-ratio-img-* tests

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/parsing/font-computed-expected.txt (270247 => 270248)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/parsing/font-computed-expected.txt	2020-11-30 17:07:35 UTC (rev 270247)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-fonts/parsing/font-computed-expected.txt	2020-11-30 17:39:41 UTC (rev 270248)
@@ -7,7 +7,7 @@
 PASS status-bar should be a supported system font.
 FAIL Property font value 'xx-small serif' assert_equals: expected "9px serif" but got "normal normal normal normal 9px/normal serif"
 FAIL Property font value 'normal medium/normal sans-serif' assert_equals: expected "16px sans-serif" but got "normal normal normal normal 16px/normal sans-serif"
-FAIL Property font value 'normal normal xx-large/1.2 cursive' assert_equals: expected "32px / 38px cursive" but got "normal normal normal normal 32px/38px cursive"
+FAIL Property font value 'normal normal xx-large/1.2 cursive' assert_equals: expected "32px / 38.400001525878906px cursive" but got "normal normal normal normal 32px/38.400001525878906px cursive"
 FAIL Property font value 'normal normal normal larger/calc(120% + 1.2em) fantasy' assert_equals: expected "48px / normal fantasy" but got "normal normal normal normal 48px/normal fantasy"
 FAIL Property font value 'normal normal normal normal smaller monospace' assert_equals: expected "33.33333206176758px monospace" but got "normal normal normal normal 33.33333206176758px/normal monospace"
 FAIL Property font value 'normal normal normal italic 10px/normal Menu' assert_true: 'normal normal normal italic 10px/normal Menu' is a supported value for font. expected true got false
@@ -63,19 +63,19 @@
 FAIL Property font value 'normal small-caps italic lighter calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_true: 'normal small-caps italic lighter calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' is a supported value for font. expected true got false
 FAIL Property font value 'normal small-caps italic extra-condensed xx-small serif' assert_true: 'normal small-caps italic extra-condensed xx-small serif' is a supported value for font. expected true got false
 FAIL Property font value 'normal small-caps 100 medium/normal sans-serif' assert_equals: expected "small-caps 100 16px sans-serif" but got "normal small-caps 100 normal 16px/normal sans-serif"
-FAIL Property font value 'normal small-caps 900 normal xx-large/1.2 cursive' assert_equals: expected "small-caps 900 32px / 38px cursive" but got "normal small-caps 900 normal 32px/38px cursive"
+FAIL Property font value 'normal small-caps 900 normal xx-large/1.2 cursive' assert_equals: expected "small-caps 900 32px / 38.400001525878906px cursive" but got "normal small-caps 900 normal 32px/38.400001525878906px cursive"
 FAIL Property font value 'normal small-caps bold italic larger/calc(120% + 1.2em) fantasy' assert_true: 'normal small-caps bold italic larger/calc(120% + 1.2em) fantasy' is a supported value for font. expected true got false
 FAIL Property font value 'normal small-caps bolder condensed smaller monospace' assert_equals: expected "small-caps 900 condensed 33.33333206176758px monospace" but got "normal small-caps 900 condensed 33.33333206176758px/normal monospace"
 FAIL Property font value 'normal small-caps semi-condensed 10px/normal Menu' assert_equals: expected "small-caps semi-condensed 10px Menu" but got "normal small-caps normal semi-condensed 10px/normal Menu"
-FAIL Property font value 'normal small-caps semi-expanded normal 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "small-caps semi-expanded 8px / 9px \"Non-Generic Example Family Name\"" but got "normal small-caps normal semi-expanded 8px/9px \"Non-Generic Example Family Name\""
+FAIL Property font value 'normal small-caps semi-expanded normal 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "small-caps semi-expanded 8px / 9.600000381469727px \"Non-Generic Example Family Name\"" but got "normal small-caps normal semi-expanded 8px/9.600000381469727px \"Non-Generic Example Family Name\""
 FAIL Property font value 'normal small-caps expanded italic calc(30% - 40px)/calc(120% + 1.2em) serif' assert_true: 'normal small-caps expanded italic calc(30% - 40px)/calc(120% + 1.2em) serif' is a supported value for font. expected true got false
 FAIL Property font value 'normal small-caps extra-expanded lighter xx-small sans-serif' assert_equals: expected "small-caps bold extra-expanded 9px sans-serif" but got "normal small-caps bold extra-expanded 9px/normal sans-serif"
 FAIL Property font value 'normal 100 medium/normal cursive' assert_equals: expected "100 16px cursive" but got "normal normal 100 normal 16px/normal cursive"
-FAIL Property font value 'normal 900 normal xx-large/1.2 fantasy' assert_equals: expected "900 32px / 38px fantasy" but got "normal normal 900 normal 32px/38px fantasy"
+FAIL Property font value 'normal 900 normal xx-large/1.2 fantasy' assert_equals: expected "900 32px / 38.400001525878906px fantasy" but got "normal normal 900 normal 32px/38.400001525878906px fantasy"
 FAIL Property font value 'normal bold normal normal larger/calc(120% + 1.2em) monospace' assert_equals: expected "bold 48px / normal monospace" but got "normal normal bold normal 48px/normal monospace"
 FAIL Property font value 'normal bolder normal italic smaller Menu' assert_true: 'normal bolder normal italic smaller Menu' is a supported value for font. expected true got false
 FAIL Property font value 'normal lighter normal small-caps 10px/normal "Non-Generic Example Family Name"' assert_true: 'normal lighter normal small-caps 10px/normal "Non-Generic Example Family Name"' is a supported value for font. expected true got false
-FAIL Property font value 'normal 100 normal ultra-expanded 20%/1.2 serif' assert_equals: expected "100 ultra-expanded 8px / 9px serif" but got "normal normal 100 ultra-expanded 8px/9px serif"
+FAIL Property font value 'normal 100 normal ultra-expanded 20%/1.2 serif' assert_equals: expected "100 ultra-expanded 8px / 9.600000381469727px serif" but got "normal normal 100 ultra-expanded 8px/9.600000381469727px serif"
 FAIL Property font value 'normal 900 italic calc(30% - 40px)/calc(120% + 1.2em) sans-serif' assert_true: 'normal 900 italic calc(30% - 40px)/calc(120% + 1.2em) sans-serif' is a supported value for font. expected true got false
 FAIL Property font value 'normal bold italic normal xx-small cursive' assert_true: 'normal bold italic normal xx-small cursive' is a supported value for font. expected true got false
 FAIL Property font value 'normal bolder italic small-caps medium/normal fantasy' assert_true: 'normal bolder italic small-caps medium/normal fantasy' is a supported value for font. expected true got false
@@ -83,11 +83,11 @@
 FAIL Property font value 'normal 100 small-caps larger/calc(120% + 1.2em) Menu' assert_equals: expected "small-caps 100 48px / normal Menu" but got "normal small-caps 100 normal 48px/normal Menu"
 FAIL Property font value 'normal 900 small-caps normal smaller "Non-Generic Example Family Name"' assert_equals: expected "small-caps 900 33.33333206176758px \"Non-Generic Example Family Name\"" but got "normal small-caps 900 normal 33.33333206176758px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'normal bold small-caps italic 10px/normal serif' assert_true: 'normal bold small-caps italic 10px/normal serif' is a supported value for font. expected true got false
-FAIL Property font value 'normal bolder small-caps extra-condensed 20%/1.2 sans-serif' assert_equals: expected "small-caps 900 extra-condensed 8px / 9px sans-serif" but got "normal small-caps 900 extra-condensed 8px/9px sans-serif"
+FAIL Property font value 'normal bolder small-caps extra-condensed 20%/1.2 sans-serif' assert_equals: expected "small-caps 900 extra-condensed 8px / 9.600000381469727px sans-serif" but got "normal small-caps 900 extra-condensed 8px/9.600000381469727px sans-serif"
 FAIL Property font value 'normal lighter condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' assert_equals: expected "bold condensed 0px / normal cursive" but got "normal normal bold condensed 0px/normal cursive"
 FAIL Property font value 'normal 100 semi-condensed normal xx-small fantasy' assert_equals: expected "100 semi-condensed 9px fantasy" but got "normal normal 100 semi-condensed 9px/normal fantasy"
 FAIL Property font value 'normal 900 semi-expanded italic medium/normal monospace' assert_true: 'normal 900 semi-expanded italic medium/normal monospace' is a supported value for font. expected true got false
-FAIL Property font value 'normal bold expanded small-caps xx-large/1.2 Menu' assert_equals: expected "small-caps bold expanded 32px / 38px Menu" but got "normal small-caps bold expanded 32px/38px Menu"
+FAIL Property font value 'normal bold expanded small-caps xx-large/1.2 Menu' assert_equals: expected "small-caps bold expanded 32px / 38.400001525878906px Menu" but got "normal small-caps bold expanded 32px/38.400001525878906px Menu"
 FAIL Property font value 'normal extra-expanded larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_equals: expected "extra-expanded 48px / normal \"Non-Generic Example Family Name\"" but got "normal normal normal extra-expanded 48px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'normal ultra-expanded normal smaller serif' assert_equals: expected "ultra-expanded 33.33333206176758px serif" but got "normal normal normal ultra-expanded 33.33333206176758px/normal serif"
 FAIL Property font value 'normal ultra-condensed normal normal 10px/normal sans-serif' assert_equals: expected "ultra-condensed 10px sans-serif" but got "normal normal normal ultra-condensed 10px/normal sans-serif"
@@ -99,15 +99,15 @@
 FAIL Property font value 'normal extra-expanded italic small-caps larger/calc(120% + 1.2em) serif' assert_true: 'normal extra-expanded italic small-caps larger/calc(120% + 1.2em) serif' is a supported value for font. expected true got false
 FAIL Property font value 'normal ultra-expanded italic lighter smaller sans-serif' assert_true: 'normal ultra-expanded italic lighter smaller sans-serif' is a supported value for font. expected true got false
 FAIL Property font value 'normal ultra-condensed small-caps 10px/normal cursive' assert_equals: expected "small-caps ultra-condensed 10px cursive" but got "normal small-caps normal ultra-condensed 10px/normal cursive"
-FAIL Property font value 'normal extra-condensed small-caps normal 20%/1.2 fantasy' assert_equals: expected "small-caps extra-condensed 8px / 9px fantasy" but got "normal small-caps normal extra-condensed 8px/9px fantasy"
+FAIL Property font value 'normal extra-condensed small-caps normal 20%/1.2 fantasy' assert_equals: expected "small-caps extra-condensed 8px / 9.600000381469727px fantasy" but got "normal small-caps normal extra-condensed 8px/9.600000381469727px fantasy"
 FAIL Property font value 'normal condensed small-caps italic calc(30% - 40px)/calc(120% + 1.2em) monospace' assert_true: 'normal condensed small-caps italic calc(30% - 40px)/calc(120% + 1.2em) monospace' is a supported value for font. expected true got false
 FAIL Property font value 'normal semi-condensed small-caps 100 xx-small Menu' assert_equals: expected "small-caps 100 semi-condensed 9px Menu" but got "normal small-caps 100 semi-condensed 9px/normal Menu"
 FAIL Property font value 'normal semi-expanded 900 medium/normal "Non-Generic Example Family Name"' assert_equals: expected "900 semi-expanded 16px \"Non-Generic Example Family Name\"" but got "normal normal 900 semi-expanded 16px/normal \"Non-Generic Example Family Name\""
-FAIL Property font value 'normal expanded bold normal xx-large/1.2 serif' assert_equals: expected "bold expanded 32px / 38px serif" but got "normal normal bold expanded 32px/38px serif"
+FAIL Property font value 'normal expanded bold normal xx-large/1.2 serif' assert_equals: expected "bold expanded 32px / 38.400001525878906px serif" but got "normal normal bold expanded 32px/38.400001525878906px serif"
 FAIL Property font value 'normal extra-expanded bolder italic larger/calc(120% + 1.2em) sans-serif' assert_true: 'normal extra-expanded bolder italic larger/calc(120% + 1.2em) sans-serif' is a supported value for font. expected true got false
 FAIL Property font value 'normal ultra-expanded lighter small-caps smaller cursive' assert_equals: expected "small-caps bold ultra-expanded 33.33333206176758px cursive" but got "normal small-caps bold ultra-expanded 33.33333206176758px/normal cursive"
 FAIL Property font value 'italic 10px/normal fantasy' assert_equals: expected "italic 10px fantasy" but got "italic normal normal normal 10px/normal fantasy"
-FAIL Property font value 'italic normal 20%/1.2 monospace' assert_equals: expected "italic 8px / 9px monospace" but got "italic normal normal normal 8px/9px monospace"
+FAIL Property font value 'italic normal 20%/1.2 monospace' assert_equals: expected "italic 8px / 9.600000381469727px monospace" but got "italic normal normal normal 8px/9.600000381469727px monospace"
 FAIL Property font value 'italic normal normal calc(30% - 40px)/calc(120% + 1.2em) Menu' assert_equals: expected "italic 0px / normal Menu" but got "italic normal normal normal 0px/normal Menu"
 FAIL Property font value 'italic normal normal normal xx-small "Non-Generic Example Family Name"' assert_equals: expected "italic 9px \"Non-Generic Example Family Name\"" but got "italic normal normal normal 9px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'italic normal normal small-caps medium/normal serif' assert_true: 'italic normal normal small-caps medium/normal serif' is a supported value for font. expected true got false
@@ -127,15 +127,15 @@
 FAIL Property font value 'italic normal extra-expanded 900 calc(30% - 40px)/calc(120% + 1.2em) serif' assert_equals: expected "italic 900 extra-expanded 0px / normal serif" but got "italic normal 900 extra-expanded 0px/normal serif"
 FAIL Property font value 'italic small-caps xx-small sans-serif' assert_equals: expected "italic small-caps 9px sans-serif" but got "italic small-caps normal normal 9px/normal sans-serif"
 FAIL Property font value 'italic small-caps normal medium/normal cursive' assert_equals: expected "italic small-caps 16px cursive" but got "italic small-caps normal normal 16px/normal cursive"
-FAIL Property font value 'italic small-caps normal normal xx-large/1.2 fantasy' assert_equals: expected "italic small-caps 32px / 38px fantasy" but got "italic small-caps normal normal 32px/38px fantasy"
+FAIL Property font value 'italic small-caps normal normal xx-large/1.2 fantasy' assert_equals: expected "italic small-caps 32px / 38.400001525878906px fantasy" but got "italic small-caps normal normal 32px/38.400001525878906px fantasy"
 FAIL Property font value 'italic small-caps normal bold larger/calc(120% + 1.2em) monospace' assert_true: 'italic small-caps normal bold larger/calc(120% + 1.2em) monospace' is a supported value for font. expected true got false
 FAIL Property font value 'italic small-caps normal ultra-expanded smaller Menu' assert_equals: expected "italic small-caps ultra-expanded 33.33333206176758px Menu" but got "italic small-caps normal ultra-expanded 33.33333206176758px/normal Menu"
 FAIL Property font value 'italic small-caps bolder 10px/normal "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps 900 10px \"Non-Generic Example Family Name\"" but got "italic small-caps 900 normal 10px/normal \"Non-Generic Example Family Name\""
-FAIL Property font value 'italic small-caps lighter normal 20%/1.2 serif' assert_equals: expected "italic small-caps bold 8px / 9px serif" but got "italic small-caps bold normal 8px/9px serif"
+FAIL Property font value 'italic small-caps lighter normal 20%/1.2 serif' assert_equals: expected "italic small-caps bold 8px / 9.600000381469727px serif" but got "italic small-caps bold normal 8px/9.600000381469727px serif"
 FAIL Property font value 'italic small-caps 100 ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) sans-serif' assert_equals: expected "italic small-caps 100 ultra-condensed 0px / normal sans-serif" but got "italic small-caps 100 ultra-condensed 0px/normal sans-serif"
 FAIL Property font value 'italic small-caps extra-condensed xx-small cursive' assert_equals: expected "italic small-caps extra-condensed 9px cursive" but got "italic small-caps normal extra-condensed 9px/normal cursive"
 FAIL Property font value 'italic small-caps condensed normal medium/normal fantasy' assert_equals: expected "italic small-caps condensed 16px fantasy" but got "italic small-caps normal condensed 16px/normal fantasy"
-FAIL Property font value 'italic small-caps semi-condensed 900 xx-large/1.2 monospace' assert_equals: expected "italic small-caps 900 semi-condensed 26px / 31px monospace" but got "italic small-caps 900 semi-condensed 26px/31px monospace"
+FAIL Property font value 'italic small-caps semi-condensed 900 xx-large/1.2 monospace' assert_equals: expected "italic small-caps 900 semi-condensed 26px / 31.200000762939453px monospace" but got "italic small-caps 900 semi-condensed 26px/31.200000762939453px monospace"
 FAIL Property font value 'italic bold larger/calc(120% + 1.2em) Menu' assert_equals: expected "italic bold 48px / normal Menu" but got "italic normal bold normal 48px/normal Menu"
 FAIL Property font value 'italic bolder normal smaller "Non-Generic Example Family Name"' assert_equals: expected "italic 900 33.33333206176758px \"Non-Generic Example Family Name\"" but got "italic normal 900 normal 33.33333206176758px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'italic lighter normal normal 10px/normal serif' assert_equals: expected "italic bold 10px serif" but got "italic normal bold normal 10px/normal serif"
@@ -143,23 +143,23 @@
 FAIL Property font value 'italic 900 normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) cursive' assert_equals: expected "italic 900 semi-expanded 0px / normal cursive" but got "italic normal 900 semi-expanded 0px/normal cursive"
 FAIL Property font value 'italic bold small-caps xx-small fantasy' assert_equals: expected "italic small-caps bold 9px fantasy" but got "italic small-caps bold normal 9px/normal fantasy"
 FAIL Property font value 'italic bolder small-caps normal medium/normal monospace' assert_equals: expected "italic small-caps 900 13px monospace" but got "italic small-caps 900 normal 13px/normal monospace"
-FAIL Property font value 'italic lighter small-caps expanded xx-large/1.2 Menu' assert_equals: expected "italic small-caps bold expanded 32px / 38px Menu" but got "italic small-caps bold expanded 32px/38px Menu"
+FAIL Property font value 'italic lighter small-caps expanded xx-large/1.2 Menu' assert_equals: expected "italic small-caps bold expanded 32px / 38.400001525878906px Menu" but got "italic small-caps bold expanded 32px/38.400001525878906px Menu"
 FAIL Property font value 'italic 100 extra-expanded larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_equals: expected "italic 100 extra-expanded 48px / normal \"Non-Generic Example Family Name\"" but got "italic normal 100 extra-expanded 48px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'italic 900 ultra-expanded normal smaller serif' assert_equals: expected "italic 900 ultra-expanded 33.33333206176758px serif" but got "italic normal 900 ultra-expanded 33.33333206176758px/normal serif"
 FAIL Property font value 'italic bold ultra-condensed small-caps 10px/normal sans-serif' assert_equals: expected "italic small-caps bold ultra-condensed 10px sans-serif" but got "italic small-caps bold ultra-condensed 10px/normal sans-serif"
-FAIL Property font value 'italic extra-condensed 20%/1.2 cursive' assert_equals: expected "italic extra-condensed 8px / 9px cursive" but got "italic normal normal extra-condensed 8px/9px cursive"
+FAIL Property font value 'italic extra-condensed 20%/1.2 cursive' assert_equals: expected "italic extra-condensed 8px / 9.600000381469727px cursive" but got "italic normal normal extra-condensed 8px/9.600000381469727px cursive"
 FAIL Property font value 'italic condensed normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' assert_equals: expected "italic condensed 0px / normal fantasy" but got "italic normal normal condensed 0px/normal fantasy"
 FAIL Property font value 'italic semi-condensed normal normal xx-small monospace' assert_equals: expected "italic semi-condensed 9px monospace" but got "italic normal normal semi-condensed 9px/normal monospace"
 FAIL Property font value 'italic semi-expanded normal small-caps medium/normal Menu' assert_true: 'italic semi-expanded normal small-caps medium/normal Menu' is a supported value for font. expected true got false
-FAIL Property font value 'italic expanded normal bolder xx-large/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic 900 expanded 32px / 38px \"Non-Generic Example Family Name\"" but got "italic normal 900 expanded 32px/38px \"Non-Generic Example Family Name\""
+FAIL Property font value 'italic expanded normal bolder xx-large/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic 900 expanded 32px / 38.400001525878906px \"Non-Generic Example Family Name\"" but got "italic normal 900 expanded 32px/38.400001525878906px \"Non-Generic Example Family Name\""
 FAIL Property font value 'italic extra-expanded small-caps larger/calc(120% + 1.2em) serif' assert_equals: expected "italic small-caps extra-expanded 48px / normal serif" but got "italic small-caps normal extra-expanded 48px/normal serif"
 FAIL Property font value 'italic ultra-expanded small-caps normal smaller sans-serif' assert_equals: expected "italic small-caps ultra-expanded 33.33333206176758px sans-serif" but got "italic small-caps normal ultra-expanded 33.33333206176758px/normal sans-serif"
 FAIL Property font value 'italic ultra-condensed small-caps lighter 10px/normal cursive' assert_equals: expected "italic small-caps bold ultra-condensed 10px cursive" but got "italic small-caps bold ultra-condensed 10px/normal cursive"
-FAIL Property font value 'italic extra-condensed 100 20%/1.2 fantasy' assert_equals: expected "italic 100 extra-condensed 8px / 9px fantasy" but got "italic normal 100 extra-condensed 8px/9px fantasy"
+FAIL Property font value 'italic extra-condensed 100 20%/1.2 fantasy' assert_equals: expected "italic 100 extra-condensed 8px / 9.600000381469727px fantasy" but got "italic normal 100 extra-condensed 8px/9.600000381469727px fantasy"
 FAIL Property font value 'italic condensed 900 normal calc(30% - 40px)/calc(120% + 1.2em) monospace' assert_equals: expected "italic 900 condensed 0px / normal monospace" but got "italic normal 900 condensed 0px/normal monospace"
 FAIL Property font value 'italic semi-condensed bold small-caps xx-small Menu' assert_equals: expected "italic small-caps bold semi-condensed 9px Menu" but got "italic small-caps bold semi-condensed 9px/normal Menu"
 FAIL Property font value 'small-caps medium/normal "Non-Generic Example Family Name"' assert_equals: expected "small-caps 16px \"Non-Generic Example Family Name\"" but got "normal small-caps normal normal 16px/normal \"Non-Generic Example Family Name\""
-FAIL Property font value 'small-caps normal xx-large/1.2 serif' assert_equals: expected "small-caps 32px / 38px serif" but got "normal small-caps normal normal 32px/38px serif"
+FAIL Property font value 'small-caps normal xx-large/1.2 serif' assert_equals: expected "small-caps 32px / 38.400001525878906px serif" but got "normal small-caps normal normal 32px/38.400001525878906px serif"
 FAIL Property font value 'small-caps normal normal larger/calc(120% + 1.2em) sans-serif' assert_equals: expected "small-caps 48px / normal sans-serif" but got "normal small-caps normal normal 48px/normal sans-serif"
 FAIL Property font value 'small-caps normal normal normal smaller cursive' assert_equals: expected "small-caps 33.33333206176758px cursive" but got "normal small-caps normal normal 33.33333206176758px/normal cursive"
 FAIL Property font value 'small-caps normal normal italic 10px/normal fantasy' assert_true: 'small-caps normal normal italic 10px/normal fantasy' is a supported value for font. expected true got false
@@ -179,15 +179,15 @@
 FAIL Property font value 'small-caps normal condensed lighter larger/calc(120% + 1.2em) fantasy' assert_equals: expected "small-caps bold condensed 48px / normal fantasy" but got "normal small-caps bold condensed 48px/normal fantasy"
 FAIL Property font value 'small-caps italic smaller monospace' assert_equals: expected "italic small-caps 33.33333206176758px monospace" but got "italic small-caps normal normal 33.33333206176758px/normal monospace"
 FAIL Property font value 'small-caps italic normal 10px/normal Menu' assert_equals: expected "italic small-caps 10px Menu" but got "italic small-caps normal normal 10px/normal Menu"
-FAIL Property font value 'small-caps italic normal normal 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps 8px / 9px \"Non-Generic Example Family Name\"" but got "italic small-caps normal normal 8px/9px \"Non-Generic Example Family Name\""
+FAIL Property font value 'small-caps italic normal normal 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps 8px / 9.600000381469727px \"Non-Generic Example Family Name\"" but got "italic small-caps normal normal 8px/9.600000381469727px \"Non-Generic Example Family Name\""
 FAIL Property font value 'small-caps italic normal 100 calc(30% - 40px)/calc(120% + 1.2em) serif' assert_true: 'small-caps italic normal 100 calc(30% - 40px)/calc(120% + 1.2em) serif' is a supported value for font. expected true got false
 FAIL Property font value 'small-caps italic normal semi-condensed xx-small sans-serif' assert_equals: expected "italic small-caps semi-condensed 9px sans-serif" but got "italic small-caps normal semi-condensed 9px/normal sans-serif"
 FAIL Property font value 'small-caps italic 900 medium/normal cursive' assert_equals: expected "italic small-caps 900 16px cursive" but got "italic small-caps 900 normal 16px/normal cursive"
-FAIL Property font value 'small-caps italic bold normal xx-large/1.2 fantasy' assert_equals: expected "italic small-caps bold 32px / 38px fantasy" but got "italic small-caps bold normal 32px/38px fantasy"
+FAIL Property font value 'small-caps italic bold normal xx-large/1.2 fantasy' assert_equals: expected "italic small-caps bold 32px / 38.400001525878906px fantasy" but got "italic small-caps bold normal 32px/38.400001525878906px fantasy"
 FAIL Property font value 'small-caps italic bolder semi-expanded larger/calc(120% + 1.2em) monospace' assert_equals: expected "italic small-caps 900 semi-expanded 48px / normal monospace" but got "italic small-caps 900 semi-expanded 48px/normal monospace"
 FAIL Property font value 'small-caps italic expanded smaller Menu' assert_equals: expected "italic small-caps expanded 33.33333206176758px Menu" but got "italic small-caps normal expanded 33.33333206176758px/normal Menu"
 FAIL Property font value 'small-caps italic extra-expanded normal 10px/normal "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps extra-expanded 10px \"Non-Generic Example Family Name\"" but got "italic small-caps normal extra-expanded 10px/normal \"Non-Generic Example Family Name\""
-FAIL Property font value 'small-caps italic ultra-expanded lighter 20%/1.2 serif' assert_equals: expected "italic small-caps bold ultra-expanded 8px / 9px serif" but got "italic small-caps bold ultra-expanded 8px/9px serif"
+FAIL Property font value 'small-caps italic ultra-expanded lighter 20%/1.2 serif' assert_equals: expected "italic small-caps bold ultra-expanded 8px / 9.600000381469727px serif" but got "italic small-caps bold ultra-expanded 8px/9.600000381469727px serif"
 FAIL Property font value 'small-caps 100 calc(30% - 40px)/calc(120% + 1.2em) sans-serif' assert_equals: expected "small-caps 100 0px / normal sans-serif" but got "normal small-caps 100 normal 0px/normal sans-serif"
 FAIL Property font value 'small-caps 900 normal xx-small cursive' assert_equals: expected "small-caps 900 9px cursive" but got "normal small-caps 900 normal 9px/normal cursive"
 FAIL Property font value 'small-caps bold normal normal medium/normal fantasy' assert_equals: expected "small-caps bold 16px fantasy" but got "normal small-caps bold normal 16px/normal fantasy"
@@ -195,23 +195,23 @@
 FAIL Property font value 'small-caps lighter normal ultra-condensed larger/calc(120% + 1.2em) Menu' assert_equals: expected "small-caps bold ultra-condensed 48px / normal Menu" but got "normal small-caps bold ultra-condensed 48px/normal Menu"
 FAIL Property font value 'small-caps 100 italic smaller "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps 100 33.33333206176758px \"Non-Generic Example Family Name\"" but got "italic small-caps 100 normal 33.33333206176758px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'small-caps 900 italic normal 10px/normal serif' assert_equals: expected "italic small-caps 900 10px serif" but got "italic small-caps 900 normal 10px/normal serif"
-FAIL Property font value 'small-caps bold italic extra-condensed 20%/1.2 sans-serif' assert_equals: expected "italic small-caps bold extra-condensed 8px / 9px sans-serif" but got "italic small-caps bold extra-condensed 8px/9px sans-serif"
+FAIL Property font value 'small-caps bold italic extra-condensed 20%/1.2 sans-serif' assert_equals: expected "italic small-caps bold extra-condensed 8px / 9.600000381469727px sans-serif" but got "italic small-caps bold extra-condensed 8px/9.600000381469727px sans-serif"
 FAIL Property font value 'small-caps bolder condensed calc(30% - 40px)/calc(120% + 1.2em) cursive' assert_equals: expected "small-caps 900 condensed 0px / normal cursive" but got "normal small-caps 900 condensed 0px/normal cursive"
 FAIL Property font value 'small-caps lighter semi-condensed normal xx-small fantasy' assert_equals: expected "small-caps bold semi-condensed 9px fantasy" but got "normal small-caps bold semi-condensed 9px/normal fantasy"
 FAIL Property font value 'small-caps 100 semi-expanded italic medium/normal monospace' assert_equals: expected "italic small-caps 100 semi-expanded 13px monospace" but got "italic small-caps 100 semi-expanded 13px/normal monospace"
-FAIL Property font value 'small-caps expanded xx-large/1.2 Menu' assert_equals: expected "small-caps expanded 32px / 38px Menu" but got "normal small-caps normal expanded 32px/38px Menu"
+FAIL Property font value 'small-caps expanded xx-large/1.2 Menu' assert_equals: expected "small-caps expanded 32px / 38.400001525878906px Menu" but got "normal small-caps normal expanded 32px/38.400001525878906px Menu"
 FAIL Property font value 'small-caps extra-expanded normal larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_equals: expected "small-caps extra-expanded 48px / normal \"Non-Generic Example Family Name\"" but got "normal small-caps normal extra-expanded 48px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'small-caps ultra-expanded normal normal smaller serif' assert_equals: expected "small-caps ultra-expanded 33.33333206176758px serif" but got "normal small-caps normal ultra-expanded 33.33333206176758px/normal serif"
 FAIL Property font value 'small-caps ultra-condensed normal italic 10px/normal sans-serif' assert_true: 'small-caps ultra-condensed normal italic 10px/normal sans-serif' is a supported value for font. expected true got false
-FAIL Property font value 'small-caps extra-condensed normal 900 20%/1.2 cursive' assert_equals: expected "small-caps 900 extra-condensed 8px / 9px cursive" but got "normal small-caps 900 extra-condensed 8px/9px cursive"
+FAIL Property font value 'small-caps extra-condensed normal 900 20%/1.2 cursive' assert_equals: expected "small-caps 900 extra-condensed 8px / 9.600000381469727px cursive" but got "normal small-caps 900 extra-condensed 8px/9.600000381469727px cursive"
 FAIL Property font value 'small-caps condensed italic calc(30% - 40px)/calc(120% + 1.2em) fantasy' assert_equals: expected "italic small-caps condensed 0px / normal fantasy" but got "italic small-caps normal condensed 0px/normal fantasy"
 FAIL Property font value 'small-caps semi-condensed italic normal xx-small monospace' assert_equals: expected "italic small-caps semi-condensed 9px monospace" but got "italic small-caps normal semi-condensed 9px/normal monospace"
 FAIL Property font value 'small-caps semi-expanded italic bold medium/normal Menu' assert_equals: expected "italic small-caps bold semi-expanded 16px Menu" but got "italic small-caps bold semi-expanded 16px/normal Menu"
-FAIL Property font value 'small-caps expanded bolder xx-large/1.2 "Non-Generic Example Family Name"' assert_equals: expected "small-caps 900 expanded 32px / 38px \"Non-Generic Example Family Name\"" but got "normal small-caps 900 expanded 32px/38px \"Non-Generic Example Family Name\""
+FAIL Property font value 'small-caps expanded bolder xx-large/1.2 "Non-Generic Example Family Name"' assert_equals: expected "small-caps 900 expanded 32px / 38.400001525878906px \"Non-Generic Example Family Name\"" but got "normal small-caps 900 expanded 32px/38.400001525878906px \"Non-Generic Example Family Name\""
 FAIL Property font value 'small-caps extra-expanded lighter normal larger/calc(120% + 1.2em) serif' assert_equals: expected "small-caps bold extra-expanded 48px / normal serif" but got "normal small-caps bold extra-expanded 48px/normal serif"
 FAIL Property font value 'small-caps ultra-expanded 100 italic smaller sans-serif' assert_equals: expected "italic small-caps 100 ultra-expanded 33.33333206176758px sans-serif" but got "italic small-caps 100 ultra-expanded 33.33333206176758px/normal sans-serif"
 FAIL Property font value '900 10px/normal cursive' assert_equals: expected "900 10px cursive" but got "normal normal 900 normal 10px/normal cursive"
-FAIL Property font value 'bold normal 20%/1.2 fantasy' assert_equals: expected "bold 8px / 9px fantasy" but got "normal normal bold normal 8px/9px fantasy"
+FAIL Property font value 'bold normal 20%/1.2 fantasy' assert_equals: expected "bold 8px / 9.600000381469727px fantasy" but got "normal normal bold normal 8px/9.600000381469727px fantasy"
 FAIL Property font value 'bolder normal normal calc(30% - 40px)/calc(120% + 1.2em) monospace' assert_equals: expected "900 0px / normal monospace" but got "normal normal 900 normal 0px/normal monospace"
 FAIL Property font value 'lighter normal normal normal xx-small Menu' assert_equals: expected "bold 9px Menu" but got "normal normal bold normal 9px/normal Menu"
 FAIL Property font value '100 normal normal italic medium/normal "Non-Generic Example Family Name"' assert_true: '100 normal normal italic medium/normal "Non-Generic Example Family Name"' is a supported value for font. expected true got false
@@ -231,15 +231,15 @@
 FAIL Property font value 'lighter normal extra-expanded small-caps calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_equals: expected "small-caps bold extra-expanded 0px / normal \"Non-Generic Example Family Name\"" but got "normal small-caps bold extra-expanded 0px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value '100 italic xx-small serif' assert_equals: expected "italic 100 9px serif" but got "italic normal 100 normal 9px/normal serif"
 FAIL Property font value '900 italic normal medium/normal sans-serif' assert_equals: expected "italic 900 16px sans-serif" but got "italic normal 900 normal 16px/normal sans-serif"
-FAIL Property font value 'bold italic normal normal xx-large/1.2 cursive' assert_equals: expected "italic bold 32px / 38px cursive" but got "italic normal bold normal 32px/38px cursive"
+FAIL Property font value 'bold italic normal normal xx-large/1.2 cursive' assert_equals: expected "italic bold 32px / 38.400001525878906px cursive" but got "italic normal bold normal 32px/38.400001525878906px cursive"
 FAIL Property font value 'bolder italic normal small-caps larger/calc(120% + 1.2em) fantasy' assert_true: 'bolder italic normal small-caps larger/calc(120% + 1.2em) fantasy' is a supported value for font. expected true got false
 FAIL Property font value 'lighter italic normal ultra-expanded smaller monospace' assert_equals: expected "italic bold ultra-expanded 33.33333206176758px monospace" but got "italic normal bold ultra-expanded 33.33333206176758px/normal monospace"
 FAIL Property font value '100 italic small-caps 10px/normal Menu' assert_equals: expected "italic small-caps 100 10px Menu" but got "italic small-caps 100 normal 10px/normal Menu"
-FAIL Property font value '900 italic small-caps normal 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps 900 8px / 9px \"Non-Generic Example Family Name\"" but got "italic small-caps 900 normal 8px/9px \"Non-Generic Example Family Name\""
+FAIL Property font value '900 italic small-caps normal 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps 900 8px / 9.600000381469727px \"Non-Generic Example Family Name\"" but got "italic small-caps 900 normal 8px/9.600000381469727px \"Non-Generic Example Family Name\""
 FAIL Property font value 'bold italic small-caps ultra-condensed calc(30% - 40px)/calc(120% + 1.2em) serif' assert_equals: expected "italic small-caps bold ultra-condensed 0px / normal serif" but got "italic small-caps bold ultra-condensed 0px/normal serif"
 FAIL Property font value 'bolder italic extra-condensed xx-small sans-serif' assert_equals: expected "italic 900 extra-condensed 9px sans-serif" but got "italic normal 900 extra-condensed 9px/normal sans-serif"
 FAIL Property font value 'lighter italic condensed normal medium/normal cursive' assert_equals: expected "italic bold condensed 16px cursive" but got "italic normal bold condensed 16px/normal cursive"
-FAIL Property font value '100 italic semi-condensed small-caps xx-large/1.2 fantasy' assert_equals: expected "italic small-caps 100 semi-condensed 32px / 38px fantasy" but got "italic small-caps 100 semi-condensed 32px/38px fantasy"
+FAIL Property font value '100 italic semi-condensed small-caps xx-large/1.2 fantasy' assert_equals: expected "italic small-caps 100 semi-condensed 32px / 38.400001525878906px fantasy" but got "italic small-caps 100 semi-condensed 32px/38.400001525878906px fantasy"
 FAIL Property font value '900 small-caps larger/calc(120% + 1.2em) monospace' assert_equals: expected "small-caps 900 48px / normal monospace" but got "normal small-caps 900 normal 48px/normal monospace"
 FAIL Property font value 'bold small-caps normal smaller Menu' assert_equals: expected "small-caps bold 33.33333206176758px Menu" but got "normal small-caps bold normal 33.33333206176758px/normal Menu"
 FAIL Property font value 'bolder small-caps normal normal 10px/normal "Non-Generic Example Family Name"' assert_equals: expected "small-caps 900 10px \"Non-Generic Example Family Name\"" but got "normal small-caps 900 normal 10px/normal \"Non-Generic Example Family Name\""
@@ -247,23 +247,23 @@
 FAIL Property font value '100 small-caps normal semi-expanded calc(30% - 40px)/calc(120% + 1.2em) sans-serif' assert_equals: expected "small-caps 100 semi-expanded 0px / normal sans-serif" but got "normal small-caps 100 semi-expanded 0px/normal sans-serif"
 FAIL Property font value '900 small-caps italic xx-small cursive' assert_equals: expected "italic small-caps 900 9px cursive" but got "italic small-caps 900 normal 9px/normal cursive"
 FAIL Property font value 'bold small-caps italic normal medium/normal fantasy' assert_equals: expected "italic small-caps bold 16px fantasy" but got "italic small-caps bold normal 16px/normal fantasy"
-FAIL Property font value 'bolder small-caps italic expanded xx-large/1.2 monospace' assert_equals: expected "italic small-caps 900 expanded 26px / 31px monospace" but got "italic small-caps 900 expanded 26px/31px monospace"
+FAIL Property font value 'bolder small-caps italic expanded xx-large/1.2 monospace' assert_equals: expected "italic small-caps 900 expanded 26px / 31.200000762939453px monospace" but got "italic small-caps 900 expanded 26px/31.200000762939453px monospace"
 FAIL Property font value 'lighter small-caps extra-expanded larger/calc(120% + 1.2em) Menu' assert_equals: expected "small-caps bold extra-expanded 48px / normal Menu" but got "normal small-caps bold extra-expanded 48px/normal Menu"
 FAIL Property font value '100 small-caps ultra-expanded normal smaller "Non-Generic Example Family Name"' assert_equals: expected "small-caps 100 ultra-expanded 33.33333206176758px \"Non-Generic Example Family Name\"" but got "normal small-caps 100 ultra-expanded 33.33333206176758px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value '900 small-caps ultra-condensed italic 10px/normal serif' assert_equals: expected "italic small-caps 900 ultra-condensed 10px serif" but got "italic small-caps 900 ultra-condensed 10px/normal serif"
-FAIL Property font value 'bold extra-condensed 20%/1.2 sans-serif' assert_equals: expected "bold extra-condensed 8px / 9px sans-serif" but got "normal normal bold extra-condensed 8px/9px sans-serif"
+FAIL Property font value 'bold extra-condensed 20%/1.2 sans-serif' assert_equals: expected "bold extra-condensed 8px / 9.600000381469727px sans-serif" but got "normal normal bold extra-condensed 8px/9.600000381469727px sans-serif"
 FAIL Property font value 'bolder condensed normal calc(30% - 40px)/calc(120% + 1.2em) cursive' assert_equals: expected "900 condensed 0px / normal cursive" but got "normal normal 900 condensed 0px/normal cursive"
 FAIL Property font value 'lighter semi-condensed normal normal xx-small fantasy' assert_equals: expected "bold semi-condensed 9px fantasy" but got "normal normal bold semi-condensed 9px/normal fantasy"
 FAIL Property font value '100 semi-expanded normal italic medium/normal monospace' assert_true: '100 semi-expanded normal italic medium/normal monospace' is a supported value for font. expected true got false
-FAIL Property font value '900 expanded normal small-caps xx-large/1.2 Menu' assert_equals: expected "small-caps 900 expanded 32px / 38px Menu" but got "normal small-caps 900 expanded 32px/38px Menu"
+FAIL Property font value '900 expanded normal small-caps xx-large/1.2 Menu' assert_equals: expected "small-caps 900 expanded 32px / 38.400001525878906px Menu" but got "normal small-caps 900 expanded 32px/38.400001525878906px Menu"
 FAIL Property font value 'bold extra-expanded italic larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_equals: expected "italic bold extra-expanded 48px / normal \"Non-Generic Example Family Name\"" but got "italic normal bold extra-expanded 48px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'bolder ultra-expanded italic normal smaller serif' assert_equals: expected "italic 900 ultra-expanded 33.33333206176758px serif" but got "italic normal 900 ultra-expanded 33.33333206176758px/normal serif"
 FAIL Property font value 'lighter ultra-condensed italic small-caps 10px/normal sans-serif' assert_equals: expected "italic small-caps bold ultra-condensed 10px sans-serif" but got "italic small-caps bold ultra-condensed 10px/normal sans-serif"
-FAIL Property font value '100 extra-condensed small-caps 20%/1.2 cursive' assert_equals: expected "small-caps 100 extra-condensed 8px / 9px cursive" but got "normal small-caps 100 extra-condensed 8px/9px cursive"
+FAIL Property font value '100 extra-condensed small-caps 20%/1.2 cursive' assert_equals: expected "small-caps 100 extra-condensed 8px / 9.600000381469727px cursive" but got "normal small-caps 100 extra-condensed 8px/9.600000381469727px cursive"
 FAIL Property font value '900 condensed small-caps normal calc(30% - 40px)/calc(120% + 1.2em) fantasy' assert_equals: expected "small-caps 900 condensed 0px / normal fantasy" but got "normal small-caps 900 condensed 0px/normal fantasy"
 FAIL Property font value 'bold semi-condensed small-caps italic xx-small monospace' assert_equals: expected "italic small-caps bold semi-condensed 9px monospace" but got "italic small-caps bold semi-condensed 9px/normal monospace"
 FAIL Property font value 'semi-expanded medium/normal Menu' assert_equals: expected "semi-expanded 16px Menu" but got "normal normal normal semi-expanded 16px/normal Menu"
-FAIL Property font value 'expanded normal xx-large/1.2 "Non-Generic Example Family Name"' assert_equals: expected "expanded 32px / 38px \"Non-Generic Example Family Name\"" but got "normal normal normal expanded 32px/38px \"Non-Generic Example Family Name\""
+FAIL Property font value 'expanded normal xx-large/1.2 "Non-Generic Example Family Name"' assert_equals: expected "expanded 32px / 38.400001525878906px \"Non-Generic Example Family Name\"" but got "normal normal normal expanded 32px/38.400001525878906px \"Non-Generic Example Family Name\""
 FAIL Property font value 'extra-expanded normal normal larger/calc(120% + 1.2em) serif' assert_equals: expected "extra-expanded 48px / normal serif" but got "normal normal normal extra-expanded 48px/normal serif"
 FAIL Property font value 'ultra-expanded normal normal normal smaller sans-serif' assert_equals: expected "ultra-expanded 33.33333206176758px sans-serif" but got "normal normal normal ultra-expanded 33.33333206176758px/normal sans-serif"
 FAIL Property font value 'ultra-condensed normal normal italic 10px/normal cursive' assert_true: 'ultra-condensed normal normal italic 10px/normal cursive' is a supported value for font. expected true got false
@@ -283,15 +283,15 @@
 FAIL Property font value 'extra-expanded normal lighter small-caps larger/calc(120% + 1.2em) cursive' assert_equals: expected "small-caps bold extra-expanded 48px / normal cursive" but got "normal small-caps bold extra-expanded 48px/normal cursive"
 FAIL Property font value 'ultra-expanded italic smaller fantasy' assert_equals: expected "italic ultra-expanded 33.33333206176758px fantasy" but got "italic normal normal ultra-expanded 33.33333206176758px/normal fantasy"
 FAIL Property font value 'ultra-condensed italic normal 10px/normal monospace' assert_equals: expected "italic ultra-condensed 10px monospace" but got "italic normal normal ultra-condensed 10px/normal monospace"
-FAIL Property font value 'extra-condensed italic normal normal 20%/1.2 Menu' assert_equals: expected "italic extra-condensed 8px / 9px Menu" but got "italic normal normal extra-condensed 8px/9px Menu"
+FAIL Property font value 'extra-condensed italic normal normal 20%/1.2 Menu' assert_equals: expected "italic extra-condensed 8px / 9.600000381469727px Menu" but got "italic normal normal extra-condensed 8px/9.600000381469727px Menu"
 FAIL Property font value 'condensed italic normal small-caps calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_true: 'condensed italic normal small-caps calc(30% - 40px)/calc(120% + 1.2em) "Non-Generic Example Family Name"' is a supported value for font. expected true got false
 FAIL Property font value 'semi-condensed italic normal 100 xx-small serif' assert_equals: expected "italic 100 semi-condensed 9px serif" but got "italic normal 100 semi-condensed 9px/normal serif"
 FAIL Property font value 'semi-expanded italic small-caps medium/normal sans-serif' assert_equals: expected "italic small-caps semi-expanded 16px sans-serif" but got "italic small-caps normal semi-expanded 16px/normal sans-serif"
-FAIL Property font value 'expanded italic small-caps normal xx-large/1.2 cursive' assert_equals: expected "italic small-caps expanded 32px / 38px cursive" but got "italic small-caps normal expanded 32px/38px cursive"
+FAIL Property font value 'expanded italic small-caps normal xx-large/1.2 cursive' assert_equals: expected "italic small-caps expanded 32px / 38.400001525878906px cursive" but got "italic small-caps normal expanded 32px/38.400001525878906px cursive"
 FAIL Property font value 'extra-expanded italic small-caps 900 larger/calc(120% + 1.2em) fantasy' assert_equals: expected "italic small-caps 900 extra-expanded 48px / normal fantasy" but got "italic small-caps 900 extra-expanded 48px/normal fantasy"
 FAIL Property font value 'ultra-expanded italic bold smaller monospace' assert_equals: expected "italic bold ultra-expanded 33.33333206176758px monospace" but got "italic normal bold ultra-expanded 33.33333206176758px/normal monospace"
 FAIL Property font value 'ultra-condensed italic bolder normal 10px/normal Menu' assert_equals: expected "italic 900 ultra-condensed 10px Menu" but got "italic normal 900 ultra-condensed 10px/normal Menu"
-FAIL Property font value 'extra-condensed italic lighter small-caps 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps bold extra-condensed 8px / 9px \"Non-Generic Example Family Name\"" but got "italic small-caps bold extra-condensed 8px/9px \"Non-Generic Example Family Name\""
+FAIL Property font value 'extra-condensed italic lighter small-caps 20%/1.2 "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps bold extra-condensed 8px / 9.600000381469727px \"Non-Generic Example Family Name\"" but got "italic small-caps bold extra-condensed 8px/9.600000381469727px \"Non-Generic Example Family Name\""
 FAIL Property font value 'condensed small-caps calc(30% - 40px)/calc(120% + 1.2em) serif' assert_equals: expected "small-caps condensed 0px / normal serif" but got "normal small-caps normal condensed 0px/normal serif"
 FAIL Property font value 'semi-condensed small-caps normal xx-small sans-serif' assert_equals: expected "small-caps semi-condensed 9px sans-serif" but got "normal small-caps normal semi-condensed 9px/normal sans-serif"
 FAIL Property font value 'semi-expanded small-caps normal normal medium/normal cursive' assert_equals: expected "small-caps semi-expanded 16px cursive" but got "normal small-caps normal semi-expanded 16px/normal cursive"
@@ -299,19 +299,19 @@
 FAIL Property font value 'extra-expanded small-caps normal 100 larger/calc(120% + 1.2em) monospace' assert_equals: expected "small-caps 100 extra-expanded 48px / normal monospace" but got "normal small-caps 100 extra-expanded 48px/normal monospace"
 FAIL Property font value 'ultra-expanded small-caps italic smaller Menu' assert_equals: expected "italic small-caps ultra-expanded 33.33333206176758px Menu" but got "italic small-caps normal ultra-expanded 33.33333206176758px/normal Menu"
 FAIL Property font value 'ultra-condensed small-caps italic normal 10px/normal "Non-Generic Example Family Name"' assert_equals: expected "italic small-caps ultra-condensed 10px \"Non-Generic Example Family Name\"" but got "italic small-caps normal ultra-condensed 10px/normal \"Non-Generic Example Family Name\""
-FAIL Property font value 'extra-condensed small-caps italic 900 20%/1.2 serif' assert_equals: expected "italic small-caps 900 extra-condensed 8px / 9px serif" but got "italic small-caps 900 extra-condensed 8px/9px serif"
+FAIL Property font value 'extra-condensed small-caps italic 900 20%/1.2 serif' assert_equals: expected "italic small-caps 900 extra-condensed 8px / 9.600000381469727px serif" but got "italic small-caps 900 extra-condensed 8px/9.600000381469727px serif"
 FAIL Property font value 'condensed small-caps bold calc(30% - 40px)/calc(120% + 1.2em) sans-serif' assert_equals: expected "small-caps bold condensed 0px / normal sans-serif" but got "normal small-caps bold condensed 0px/normal sans-serif"
 FAIL Property font value 'semi-condensed small-caps bolder normal xx-small cursive' assert_equals: expected "small-caps 900 semi-condensed 9px cursive" but got "normal small-caps 900 semi-condensed 9px/normal cursive"
 FAIL Property font value 'semi-expanded small-caps lighter italic medium/normal fantasy' assert_equals: expected "italic small-caps bold semi-expanded 16px fantasy" but got "italic small-caps bold semi-expanded 16px/normal fantasy"
-FAIL Property font value 'expanded 100 xx-large/1.2 monospace' assert_equals: expected "100 expanded 26px / 31px monospace" but got "normal normal 100 expanded 26px/31px monospace"
+FAIL Property font value 'expanded 100 xx-large/1.2 monospace' assert_equals: expected "100 expanded 26px / 31.200000762939453px monospace" but got "normal normal 100 expanded 26px/31.200000762939453px monospace"
 FAIL Property font value 'extra-expanded 900 normal larger/calc(120% + 1.2em) Menu' assert_equals: expected "900 extra-expanded 48px / normal Menu" but got "normal normal 900 extra-expanded 48px/normal Menu"
 FAIL Property font value 'ultra-expanded bold normal normal smaller "Non-Generic Example Family Name"' assert_equals: expected "bold ultra-expanded 33.33333206176758px \"Non-Generic Example Family Name\"" but got "normal normal bold ultra-expanded 33.33333206176758px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'ultra-condensed bolder normal italic 10px/normal serif' assert_true: 'ultra-condensed bolder normal italic 10px/normal serif' is a supported value for font. expected true got false
-FAIL Property font value 'extra-condensed lighter normal small-caps 20%/1.2 sans-serif' assert_equals: expected "small-caps bold extra-condensed 8px / 9px sans-serif" but got "normal small-caps bold extra-condensed 8px/9px sans-serif"
+FAIL Property font value 'extra-condensed lighter normal small-caps 20%/1.2 sans-serif' assert_equals: expected "small-caps bold extra-condensed 8px / 9.600000381469727px sans-serif" but got "normal small-caps bold extra-condensed 8px/9.600000381469727px sans-serif"
 FAIL Property font value 'condensed 100 italic calc(30% - 40px)/calc(120% + 1.2em) cursive' assert_equals: expected "italic 100 condensed 0px / normal cursive" but got "italic normal 100 condensed 0px/normal cursive"
 FAIL Property font value 'semi-condensed 900 italic normal xx-small fantasy' assert_equals: expected "italic 900 semi-condensed 9px fantasy" but got "italic normal 900 semi-condensed 9px/normal fantasy"
 FAIL Property font value 'semi-expanded bold italic small-caps medium/normal monospace' assert_equals: expected "italic small-caps bold semi-expanded 13px monospace" but got "italic small-caps bold semi-expanded 13px/normal monospace"
-FAIL Property font value 'expanded bolder small-caps xx-large/1.2 Menu' assert_equals: expected "small-caps 900 expanded 32px / 38px Menu" but got "normal small-caps 900 expanded 32px/38px Menu"
+FAIL Property font value 'expanded bolder small-caps xx-large/1.2 Menu' assert_equals: expected "small-caps 900 expanded 32px / 38.400001525878906px Menu" but got "normal small-caps 900 expanded 32px/38.400001525878906px Menu"
 FAIL Property font value 'extra-expanded lighter small-caps normal larger/calc(120% + 1.2em) "Non-Generic Example Family Name"' assert_equals: expected "small-caps bold extra-expanded 48px / normal \"Non-Generic Example Family Name\"" but got "normal small-caps bold extra-expanded 48px/normal \"Non-Generic Example Family Name\""
 FAIL Property font value 'ultra-expanded 100 small-caps italic smaller serif' assert_equals: expected "italic small-caps 100 ultra-expanded 33.33333206176758px serif" but got "italic small-caps 100 ultra-expanded 33.33333206176758px/normal serif"
 

Modified: trunk/Source/WebCore/ChangeLog (270247 => 270248)


--- trunk/Source/WebCore/ChangeLog	2020-11-30 17:07:35 UTC (rev 270247)
+++ trunk/Source/WebCore/ChangeLog	2020-11-30 17:39:41 UTC (rev 270248)
@@ -1,3 +1,25 @@
+2020-11-30  Tyler Wilcock  <[email protected]>
+
+        getComputedStyle rounds lineHeight to nearest pixel
+        https://bugs.webkit.org/show_bug.cgi?id=216601
+
+        Reviewed by Simon Fraser.
+
+        When serializing `line-height` for `getComputedStyle`, ensure the
+        value can be represented fractionally (when appropriate). Prior to this
+        patch, `line-height` serialization was always an integer value.  Per
+        spec, the used value of `line-height` can be a `<number>` value, which
+        is fractional.  Gecko and Chromium allow fractional `line-height`s to be
+        returned from `getComputedStyle`, further confirming this.
+
+        https://drafts.csswg.org/css2/#propdef-line-height
+
+        Test: fast/css/line-height-get-computed-style.html
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::lineHeightFromStyle): Cast result to `double` instead of
+        `int` since `line-height` can be represented fractionally.
+
 2020-11-30  Aditya Keerthi  <[email protected]>
 
         Use real dates and times as placeholders for date/time inputs with editable components

Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (270247 => 270248)


--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2020-11-30 17:07:35 UTC (rev 270247)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2020-11-30 17:39:41 UTC (rev 270248)
@@ -1804,7 +1804,7 @@
         // for how high to be in pixels does include things like minimum font size and the zoom factor.
         // On the other hand, since font-size doesn't include the zoom factor, we really can't do
         // that here either.
-        return zoomAdjustedPixelValue(static_cast<int>(length.percent() * style.fontDescription().computedSize()) / 100, style);
+        return zoomAdjustedPixelValue(static_cast<double>(length.percent() * style.fontDescription().computedSize()) / 100, style);
     }
     return zoomAdjustedPixelValue(floatValueForLength(length, 0), style);
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to