font-style-parsing.html (5632B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>Testing the new font-style values introduced in CSS Fonts level 4</title> 5 <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-style-prop" /> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 </head> 9 <body> 10 <div id="test"></div> 11 <script> 12 var testFontStyle = [ 13 { style: "italic", expectedResult: true, message: "'italic' is valid" }, 14 { style: "italic 20deg", expectedResult: false, message: "'italic' followed by angle is invalid" }, 15 { style: "italic a", expectedResult: false, message: "'italic' followed by non-number is invalid" }, 16 { style: "oblique", expectedResult: true, message: "'oblique' is valid" }, 17 { style: "oblique 0deg", expectedResult: true, message: "'oblique' followed by zero degrees is valid", expectedValue: "normal" }, 18 { style: "oblique 20deg", expectedResult: true, message: "'oblique' followed by positive angle in degrees is valid" }, 19 { style: "oblique 0.5rad", expectedResult: true, message: "'oblique' followed by positive angle in radians is valid", expectedValue: /^oblique 28\.\d*deg$/ }, 20 { style: "oblique 20grad", expectedResult: true, message: "'oblique' followed by positive angle in gradians is valid", expectedValue: "oblique 18deg" }, 21 { style: "oblique 0.1turn", expectedResult: true, message: "'oblique' followed by positive angle in turns is valid", expectedValue: "oblique 36deg" }, 22 { style: "oblique 20px", expectedResult: false, message: "'oblique' followed by number with invalid unit type is in valid" }, 23 { style: "oblique -20deg", expectedResult: true, message: "'oblique' followed by negative angle is valid" }, 24 { style: "oblique 20.5deg", expectedResult: true, message: "'oblique' followed by fractional angle is valid" }, 25 { style: "oblique 90deg", expectedResult: true, message: "'oblique' followed by maxumum 90 degree angle is valid" }, 26 { style: "oblique -90deg", expectedResult: true, message: "'oblique' followed by minimum -90 degree angle is valid" }, 27 { style: "oblique 90.01deg", expectedResult: false, message: "'oblique' followed by positive out of range angle is in invalid" }, 28 { style: "oblique -90.01deg", expectedResult: false, message: "'oblique' followed by negative out of range angle is in invalid" }, 29 { style: "oblique 10", expectedResult: false, message: "'oblique' followed by unit-less value is invalid" }, 30 { style: "oblique 30deg", expectedResult: true, message: "'oblique' followed by positive angle is valid" }, 31 { style: "oblique a", expectedResult: false, message: "'oblique' followed by non-number is invalid" }, 32 { style: "oblique 20deg a", expectedResult: false, message: "'oblique' and angle followed by non-number is invalid" }, 33 { style: "oblique -", expectedResult: false, message: "'oblique' followed by isolated minus is invalid" }, 34 { style: "oblique - 20deg", expectedResult: false, message: "'oblique' followed by minus and angle separated by space is invalid" }, 35 { style: "oblique -a", expectedResult: false, message: "'oblique' followed by minus and non-number is invalid" }, 36 { style: "oblique calc(50deg)", expectedResult: true, message: "'oblique' followed by calc is valid", expectedValue: "oblique 50deg" }, 37 { style: "oblique calc(-120deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (no computation)", expectedValue: "oblique -90deg" }, 38 { style: "oblique calc(6 * 20deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it must be clamped (with computation)", expectedValue: "oblique 90deg" }, 39 { style: "oblique calc(10grad + 5deg)", expectedResult: true, message: "'oblique' followed by calc is valid even if it mixes units (with computation)", expectedValue: "oblique" } 40 ]; 41 42 testFontStyle.forEach(function (testCase) { 43 test(() => { 44 assert_equals(window.CSS.supports("font-style", testCase.style), testCase.expectedResult, "Font-style supports: " + testCase.message); 45 }, "Font-style (supports): " + testCase.message); 46 }); 47 48 testFontStyle.forEach(function (testCase) { 49 if (testCase.expectedResult) { 50 test(() => { 51 let element = document.getElementById("test"); 52 element.style = "font-style: " + testCase.style; 53 let actualValue = getComputedStyle(element).fontStyle; 54 let expectedValue = testCase.expectedValue ?? testCase.style; 55 let assert_fn = expectedValue instanceof RegExp ? assert_regexp_match : assert_equals; 56 assert_fn(actualValue, expectedValue, "Font-style computed style: " + testCase.message); 57 }, "Font-style (computed): " + testCase.message); 58 } 59 }); 60 </script> 61 </body> 62 </html>