mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-27 02:05:07 +02:00
Tests: Import some @font-feature-values tests
This commit is contained in:
Notes:
github-actions[bot]
2026-02-17 12:27:14 +00:00
Author: https://github.com/Calme1709 Commit: https://github.com/LadybirdBrowser/ladybird/commit/f36d0407ec6 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/7979 Reviewed-by: https://github.com/AtkinsSJ ✅
@@ -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>
|
||||
Reference in New Issue
Block a user