mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-30 19:47:17 +02:00
LibWeb: Add coverage test for calc() usage
Ignoring the fact that we should serialize a simplified form of calc()
expressions, the following are wrong:
- grid-auto-columns
- grid-auto-rows
- grid-template-columns
- grid-template-rows
- transform-origin
Generated in part with this python script (though I've since iterated on
the output repeatedly so it's quite different):
```py
import json
properties_file = open("./Userland/Libraries/LibWeb/CSS/Properties.json")
properties = json.load(properties_file)
for (key, value) in properties.items():
if not 'valid-types' in value:
continue
if 'longhands' in value:
continue
valid_types = value['valid-types']
for type_string in valid_types:
name, *suffix = type_string.split(None, 1)
match name:
case 'integer' | 'number':
print(f'{key}: calc(2 * var(--n));')
case 'angle':
print(f'{key}: calc(2deg * var(--n));')
case 'flex':
print(f'{key}: calc(2fr * var(--n));')
case 'frequency':
print(f'{key}: calc(2hz * var(--n));')
case 'length':
print(f'{key}: calc(2px * var(--n));')
case 'percentage':
print(f'{key}: calc(2% * var(--n));')
case 'resolution':
print(f'{key}: calc(2x * var(--n));')
case 'time':
print(f'{key}: calc(2s * var(--n));')
```
This commit is contained in:
committed by
Andreas Kling
parent
7c2680b7ef
commit
301502a3a1
Notes:
github-actions[bot]
2024-10-16 06:35:00 +00:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/LadybirdBrowser/ladybird/commit/301502a3a12 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1788 Reviewed-by: https://github.com/tcl3
337
Tests/LibWeb/Text/input/css/calc-coverage.html
Normal file
337
Tests/LibWeb/Text/input/css/calc-coverage.html
Normal file
@@ -0,0 +1,337 @@
|
||||
<!DOCTYPE html>
|
||||
<style>
|
||||
:root {
|
||||
--n: 2;
|
||||
}
|
||||
</style>
|
||||
<script src="../include.js"></script>
|
||||
<div id="target">Well, hello friends</div>
|
||||
<script>
|
||||
test(() => {
|
||||
let properties = {
|
||||
"animation-delay": [
|
||||
"calc(2s)",
|
||||
"calc(2s * var(--n))",
|
||||
],
|
||||
"animation-duration": [
|
||||
"calc(2s)",
|
||||
"calc(2s * var(--n))",
|
||||
],
|
||||
"animation-iteration-count": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"background-position-x": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"background-position-y": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"background-size": [
|
||||
"calc(2px * var(--n)) calc(2%)",
|
||||
"calc(2px * var(--n)) calc(2% * var(--n))",
|
||||
],
|
||||
"border-bottom-left-radius": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"border-bottom-right-radius": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"border-bottom-width": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"border-left-width": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"border-right-width": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"border-spacing": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"border-top-left-radius": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"border-top-right-radius": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"border-top-width": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"bottom": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"column-count": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"column-gap": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"column-width": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"counter-increment": [
|
||||
"foo calc(2)",
|
||||
"foo calc(2 * var(--n))",
|
||||
],
|
||||
"counter-reset": [
|
||||
"foo calc(2)",
|
||||
"foo calc(2 * var(--n))",
|
||||
],
|
||||
"counter-set": [
|
||||
"foo calc(2)",
|
||||
"foo calc(2 * var(--n))",
|
||||
],
|
||||
"cx": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"cy": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"fill-opacity": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"flex-basis": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"flex-grow": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"flex-shrink": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"font-feature-settings": [
|
||||
"'test' calc(2)",
|
||||
"'test' calc(2 * var(--n))",
|
||||
],
|
||||
"font-size": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"font-variation-settings": [
|
||||
"'test' calc(2)",
|
||||
"'test' calc(2 * var(--n))",
|
||||
],
|
||||
"font-weight": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"font-width": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"grid-auto-columns": [
|
||||
"calc(2fr)",
|
||||
"calc(2fr * var(--n))",
|
||||
],
|
||||
"grid-auto-rows": [
|
||||
"calc(2fr)",
|
||||
"calc(2fr * var(--n))",
|
||||
],
|
||||
"grid-template-columns": [
|
||||
"calc(2fr)",
|
||||
"calc(2fr * var(--n))",
|
||||
],
|
||||
"grid-template-rows": [
|
||||
"calc(2fr)",
|
||||
"calc(2fr * var(--n))",
|
||||
],
|
||||
"height": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"left": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"letter-spacing": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"line-height": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"margin-bottom": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"margin-left": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"margin-right": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"margin-top": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"math-depth": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"max-height": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"max-width": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"min-height": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"min-width": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"opacity": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"order": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"outline-offset": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"outline-width": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"padding-bottom": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"padding-left": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"padding-right": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"padding-top": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"r": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"right": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"row-gap": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"rx": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"ry": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"stop-opacity": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
"stroke-opacity": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"stroke-width": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"tab-size": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"text-decoration-thickness": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"text-indent": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"top": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"transform-origin": [
|
||||
"calc(2px) calc(2%)",
|
||||
"calc(2px * var(--n)) calc(2% * var(--n))",
|
||||
],
|
||||
"transition-delay": [
|
||||
"calc(2s)",
|
||||
"calc(2s * var(--n))",
|
||||
],
|
||||
"transition-duration": [
|
||||
"calc(2s)",
|
||||
"calc(2s * var(--n))",
|
||||
],
|
||||
"vertical-align": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"width": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"word-spacing": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"x": [
|
||||
"calc(2px)",
|
||||
"calc(2px * var(--n))",
|
||||
],
|
||||
"y": [
|
||||
"calc(2%)",
|
||||
"calc(2% * var(--n))",
|
||||
],
|
||||
"z-index": [
|
||||
"calc(2)",
|
||||
"calc(2 * var(--n))",
|
||||
],
|
||||
};
|
||||
let target = document.getElementById("target");
|
||||
for (let [property, values] of Object.entries(properties)) {
|
||||
for (let value of values) {
|
||||
target.setAttribute("style", `${property}: ${value}`);
|
||||
println(`${property}: '${value}' -> '${getComputedStyle(target)[property]}'`);
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user