summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-fonts/variations/font-stretch.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/css-fonts/variations/font-stretch.html')
-rw-r--r--testing/web-platform/tests/css/css-fonts/variations/font-stretch.html84
1 files changed, 84 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-fonts/variations/font-stretch.html b/testing/web-platform/tests/css/css-fonts/variations/font-stretch.html
new file mode 100644
index 0000000000..a27b251f48
--- /dev/null
+++ b/testing/web-platform/tests/css/css-fonts/variations/font-stretch.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Testing new font-stretch values introduced in CSS Fonts level 4</title>
+ <link rel="help" href="https://www.w3.org/TR/css-fonts-4/#font-stretch-prop" />
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+ <div id="computedStyleTest">Abc</span></div>
+ <div id="inheritanceTest"><span style="font-stretch:125%;">Abc</span><span style="font-stretch:expanded;">Abc</span><span style="font-weight: 700;">Abc</span></div>
+ <script>
+
+ testStretchValues = [
+ { stretch: "100", expectedComputedStretch: "100%" , expectedIsSupported: false, message: "only percentages, not numbers allowed" },
+ { stretch: "-1%", expectedComputedStretch: "" , expectedIsSupported: false, message: "negative values are illegal" },
+ { stretch: "0%", expectedComputedStretch: "0%", expectedIsSupported: true, message: "zero is legal" },
+ { stretch: "1%", expectedComputedStretch: "1%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "10%", expectedComputedStretch: "10%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "100%", expectedComputedStretch: "100%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "1000%", expectedComputedStretch: "1000%", expectedIsSupported: true, message: "legal percentage" },
+ { stretch: "1e9%", expectedComputedStretch: "1e+009%", expectedIsSupported: true, message: "huge legal percentage" },
+ { stretch: "ultra-condensed", expectedComputedStretch: "50%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "extra-condensed", expectedComputedStretch: "62.5%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "condensed", expectedComputedStretch: "75%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "semi-condensed", expectedComputedStretch: "87.5%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "normal", expectedComputedStretch: "100%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "semi-expanded", expectedComputedStretch: "112.5%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "expanded", expectedComputedStretch: "125%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "extra-expanded", expectedComputedStretch: "150%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "ultra-expanded", expectedComputedStretch: "200%", expectedIsSupported: true, message: "legal enum" },
+ { stretch: "narrower", expectedComputedStretch: "", expectedIsSupported: false, message: "deprecated" },
+ { stretch: "wider", expectedComputedStretch: "", expectedIsSupported: false, message: "deprecated" },
+ { stretch: "calc(200.5%)", expectedComputedStretch: "200.5%", expectedIsSupported: true, message: "Simple calc value" },
+ { stretch: "calc(50%*2 - 20%)", expectedComputedStretch: "80%", expectedIsSupported: true, message: "Valid calc expression" },
+ { stretch: "calc(-100%)", expectedComputedStretch: "0%", expectedIsSupported: true, message: "Negative calc value (to be clamped)" },
+ { stretch: "calc(50% - 50%*2)", expectedComputedStretch: "0%", expectedIsSupported: true, message: "Negative calc expression (to be clamped)" },
+ { stretch: "calc(100)", expectedComputedStretch: "", expectedIsSupported: false, message: "Unit-less calc value" },
+ { stretch: "calc(100px)", expectedComputedStretch: "", expectedIsSupported: false, message: "Calc value with units" },
+ { stretch: "100% 700%", expectedComputedStretch: "", expectedIsSupported: false, message: "Extra percentage after numeric value" },
+ { stretch: "100% 100", expectedComputedStretch: "", expectedIsSupported: false, message: "Extra content after numeric value" },
+ { stretch: "condensed expanded",expectedComputedStretch: "", expectedIsSupported: false, message: "Extra content after keyword value" },
+ { stretch: "calc(100%) 100%", expectedComputedStretch: "", expectedIsSupported: false, message: "Extra content after calc value" }
+ ];
+
+ testStretchValues.forEach(function (element) {
+ test(() => { assert_equals(window.CSS.supports("font-stretch", element.stretch), element.expectedIsSupported, element.message); }, "@supports: " + element.stretch + " - " + element.message);
+
+ // If supported, verify the computed style.
+ if (element.expectedIsSupported)
+ {
+ var testSpan = document.getElementById("computedStyleTest");
+ testSpan.style.fontStretch = element.stretch;
+ var actualStretch = window.getComputedStyle(testSpan).fontStretch;
+
+ test(() => { assert_equals(actualStretch, element.expectedComputedStretch, element.message); }, "@getComputedStyle: " + element.stretch + " - " + element.message);
+ }
+ });
+
+ // Verify computed inheritance of nested elements.
+ {
+ var base = document.getElementById("inheritanceTest");
+ var parentStretch = "condensed";
+ base.style.fontStretch = parentStretch;
+
+ test(() => {
+ var actualStretch = window.getComputedStyle(base.children[0]).fontStretch;
+ assert_equals(actualStretch, "125%", "Overridden value for " + parentStretch + " should match expected value.");
+ }, "Test font-stretch for overridden number " + parentStretch);
+
+ test(() => {
+ var actualStretch = window.getComputedStyle(base.children[1]).fontStretch;
+ assert_equals(actualStretch, "125%", "Inherited value " + parentStretch + " should match expected value.");
+ }, "Test font-stretch for overridden enum name resolved to number " + parentStretch);
+
+ test(() => {
+ var actualStretch = window.getComputedStyle(base.children[2]).fontStretch;
+ assert_equals(actualStretch, "75%", "Inherited value " + parentStretch + " should match expected value.");
+ }, "Test font-stretch for inherited named enum resolved to number " + parentStretch);
+ }
+
+ </script>
+</body>
+</html>