summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/cssom/font-variant-shorthand-serialization.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/cssom/font-variant-shorthand-serialization.html')
-rw-r--r--testing/web-platform/tests/css/cssom/font-variant-shorthand-serialization.html131
1 files changed, 131 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/cssom/font-variant-shorthand-serialization.html b/testing/web-platform/tests/css/cssom/font-variant-shorthand-serialization.html
new file mode 100644
index 0000000000..0e4651cdc0
--- /dev/null
+++ b/testing/web-platform/tests/css/cssom/font-variant-shorthand-serialization.html
@@ -0,0 +1,131 @@
+<!doctype html>
+<html>
+<meta charset="utf-8">
+<title>Serialization of font-variant shorthand</title>
+<link rel="author" title="Tim Nguyen" href="https://github.com/nt1m">
+<link rel="help" href="https://drafts.csswg.org/cssom-1/#serialize-a-css-declaration-block">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
+<div id="target"></div>
+<script>
+ const cssWideKeywords = ["initial", "inherit", "unset", "revert", "revert-layer"];
+ function test_serialization_set(expected) {
+ for (const [property, value] of Object.entries(expected)) {
+ if (!CSS.supports(`${property}: initial`))
+ continue;
+ assert_equals(target.style[property], value, `${property} was set`);
+ }
+ }
+ function setWithValue(value) {
+ return {
+ "font-variant-ligatures": value,
+ "font-variant-caps": value,
+ "font-variant-alternates": value,
+ "font-variant-numeric": value,
+ "font-variant-east-asian": value,
+ "font-variant-position": value,
+ "font-variant-emoji": value,
+ "font-variant": value
+ };
+ }
+ const emptySet = setWithValue("");
+ const normalSet = setWithValue("normal");
+ const nonDefaultValues = {
+ "font-variant-ligatures": "common-ligatures discretionary-ligatures",
+ "font-variant-caps": "small-caps",
+ "font-variant-alternates": "historical-forms",
+ "font-variant-numeric": "oldstyle-nums stacked-fractions",
+ "font-variant-east-asian": "ruby",
+ "font-variant-position": "sub",
+ "font-variant-emoji": "emoji",
+ };
+ test(function(t) {
+ target.style.fontVariant = "normal";
+ t.add_cleanup(() => target.removeAttribute("style"));
+
+ test_serialization_set(normalSet);
+ }, "font-variant: normal serialization");
+
+ test(function(t) {
+ target.style.fontVariant = "normal";
+ target.style.fontVariantLigatures = "none";
+ t.add_cleanup(() => target.removeAttribute("style"));
+
+ const expected = Object.assign({}, normalSet);
+ expected["font-variant-ligatures"] = "none";
+ expected["font-variant"] = "none";
+
+ test_serialization_set(expected);
+ }, "font-variant: none serialization");
+
+ test(function(t) {
+ t.add_cleanup(() => target.removeAttribute("style"));
+ for (const [property, value] of Object.entries(nonDefaultValues)) {
+ if (property == "font-variant-ligatures" || !CSS.supports(`${property}: initial`))
+ continue;
+ target.style.fontVariant = "normal";
+ target.style.fontVariantLigatures = "none";
+ target.style[property] = value;
+
+ const expected = Object.assign({}, normalSet);
+ expected["font-variant-ligatures"] = "none";
+ expected["font-variant"] = "";
+ expected[property] = value;
+
+ test_serialization_set(expected);
+ target.removeAttribute("style");
+ }
+ }, "font-variant-ligatures: none serialization with non-default value for another longhand");
+
+ test(function(t) {
+ t.add_cleanup(() => target.removeAttribute("style"));
+
+ for (const [property, value] of Object.entries(nonDefaultValues)) {
+ if (!CSS.supports(`${property}: initial`))
+ continue;
+ target.style.fontVariant = "normal";
+ target.style[property] = value;
+
+ const expected = Object.assign({}, normalSet);
+ expected[property] = value;
+ expected["font-variant"] = value;
+ test_serialization_set(expected);
+
+ target.removeAttribute("style");
+ }
+ }, "font-variant: normal with non-default longhands");
+
+ test(function(t) {
+ t.add_cleanup(() => target.removeAttribute("style"));
+ for (const keyword of cssWideKeywords) {
+ target.style.fontVariant = "normal";
+ target.style.fontVariantLigatures = keyword;
+
+ const expected = Object.assign({}, normalSet);
+ expected["font-variant-ligatures"] = keyword;
+ expected["font-variant"] = "";
+ test_serialization_set(expected);
+ target.removeAttribute("style");
+ }
+ }, "CSS-wide keyword in one longhand");
+
+ test(function(t) {
+ t.add_cleanup(() => target.removeAttribute("style"));
+
+ for (const keyword of cssWideKeywords) {
+ target.style.fontVariant = keyword;
+ test_serialization_set(setWithValue(keyword));
+ target.removeAttribute("style");
+ }
+ }, "CSS-wide keyword in shorthand");
+
+ test(function(t) {
+ target.style.fontVariant = "normal";
+ target.style.font = "menu";
+ t.add_cleanup(() => target.removeAttribute("style"));
+
+ test_serialization_set(emptySet);
+ }, "font: menu serialization");
+</script>
+</html>