tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>