Changeset 292893 in webkit
- Timestamp:
- Apr 14, 2022 4:32:40 PM (3 months ago)
- Location:
- trunk
- Files:
-
- 15 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/css/calc-parsing-expected.txt (modified) (6 diffs)
-
LayoutTests/fast/css/calc-parsing.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/hypot-pow-sqrt-invalid-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/hypot-pow-sqrt-serialize-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-angle-serialize-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-length-percent-serialize-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-length-serialize-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-number-serialize-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-percentage-serialize-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-time-serialize-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/css/calc/CSSCalcOperationNode.cpp (modified) (3 diffs)
-
Source/WebCore/css/calc/CSSCalcOperationNode.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r292875 r292893 1 2022-04-14 Nikolaos Mouchtaris <nmouchtaris@apple.com> 2 3 calc(): Serialize top level min/max/hypot as calc() 4 https://bugs.webkit.org/show_bug.cgi?id=239019 5 6 Reviewed by Darin Adler. 7 8 * fast/css/calc-parsing-expected.txt: 9 * fast/css/calc-parsing.html: 10 1 11 2022-04-14 Karl Rackler <rackler@apple.com> 2 12 -
trunk/LayoutTests/fast/css/calc-parsing-expected.txt
r287909 r292893 10 10 11 11 element.style["width"] = "max(100px + 200px)" 12 PASS element.style['width'] is " max(300px)"12 PASS element.style['width'] is "calc(300px)" 13 13 PASS getComputedStyle(element).getPropertyValue('width') is "300px" 14 14 15 15 element.style["width"] = "max(100px , 200px)" 16 PASS element.style['width'] is " max(200px)"16 PASS element.style['width'] is "calc(200px)" 17 17 PASS getComputedStyle(element).getPropertyValue('width') is "200px" 18 18 19 19 element.style["width"] = "max(100px,200px)" 20 PASS element.style['width'] is " max(200px)"20 PASS element.style['width'] is "calc(200px)" 21 21 PASS getComputedStyle(element).getPropertyValue('width') is "200px" 22 22 … … 74 74 75 75 element.style["width"] = "hypot(4px, 5px, 7px, 9px)" 76 PASS element.style['width'] is " hypot(13.076697px)"76 PASS element.style['width'] is "calc(13.076697px)" 77 77 PASS getComputedStyle(element).getPropertyValue('width') is "13.0625px" 78 78 79 79 element.style["width"] = "hypot(3px, 4px)" 80 PASS element.style['width'] is " hypot(5px)"80 PASS element.style['width'] is "calc(5px)" 81 81 PASS getComputedStyle(element).getPropertyValue('width') is "5px" 82 82 … … 86 86 87 87 element.style["width"] = "hypot(-5px)" 88 PASS element.style['width'] is " hypot(5px)"88 PASS element.style['width'] is "calc(5px)" 89 89 PASS getComputedStyle(element).getPropertyValue('width') is "5px" 90 90 … … 270 270 271 271 element.style["min-width"] = "max(100px + 200px)" 272 PASS element.style['min-width'] is " max(300px)"272 PASS element.style['min-width'] is "calc(300px)" 273 273 PASS getComputedStyle(element).getPropertyValue('min-width') is "300px" 274 274 275 275 element.style["min-width"] = "max(100px , 200px)" 276 PASS element.style['min-width'] is " max(200px)"276 PASS element.style['min-width'] is "calc(200px)" 277 277 PASS getComputedStyle(element).getPropertyValue('min-width') is "200px" 278 278 279 279 element.style["min-width"] = "max(100px,200px)" 280 PASS element.style['min-width'] is " max(200px)"280 PASS element.style['min-width'] is "calc(200px)" 281 281 PASS getComputedStyle(element).getPropertyValue('min-width') is "200px" 282 282 … … 334 334 335 335 element.style["min-width"] = "hypot(4px, 5px, 7px, 9px)" 336 PASS element.style['min-width'] is " hypot(13.076697px)"336 PASS element.style['min-width'] is "calc(13.076697px)" 337 337 PASS getComputedStyle(element).getPropertyValue('min-width') is "13.076696px" 338 338 339 339 element.style["min-width"] = "hypot(3px, 4px)" 340 PASS element.style['min-width'] is " hypot(5px)"340 PASS element.style['min-width'] is "calc(5px)" 341 341 PASS getComputedStyle(element).getPropertyValue('min-width') is "5px" 342 342 … … 346 346 347 347 element.style["min-width"] = "hypot(-5px)" 348 PASS element.style['min-width'] is " hypot(5px)"348 PASS element.style['min-width'] is "calc(5px)" 349 349 PASS getComputedStyle(element).getPropertyValue('min-width') is "5px" 350 350 -
trunk/LayoutTests/fast/css/calc-parsing.html
r287909 r292893 32 32 // Valid expressions. 33 33 testExpression('calc(100px)', 'calc(100px)', '100px'); 34 testExpression('max(100px + 200px)', ' max(300px)', '300px');35 testExpression('max(100px , 200px)', ' max(200px)', '200px');36 testExpression('max(100px,200px)', ' max(200px)', '200px');34 testExpression('max(100px + 200px)', 'calc(300px)', '300px'); 35 testExpression('max(100px , 200px)', 'calc(200px)', '200px'); 36 testExpression('max(100px,200px)', 'calc(200px)', '200px'); 37 37 testExpression('clamp(100px,123px,200px)', 'clamp(100px, 123px, 200px)', '123px'); 38 38 testExpression('clamp(100px,300px,200px)', 'clamp(100px, 300px, 200px)', '200px'); … … 48 48 testExpression('calc(1px * sqrt(999))', 'calc(31.606961px)', propertyName == 'width' ? '31.59375px' : '31.606962px'); 49 49 testExpression('calc(1px * pow(2, sqrt(100))', 'calc(1024px)', '1024px'); 50 testExpression('hypot(4px, 5px, 7px, 9px)', ' hypot(13.076697px)', propertyName == 'width' ? '13.0625px' : '13.076696px');51 testExpression('hypot(3px, 4px)', ' hypot(5px)', '5px');50 testExpression('hypot(4px, 5px, 7px, 9px)', 'calc(13.076697px)', propertyName == 'width' ? '13.0625px' : '13.076696px'); 51 testExpression('hypot(3px, 4px)', 'calc(5px)', '5px'); 52 52 testExpression('calc(100px * hypot(3, 4))', 'calc(500px)', '500px'); 53 testExpression('hypot(-5px)', ' hypot(5px)', '5px');53 testExpression('hypot(-5px)', 'calc(5px)', '5px'); 54 54 testExpression('calc(1px * hypot(-5))', 'calc(5px)', '5px'); 55 55 testExpression('calc(1px * hypot(10000))', 'calc(10000px)', '10000px'); -
trunk/LayoutTests/imported/w3c/ChangeLog
r292861 r292893 1 2022-04-14 Nikolaos Mouchtaris <nmouchtaris@apple.com> 2 3 calc(): Serialize top level min/max/hypot as calc() 4 https://bugs.webkit.org/show_bug.cgi?id=239019 5 6 Reviewed by Darin Adler. 7 8 * web-platform-tests/css/css-values/hypot-pow-sqrt-invalid-expected.txt: 9 * web-platform-tests/css/css-values/hypot-pow-sqrt-serialize-expected.txt: 10 * web-platform-tests/css/css-values/minmax-angle-serialize-expected.txt: 11 * web-platform-tests/css/css-values/minmax-length-percent-serialize-expected.txt: 12 * web-platform-tests/css/css-values/minmax-length-serialize-expected.txt: 13 * web-platform-tests/css/css-values/minmax-number-serialize-expected.txt: 14 * web-platform-tests/css/css-values/minmax-percentage-serialize-expected.txt: 15 * web-platform-tests/css/css-values/minmax-time-serialize-expected.txt: 16 1 17 2022-04-14 Youenn Fablet <youenn@apple.com> 2 18 -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/hypot-pow-sqrt-invalid-expected.txt
r287909 r292893 11 11 PASS e.style['opacity'] = "hypot(1 2)" should not set the property value 12 12 PASS e.style['opacity'] = "hypot(1, , 2)" should not set the property value 13 FAIL e.style['opacity'] = "hypot(1, 2)" should not set the property value assert_equals: expected "" but got " hypot(2.236068)"13 FAIL e.style['opacity'] = "hypot(1, 2)" should not set the property value assert_equals: expected "" but got "calc(2.236068)" 14 14 PASS e.style['opacity'] = "sqrt()" should not set the property value 15 15 PASS e.style['opacity'] = "sqrt( )" should not set the property value -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/hypot-pow-sqrt-serialize-expected.txt
r283447 r292893 4 4 PASS 'pow(1,1)' as a computed value should serialize as '1'. 5 5 PASS 'scale(pow(1,1))' as a computed value should serialize as 'matrix(1, 0, 0, 1, 0, 0)'. 6 FAIL 'hypot(1)' as a specified value should serialize as 'calc(1)'. assert_equals: 'hypot(1)' and 'calc(1)' should serialize the same in specified values. expected "calc(1)" but got "hypot(1)" 7 FAIL 'scale(hypot(1))' as a specified value should serialize as 'scale(calc(1))'. assert_equals: 'scale(hypot(1))' and 'scale(calc(1))' should serialize the same in specified values. expected "scale(calc(1))" but got "scale(hypot(1))" 6 PASS 'hypot(1)' as a specified value should serialize as 'calc(1)'. 7 PASS 'scale(hypot(1))' as a specified value should serialize as 'scale(calc(1))'. 8 8 PASS 'hypot(1)' as a computed value should serialize as '1'. 9 9 PASS 'scale(hypot(1))' as a computed value should serialize as 'matrix(1, 0, 0, 1, 0, 0)'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-angle-serialize-expected.txt
r287909 r292893 1 1 2 FAIL 'rotate(min(90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(min(90deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(min(90deg))" 2 PASS 'rotate(min(90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 3 3 PASS 'rotate(min(90deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 4 FAIL 'rotate(min(.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(min(.25turn))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(min(90deg))" 4 PASS 'rotate(min(.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. 5 5 PASS 'rotate(min(.25turn))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 6 FAIL 'rotate(min(100grad))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(min(100grad))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(min(90deg))" 6 PASS 'rotate(min(100grad))' as a specified value should serialize as 'rotate(calc(90deg))'. 7 7 PASS 'rotate(min(100grad))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 8 FAIL 'rotate(max(90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(max(90deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(max(90deg))" 8 PASS 'rotate(max(90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 9 9 PASS 'rotate(max(90deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 10 FAIL 'rotate(max(.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(max(.25turn))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(max(90deg))" 10 PASS 'rotate(max(.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. 11 11 PASS 'rotate(max(.25turn))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 12 FAIL 'rotate(max(100grad))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(max(100grad))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(max(90deg))" 12 PASS 'rotate(max(100grad))' as a specified value should serialize as 'rotate(calc(90deg))'. 13 13 PASS 'rotate(max(100grad))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 14 FAIL 'rotate(min(90deg, 92deg, 93deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(min(90deg, 92deg, 93deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(min(90deg))" 14 PASS 'rotate(min(90deg, 92deg, 93deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 15 15 PASS 'rotate(min(90deg, 92deg, 93deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 16 FAIL 'rotate(min(93deg, 92deg, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(min(93deg, 92deg, 90deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(min(90deg))" 16 PASS 'rotate(min(93deg, 92deg, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 17 17 PASS 'rotate(min(93deg, 92deg, 90deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 18 FAIL 'rotate(min(90deg, 1.58rad, 0.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(min(90deg, 1.58rad, 0.25turn))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(min(90deg))" 18 PASS 'rotate(min(90deg, 1.58rad, 0.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. 19 19 PASS 'rotate(min(90deg, 1.58rad, 0.25turn))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 20 FAIL 'rotate(min(0.25turn, 1.58rad, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(min(0.25turn, 1.58rad, 90deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(min(90deg))" 20 PASS 'rotate(min(0.25turn, 1.58rad, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 21 21 PASS 'rotate(min(0.25turn, 1.58rad, 90deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 22 FAIL 'rotate(max(81deg, 82deg, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(max(81deg, 82deg, 90deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(max(90deg))" 22 PASS 'rotate(max(81deg, 82deg, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 23 23 PASS 'rotate(max(81deg, 82deg, 90deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 24 FAIL 'rotate(max(83deg, 82deg, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(max(83deg, 82deg, 90deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(max(90deg))" 24 PASS 'rotate(max(83deg, 82deg, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 25 25 PASS 'rotate(max(83deg, 82deg, 90deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 26 FAIL 'rotate(max(90deg, 1.57rad, 0.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(max(90deg, 1.57rad, 0.25turn))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(max(90deg))" 26 PASS 'rotate(max(90deg, 1.57rad, 0.25turn))' as a specified value should serialize as 'rotate(calc(90deg))'. 27 27 PASS 'rotate(max(90deg, 1.57rad, 0.25turn))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 28 FAIL 'rotate(max(0.25turn, 1.57rad, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. assert_equals: 'rotate(max(0.25turn, 1.57rad, 90deg))' and 'rotate(calc(90deg))' should serialize the same in specified values. expected "rotate(calc(90deg))" but got "rotate(max(90deg))" 28 PASS 'rotate(max(0.25turn, 1.57rad, 90deg))' as a specified value should serialize as 'rotate(calc(90deg))'. 29 29 PASS 'rotate(max(0.25turn, 1.57rad, 90deg))' as a computed value should serialize as 'matrix(0, 1, -1, 0, 0, 0)'. 30 30 PASS 'rotate(calc(min(30deg) + max(60deg)))' as a specified value should serialize as 'rotate(calc(90deg))'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-length-percent-serialize-expected.txt
r276262 r292893 1 1 2 FAIL 'min(1px)' as a specified value should serialize as 'calc(1px)'. assert_equals: 'min(1px)' and 'calc(1px)' should serialize the same in specified values. expected "calc(1px)" but got "min(1px)" 2 PASS 'min(1px)' as a specified value should serialize as 'calc(1px)'. 3 3 PASS 'min(1px)' as a computed value should serialize as '1px'. 4 4 PASS 'min(1px)' as a used value should serialize as '1px'. 5 FAIL 'max(1px)' as a specified value should serialize as 'calc(1px)'. assert_equals: 'max(1px)' and 'calc(1px)' should serialize the same in specified values. expected "calc(1px)" but got "max(1px)" 5 PASS 'max(1px)' as a specified value should serialize as 'calc(1px)'. 6 6 PASS 'max(1px)' as a computed value should serialize as '1px'. 7 7 PASS 'max(1px)' as a used value should serialize as '1px'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-length-serialize-expected.txt
r267650 r292893 1 1 2 FAIL 'min(1px)' as a specified value should serialize as 'calc(1px)'. assert_equals: 'min(1px)' and 'calc(1px)' should serialize the same in specified values. expected "calc(1px)" but got "min(1px)" 2 PASS 'min(1px)' as a specified value should serialize as 'calc(1px)'. 3 3 PASS 'min(1px)' as a computed value should serialize as '1px'. 4 FAIL 'min(1in)' as a specified value should serialize as 'calc(96px)'. assert_equals: 'min(1in)' and 'calc(96px)' should serialize the same in specified values. expected "calc(96px)" but got "min(96px)" 4 PASS 'min(1in)' as a specified value should serialize as 'calc(96px)'. 5 5 PASS 'min(1in)' as a computed value should serialize as '96px'. 6 FAIL 'max(1px)' as a specified value should serialize as 'calc(1px)'. assert_equals: 'max(1px)' and 'calc(1px)' should serialize the same in specified values. expected "calc(1px)" but got "max(1px)" 6 PASS 'max(1px)' as a specified value should serialize as 'calc(1px)'. 7 7 PASS 'max(1px)' as a computed value should serialize as '1px'. 8 FAIL 'max(1in)' as a specified value should serialize as 'calc(96px)'. assert_equals: 'max(1in)' and 'calc(96px)' should serialize the same in specified values. expected "calc(96px)" but got "max(96px)" 8 PASS 'max(1in)' as a specified value should serialize as 'calc(96px)'. 9 9 PASS 'max(1in)' as a computed value should serialize as '96px'. 10 FAIL 'min(1PX)' as a specified value should serialize as 'calc(1px)'. assert_equals: 'min(1PX)' and 'calc(1px)' should serialize the same in specified values. expected "calc(1px)" but got "min(1px)" 10 PASS 'min(1PX)' as a specified value should serialize as 'calc(1px)'. 11 11 PASS 'min(1PX)' as a computed value should serialize as '1px'. 12 FAIL 'min(50px, 1in + 1px)' as a specified value should serialize as 'calc(50px)'. assert_equals: 'min(50px, 1in + 1px)' and 'calc(50px)' should serialize the same in specified values. expected "calc(50px)" but got "min(50px)" 12 PASS 'min(50px, 1in + 1px)' as a specified value should serialize as 'calc(50px)'. 13 13 PASS 'min(50px, 1in + 1px)' as a computed value should serialize as '50px'. 14 FAIL 'max(50px, 1in + 1px)' as a specified value should serialize as 'calc(97px)'. assert_equals: 'max(50px, 1in + 1px)' and 'calc(97px)' should serialize the same in specified values. expected "calc(97px)" but got "max(97px)" 14 PASS 'max(50px, 1in + 1px)' as a specified value should serialize as 'calc(97px)'. 15 15 PASS 'max(50px, 1in + 1px)' as a computed value should serialize as '97px'. 16 16 PASS 'calc(1px + min(1in, 100px))' as a specified value should serialize as 'calc(97px)'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-number-serialize-expected.txt
r287909 r292893 1 1 2 FAIL 'min(.1)' as a specified value should serialize as 'calc(0.1)'. assert_equals: 'min(.1)' and 'calc(0.1)' should serialize the same in specified values. expected "calc(0.1)" but got "min(0.1)" 3 FAIL 'scale(min(.1))' as a specified value should serialize as 'scale(calc(0.1))'. assert_equals: 'scale(min(.1))' and 'scale(calc(0.1))' should serialize the same in specified values. expected "scale(calc(0.1))" but got "scale(min(0.1))" 2 PASS 'min(.1)' as a specified value should serialize as 'calc(0.1)'. 3 PASS 'scale(min(.1))' as a specified value should serialize as 'scale(calc(0.1))'. 4 4 PASS 'min(.1)' as a computed value should serialize as '0.1'. 5 5 PASS 'scale(min(.1))' as a computed value should serialize as 'matrix(0.1, 0, 0, 0.1, 0, 0)'. 6 FAIL 'max(.1)' as a specified value should serialize as 'calc(0.1)'. assert_equals: 'max(.1)' and 'calc(0.1)' should serialize the same in specified values. expected "calc(0.1)" but got "max(0.1)" 7 FAIL 'scale(max(.1))' as a specified value should serialize as 'scale(calc(0.1))'. assert_equals: 'scale(max(.1))' and 'scale(calc(0.1))' should serialize the same in specified values. expected "scale(calc(0.1))" but got "scale(max(0.1))" 6 PASS 'max(.1)' as a specified value should serialize as 'calc(0.1)'. 7 PASS 'scale(max(.1))' as a specified value should serialize as 'scale(calc(0.1))'. 8 8 PASS 'max(.1)' as a computed value should serialize as '0.1'. 9 9 PASS 'scale(max(.1))' as a computed value should serialize as 'matrix(0.1, 0, 0, 0.1, 0, 0)'. 10 FAIL 'min(.1, .2, .3)' as a specified value should serialize as 'calc(0.1)'. assert_equals: 'min(.1, .2, .3)' and 'calc(0.1)' should serialize the same in specified values. expected "calc(0.1)" but got "min(0.1)" 11 FAIL 'scale(min(.1, .2, .3))' as a specified value should serialize as 'scale(calc(0.1))'. assert_equals: 'scale(min(.1, .2, .3))' and 'scale(calc(0.1))' should serialize the same in specified values. expected "scale(calc(0.1))" but got "scale(min(0.1))" 10 PASS 'min(.1, .2, .3)' as a specified value should serialize as 'calc(0.1)'. 11 PASS 'scale(min(.1, .2, .3))' as a specified value should serialize as 'scale(calc(0.1))'. 12 12 PASS 'min(.1, .2, .3)' as a computed value should serialize as '0.1'. 13 13 PASS 'scale(min(.1, .2, .3))' as a computed value should serialize as 'matrix(0.1, 0, 0, 0.1, 0, 0)'. 14 FAIL 'max(.1, .2, .3)' as a specified value should serialize as 'calc(0.3)'. assert_equals: 'max(.1, .2, .3)' and 'calc(0.3)' should serialize the same in specified values. expected "calc(0.3)" but got "max(0.3)" 15 FAIL 'scale(max(.1, .2, .3))' as a specified value should serialize as 'scale(calc(0.3))'. assert_equals: 'scale(max(.1, .2, .3))' and 'scale(calc(0.3))' should serialize the same in specified values. expected "scale(calc(0.3))" but got "scale(max(0.3))" 14 PASS 'max(.1, .2, .3)' as a specified value should serialize as 'calc(0.3)'. 15 PASS 'scale(max(.1, .2, .3))' as a specified value should serialize as 'scale(calc(0.3))'. 16 16 PASS 'max(.1, .2, .3)' as a computed value should serialize as '0.3'. 17 17 PASS 'scale(max(.1, .2, .3))' as a computed value should serialize as 'matrix(0.3, 0, 0, 0.3, 0, 0)'. 18 FAIL 'min(.3, .2, .1)' as a specified value should serialize as 'calc(0.1)'. assert_equals: 'min(.3, .2, .1)' and 'calc(0.1)' should serialize the same in specified values. expected "calc(0.1)" but got "min(0.1)" 19 FAIL 'scale(min(.3, .2, .1))' as a specified value should serialize as 'scale(calc(0.1))'. assert_equals: 'scale(min(.3, .2, .1))' and 'scale(calc(0.1))' should serialize the same in specified values. expected "scale(calc(0.1))" but got "scale(min(0.1))" 18 PASS 'min(.3, .2, .1)' as a specified value should serialize as 'calc(0.1)'. 19 PASS 'scale(min(.3, .2, .1))' as a specified value should serialize as 'scale(calc(0.1))'. 20 20 PASS 'min(.3, .2, .1)' as a computed value should serialize as '0.1'. 21 21 PASS 'scale(min(.3, .2, .1))' as a computed value should serialize as 'matrix(0.1, 0, 0, 0.1, 0, 0)'. 22 FAIL 'max(.3, .2, .1)' as a specified value should serialize as 'calc(0.3)'. assert_equals: 'max(.3, .2, .1)' and 'calc(0.3)' should serialize the same in specified values. expected "calc(0.3)" but got "max(0.3)" 23 FAIL 'scale(max(.3, .2, .1))' as a specified value should serialize as 'scale(calc(0.3))'. assert_equals: 'scale(max(.3, .2, .1))' and 'scale(calc(0.3))' should serialize the same in specified values. expected "scale(calc(0.3))" but got "scale(max(0.3))" 22 PASS 'max(.3, .2, .1)' as a specified value should serialize as 'calc(0.3)'. 23 PASS 'scale(max(.3, .2, .1))' as a specified value should serialize as 'scale(calc(0.3))'. 24 24 PASS 'max(.3, .2, .1)' as a computed value should serialize as '0.3'. 25 25 PASS 'scale(max(.3, .2, .1))' as a computed value should serialize as 'matrix(0.3, 0, 0, 0.3, 0, 0)'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-percentage-serialize-expected.txt
r286897 r292893 1 1 2 FAIL 'min(1%)' as a specified value should serialize as 'calc(1%)'. assert_equals: 'min(1%)' and 'calc(1%)' should serialize the same in specified values. expected "calc(1%)" but got "min(1%)" 3 FAIL 'min(1%)' as a computed value should serialize as '1%'. assert_equals: 'min(1%)' and '1%' should serialize the same in computed values. expected "1%" but got "min(1%)" 2 PASS 'min(1%)' as a specified value should serialize as 'calc(1%)'. 3 PASS 'min(1%)' as a computed value should serialize as '1%'. 4 4 PASS 'min(1%)' as a used value should serialize as '1px'. 5 FAIL 'max(1%)' as a specified value should serialize as 'calc(1%)'. assert_equals: 'max(1%)' and 'calc(1%)' should serialize the same in specified values. expected "calc(1%)" but got "max(1%)" 6 FAIL 'max(1%)' as a computed value should serialize as '1%'. assert_equals: 'max(1%)' and '1%' should serialize the same in computed values. expected "1%" but got "max(1%)" 5 PASS 'max(1%)' as a specified value should serialize as 'calc(1%)'. 6 PASS 'max(1%)' as a computed value should serialize as '1%'. 7 7 PASS 'max(1%)' as a used value should serialize as '1px'. 8 FAIL 'min(1%, 2%, 3%)' as a specified value should serialize as 'min(1%, 2%, 3%)'. assert_equals: 'min(1%, 2%, 3%)' should round-trip exactly in specified values. expected "min(1%, 2%, 3%)" but got " min(1%)"9 FAIL 'min(1%, 2%, 3%)' as a computed value should serialize as 'min(1%, 2%, 3%)'. assert_equals: 'min(1%, 2%, 3%)' should round-trip exactly in computed values. expected "min(1%, 2%, 3%)" but got " min(1%)"8 FAIL 'min(1%, 2%, 3%)' as a specified value should serialize as 'min(1%, 2%, 3%)'. assert_equals: 'min(1%, 2%, 3%)' should round-trip exactly in specified values. expected "min(1%, 2%, 3%)" but got "calc(1%)" 9 FAIL 'min(1%, 2%, 3%)' as a computed value should serialize as 'min(1%, 2%, 3%)'. assert_equals: 'min(1%, 2%, 3%)' should round-trip exactly in computed values. expected "min(1%, 2%, 3%)" but got "1%" 10 10 PASS 'min(1%, 2%, 3%)' as a used value should serialize as '1px'. 11 FAIL 'min(3%, 2%, 1%)' as a specified value should serialize as 'min(3%, 2%, 1%)'. assert_equals: 'min(3%, 2%, 1%)' should round-trip exactly in specified values. expected "min(3%, 2%, 1%)" but got " min(1%)"12 FAIL 'min(3%, 2%, 1%)' as a computed value should serialize as 'min(3%, 2%, 1%)'. assert_equals: 'min(3%, 2%, 1%)' should round-trip exactly in computed values. expected "min(3%, 2%, 1%)" but got " min(1%)"11 FAIL 'min(3%, 2%, 1%)' as a specified value should serialize as 'min(3%, 2%, 1%)'. assert_equals: 'min(3%, 2%, 1%)' should round-trip exactly in specified values. expected "min(3%, 2%, 1%)" but got "calc(1%)" 12 FAIL 'min(3%, 2%, 1%)' as a computed value should serialize as 'min(3%, 2%, 1%)'. assert_equals: 'min(3%, 2%, 1%)' should round-trip exactly in computed values. expected "min(3%, 2%, 1%)" but got "1%" 13 13 PASS 'min(3%, 2%, 1%)' as a used value should serialize as '1px'. 14 FAIL 'max(1%, 2%, 3%)' as a specified value should serialize as 'max(1%, 2%, 3%)'. assert_equals: 'max(1%, 2%, 3%)' should round-trip exactly in specified values. expected "max(1%, 2%, 3%)" but got " max(3%)"15 FAIL 'max(1%, 2%, 3%)' as a computed value should serialize as 'max(1%, 2%, 3%)'. assert_equals: 'max(1%, 2%, 3%)' should round-trip exactly in computed values. expected "max(1%, 2%, 3%)" but got " max(3%)"14 FAIL 'max(1%, 2%, 3%)' as a specified value should serialize as 'max(1%, 2%, 3%)'. assert_equals: 'max(1%, 2%, 3%)' should round-trip exactly in specified values. expected "max(1%, 2%, 3%)" but got "calc(3%)" 15 FAIL 'max(1%, 2%, 3%)' as a computed value should serialize as 'max(1%, 2%, 3%)'. assert_equals: 'max(1%, 2%, 3%)' should round-trip exactly in computed values. expected "max(1%, 2%, 3%)" but got "3%" 16 16 PASS 'max(1%, 2%, 3%)' as a used value should serialize as '3px'. 17 FAIL 'max(3%, 2%, 1%)' as a specified value should serialize as 'max(3%, 2%, 1%)'. assert_equals: 'max(3%, 2%, 1%)' should round-trip exactly in specified values. expected "max(3%, 2%, 1%)" but got " max(3%)"18 FAIL 'max(3%, 2%, 1%)' as a computed value should serialize as 'max(3%, 2%, 1%)'. assert_equals: 'max(3%, 2%, 1%)' should round-trip exactly in computed values. expected "max(3%, 2%, 1%)" but got " max(3%)"17 FAIL 'max(3%, 2%, 1%)' as a specified value should serialize as 'max(3%, 2%, 1%)'. assert_equals: 'max(3%, 2%, 1%)' should round-trip exactly in specified values. expected "max(3%, 2%, 1%)" but got "calc(3%)" 18 FAIL 'max(3%, 2%, 1%)' as a computed value should serialize as 'max(3%, 2%, 1%)'. assert_equals: 'max(3%, 2%, 1%)' should round-trip exactly in computed values. expected "max(3%, 2%, 1%)" but got "3%" 19 19 PASS 'max(3%, 2%, 1%)' as a used value should serialize as '3px'. 20 20 PASS 'min(1%, 2%, 3%) 0px' as a specified value should serialize as 'min(1%, 2%, 3%) 0px'. 21 FAIL 'min(1%, 2%, 3%) 0px' as a computed value should serialize as 'min(1%, 2%, 3%) 0px'. assert_equals: 'min(1%, 2%, 3%) 0px' should round-trip exactly in computed values. expected "min(1%, 2%, 3%) 0px" but got " min(1%) 0px"21 FAIL 'min(1%, 2%, 3%) 0px' as a computed value should serialize as 'min(1%, 2%, 3%) 0px'. assert_equals: 'min(1%, 2%, 3%) 0px' should round-trip exactly in computed values. expected "min(1%, 2%, 3%) 0px" but got "calc(1%) 0px" 22 22 PASS 'calc(min(1%, 2%) + max(3%, 4%) + 10%)' as a specified value should serialize as 'calc(15%)'. 23 23 PASS 'calc(min(1%, 2%) + max(3%, 4%) + 10%)' as a computed value should serialize as '15%'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-values/minmax-time-serialize-expected.txt
r289997 r292893 1 1 2 FAIL 'min(1ms)' as a specified value should serialize as 'calc(0.001s)'. assert_equals: 'min(1ms)' and 'calc(0.001s)' should serialize the same in specified values. expected "calc(0.001s)" but got "min(0.001s)" 2 PASS 'min(1ms)' as a specified value should serialize as 'calc(0.001s)'. 3 3 PASS 'min(1ms)' as a computed value should serialize as '0.001s'. 4 FAIL 'min(1s)' as a specified value should serialize as 'calc(1s)'. assert_equals: 'min(1s)' and 'calc(1s)' should serialize the same in specified values. expected "calc(1s)" but got "min(1s)" 4 PASS 'min(1s)' as a specified value should serialize as 'calc(1s)'. 5 5 PASS 'min(1s)' as a computed value should serialize as '1s'. 6 FAIL 'max(1ms)' as a specified value should serialize as 'calc(0.001s)'. assert_equals: 'max(1ms)' and 'calc(0.001s)' should serialize the same in specified values. expected "calc(0.001s)" but got "max(0.001s)" 6 PASS 'max(1ms)' as a specified value should serialize as 'calc(0.001s)'. 7 7 PASS 'max(1ms)' as a computed value should serialize as '0.001s'. 8 FAIL 'max(1s)' as a specified value should serialize as 'calc(1s)'. assert_equals: 'max(1s)' and 'calc(1s)' should serialize the same in specified values. expected "calc(1s)" but got "max(1s)" 8 PASS 'max(1s)' as a specified value should serialize as 'calc(1s)'. 9 9 PASS 'max(1s)' as a computed value should serialize as '1s'. 10 FAIL 'min(1s, 2s, 3s)' as a specified value should serialize as 'calc(1s)'. assert_equals: 'min(1s, 2s, 3s)' and 'calc(1s)' should serialize the same in specified values. expected "calc(1s)" but got "min(1s)" 10 PASS 'min(1s, 2s, 3s)' as a specified value should serialize as 'calc(1s)'. 11 11 PASS 'min(1s, 2s, 3s)' as a computed value should serialize as '1s'. 12 FAIL 'min(3s, 2s, 1s)' as a specified value should serialize as 'calc(1s)'. assert_equals: 'min(3s, 2s, 1s)' and 'calc(1s)' should serialize the same in specified values. expected "calc(1s)" but got "min(1s)" 12 PASS 'min(3s, 2s, 1s)' as a specified value should serialize as 'calc(1s)'. 13 13 PASS 'min(3s, 2s, 1s)' as a computed value should serialize as '1s'. 14 FAIL 'max(1s, 2s, 3s)' as a specified value should serialize as 'calc(3s)'. assert_equals: 'max(1s, 2s, 3s)' and 'calc(3s)' should serialize the same in specified values. expected "calc(3s)" but got "max(3s)" 14 PASS 'max(1s, 2s, 3s)' as a specified value should serialize as 'calc(3s)'. 15 15 PASS 'max(1s, 2s, 3s)' as a computed value should serialize as '3s'. 16 FAIL 'max(3s, 2s, 1s)' as a specified value should serialize as 'calc(3s)'. assert_equals: 'max(3s, 2s, 1s)' and 'calc(3s)' should serialize the same in specified values. expected "calc(3s)" but got "max(3s)" 16 PASS 'max(3s, 2s, 1s)' as a specified value should serialize as 'calc(3s)'. 17 17 PASS 'max(3s, 2s, 1s)' as a computed value should serialize as '3s'. 18 FAIL 'min(900ms, 1s)' as a specified value should serialize as 'calc(0.9s)'. assert_equals: 'min(900ms, 1s)' and 'calc(0.9s)' should serialize the same in specified values. expected "calc(0.9s)" but got "min(0.9s)" 18 PASS 'min(900ms, 1s)' as a specified value should serialize as 'calc(0.9s)'. 19 19 PASS 'min(900ms, 1s)' as a computed value should serialize as '0.9s'. 20 FAIL 'max(1100ms, 1s)' as a specified value should serialize as 'calc(1.1s)'. assert_equals: 'max(1100ms, 1s)' and 'calc(1.1s)' should serialize the same in specified values. expected "calc(1.1s)" but got "max(1.1s)" 20 PASS 'max(1100ms, 1s)' as a specified value should serialize as 'calc(1.1s)'. 21 21 PASS 'max(1100ms, 1s)' as a computed value should serialize as '1.1s'. 22 22 PASS 'calc(min(1s, 2s) + max(3s, 4s) + 10s)' as a specified value should serialize as 'calc(15s)'. -
trunk/Source/WebCore/ChangeLog
r292892 r292893 1 2022-04-14 Nikolaos Mouchtaris <nmouchtaris@apple.com> 2 3 calc(): Serialize top level min/max/hypot as calc() 4 https://bugs.webkit.org/show_bug.cgi?id=239019 5 6 Reviewed by Darin Adler. 7 8 For functions that would have no effect on the top level value, serialize as calc() rather 9 than the function. 10 11 * css/calc/CSSCalcOperationNode.cpp: 12 (WebCore::CSSCalcOperationNode::simplifyNode): 13 * css/calc/CSSCalcOperationNode.h: 14 1 15 2022-04-14 Gabriel Nava Marino <gnavamarino@apple.com> 2 16 -
trunk/Source/WebCore/css/calc/CSSCalcOperationNode.cpp
r292732 r292893 867 867 } 868 868 869 inline void CSSCalcOperationNode::makeTopLevelCalc() 870 { 871 // Top level calc nodes where we need not preserve the function are changed into add nodes because 872 // that’s the best way to make them serialize as "calc(xxx)". 873 m_operator = CalcOperator::Add; 874 } 875 869 876 Ref<CSSCalcExpressionNode> CSSCalcOperationNode::simplifyNode(Ref<CSSCalcExpressionNode>&& rootNode, int depth) 870 877 { … … 902 909 903 910 // If only one child remains, return the child (except at the root). 904 auto shouldCombineParentWithOnlyChild = []( constCSSCalcOperationNode& parent, int depth)911 auto shouldCombineParentWithOnlyChild = [](CSSCalcOperationNode& parent, int depth) 905 912 { 906 913 if (parent.children().size() != 1) … … 910 917 if (depth) 911 918 return true; 919 920 if (parent.shouldNotPreserveFunction() && is<CSSCalcPrimitiveValueNode>(parent.children()[0])) { 921 parent.makeTopLevelCalc(); 922 return false; 923 } 912 924 913 925 // At the root, preserve the root function by only merging nodes with the same function. -
trunk/Source/WebCore/css/calc/CSSCalcOperationNode.h
r292732 r292893 143 143 } 144 144 145 void makeTopLevelCalc(); 146 bool shouldNotPreserveFunction() const { return isMinOrMaxNode() || isHypotNode(); } 145 147 static double evaluateOperator(CalcOperator, const Vector<double>&); 146 148 static Ref<CSSCalcExpressionNode> simplifyNode(Ref<CSSCalcExpressionNode>&&, int depth);
Note: See TracChangeset
for help on using the changeset viewer.