diff options
Diffstat (limited to 'testing/web-platform/tests/css/cssom/CSSFontFeatureValuesRule.html')
-rw-r--r-- | testing/web-platform/tests/css/cssom/CSSFontFeatureValuesRule.html | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/cssom/CSSFontFeatureValuesRule.html b/testing/web-platform/tests/css/cssom/CSSFontFeatureValuesRule.html new file mode 100644 index 0000000000..a0ea64a503 --- /dev/null +++ b/testing/web-platform/tests/css/cssom/CSSFontFeatureValuesRule.html @@ -0,0 +1,192 @@ +<!DOCTYPE html> +<meta charset="utf-8" /> +<title>CSSOM - CSSFontFeatureValuesRule interface</title> +<link + rel="help" + href="https://drafts.csswg.org/css-fonts-4/#om-fontfeaturevalues" +/> +<link rel="author" title="Dominik Röttsches" href="drott@chromium.org" /> +<meta + name="assert" + content="CSSFontFeatureValuesRule interface is accessible and supports read and write access." +/> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style></style> +<body></body> +<script> + let rule_initial = ` + @font-feature-values test_family { + @annotation { + the_first: 6; + } + @styleset { + yo: 7; + del: 4; + di: 10 9 4 5; + } + } + `; + + let rule_added = ` + @font-feature-values second_family { + @annotation { + yabab: 2; + yogog: 4; + bidib: 5; + } + } + `; + + let rule_overlap = ` + @font-feature-values test_family { + @annotation { + baric: 17; + } + @ornaments { + fooic: 1; + } + } + `; + + function resetStateAndTest(testFunction) { + var sheet = document.styleSheets[0]; + while (sheet.cssRules.length > 0) sheet.deleteRule(0); + sheet.insertRule(rule_initial); + testFunction(); + } + + test(function () { + resetStateAndTest(() => { + let rule = document.styleSheets[0].cssRules[0]; + assert_equals(rule.type, 14); + assert_equals(rule.annotation.size, 1); + assert_equals(rule.styleset.size, 3); + assert_array_equals(rule.styleset.get("yo"), [7]); + assert_array_equals(rule.styleset.get("del"), [4]); + assert_array_equals(rule.styleset.get("di"), [10, 9, 4, 5]); + assert_array_equals(rule.annotation.get("the_first"), [6]); + assert_equals(rule.stylistic.size, 0); + assert_equals(rule.swash.size, 0); + assert_equals(rule.ornaments.size, 0); + assert_equals(rule.characterVariant.size, 0); + assert_equals(rule.fontFamily, "test_family"); + }); + }, "CSSFontFeatureValuesRule is correctly parsed and accessible via CSSOM."); + + test(function () { + resetStateAndTest(() => { + let family_override = "test_changed_family"; + let rule = document.styleSheets[0].cssRules[0]; + rule.fontFamily = family_override; + let read_rule = document.styleSheets[0].cssRules[0]; + assert_equals(read_rule.fontFamily, family_override); + }); + }, "CSSFontFeatureValuesRule family is settable and readable."); + + test(function () { + resetStateAndTest(() => { + let rule = document.styleSheets[0].cssRules[0]; + let override_number = 43; + assert_equals(rule.styleset.get("di").length, 4); + rule.styleset.set("di", override_number); + assert_array_equals( + document.styleSheets[0].cssRules[0].styleset.get("di"), + [override_number] + ); + assert_equals(rule.styleset.size, 3); + assert_equals( + document.styleSheets[0].cssRules[0].styleset.get("di").length, + 1 + ); + }); + }, "CSSFontFeatureValuesMap entries are settable to single values."); + + test(function () { + resetStateAndTest(() => { + let rule = document.styleSheets[0].cssRules[0]; + let override_sequence = [43, 22]; + assert_equals( + document.styleSheets[0].cssRules[0].styleset.get("di").length, + 4 + ); + rule.styleset.set("di", override_sequence); + assert_array_equals( + document.styleSheets[0].cssRules[0].styleset.get("di"), + override_sequence + ); + assert_equals(document.styleSheets[0].cssRules[0].styleset.size, 3); + assert_equals( + document.styleSheets[0].cssRules[0].styleset.get("di").length, + 2 + ); + }); + }, "CSSFontFeatureValuesMap entries are settable to sequences of numbers."); + + test(function () { + resetStateAndTest(() => { + document.styleSheets[0].insertRule(rule_added, 1); + assert_equals(document.styleSheets[0].cssRules[1].type, 14); + assert_equals(document.styleSheets[0].cssRules[1].annotation.size, 3); + }); + }, "New rules can be added."); + + test(function () { + resetStateAndTest(() => { + document.styleSheets[0].insertRule(rule_added, 1); + assert_equals(document.styleSheets[0].cssRules[1].annotation.size, 3); + document.styleSheets[0].cssRules[1].annotation.delete("yogog"); + assert_equals(document.styleSheets[0].cssRules[1].annotation.size, 2); + }); + }, "Deleting single entries is possible."); + + test(function () { + resetStateAndTest(() => { + document.styleSheets[0].insertRule(rule_added, 1); + assert_equals(document.styleSheets[0].cssRules[1].annotation.size, 3); + document.styleSheets[0].cssRules[1].annotation.clear(); + assert_equals(document.styleSheets[0].cssRules[1].annotation.size, 0); + }); + }, "Clearing all entries is possible."); + + test(function () { + resetStateAndTest(() => { + assert_equals(document.styleSheets[0].cssRules.length, 1); + document.styleSheets[0].insertRule(rule_overlap, 1); + assert_equals(document.styleSheets[0].cssRules.length, 2); + + // Force updating internal state. + getComputedStyle(document.body).borderTop; + + assert_equals( + document.styleSheets[0].cssRules[0].annotation.size, + 1, + "1 annotation." + ); + assert_equals( + document.styleSheets[0].cssRules[0].styleset.size, + 3, + "3 entries in styleset." + ); + assert_equals( + document.styleSheets[0].cssRules[0].ornaments.size, + 0, + "No ornament entries." + ); + assert_false( + document.styleSheets[0].cssRules[0].annotation.has("baric"), + "Annotation must not contain 'baric'." + ); + assert_false( + document.styleSheets[0].cssRules[0].ornaments.has("fooic"), + "Ornaments must not contain 'fooic'." + ); + + assert_equals(document.styleSheets[0].cssRules[1].annotation.size, 1); + assert_equals(document.styleSheets[0].cssRules[1].ornaments.size, 1); + assert_false( + document.styleSheets[0].cssRules[1].annotation.has("the_first") + ); + }); + }, "Multiple rules for the same family are kept separate in CSSOM."); +</script> |