LibWeb/CSS: Correct definition of CSSNumericType

What I thought was a spec issue was actually a combination of my own
misunderstanding and a bug in our IDL generator. With that bug fixed, I
can correct this to how it is in the spec.
This commit is contained in:
Sam Atkins 2025-08-22 12:02:52 +01:00 committed by Andreas Kling
commit 9264f540dd
Notes: github-actions[bot] 2025-08-29 09:58:35 +00:00
7 changed files with 45 additions and 48 deletions

View file

@ -15,14 +15,14 @@
namespace Web::CSS {
struct CSSNumericType {
WebIDL::Long length {};
WebIDL::Long angle {};
WebIDL::Long time {};
WebIDL::Long frequency {};
WebIDL::Long resolution {};
WebIDL::Long flex {};
WebIDL::Long percent {};
Optional<Bindings::CSSNumericBaseType> percent_hint {};
Optional<WebIDL::Long> length;
Optional<WebIDL::Long> angle;
Optional<WebIDL::Long> time;
Optional<WebIDL::Long> frequency;
Optional<WebIDL::Long> resolution;
Optional<WebIDL::Long> flex;
Optional<WebIDL::Long> percent;
Optional<Bindings::CSSNumericBaseType> percent_hint;
};
// https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue

View file

@ -12,16 +12,15 @@ enum CSSNumericBaseType {
};
// https://drafts.css-houdini.org/css-typed-om-1/#dictdef-cssnumerictype
// AD-HOC: We give these default values and mark percentHint as nullable. https://github.com/w3c/css-houdini-drafts/issues/1149
dictionary CSSNumericType {
long length = 0;
long angle = 0;
long time = 0;
long frequency = 0;
long resolution = 0;
long flex = 0;
long percent = 0;
CSSNumericBaseType? percentHint;
long length;
long angle;
long time;
long frequency;
long resolution;
long flex;
long percent;
CSSNumericBaseType percentHint;
};
// https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue

View file

@ -2,12 +2,11 @@ Harness status: OK
Found 7 tests
2 Pass
5 Fail
7 Pass
Pass Adding two types with different non-null percent hints throws TypeError
Fail Adding two types with the same nonzero values returns same type
Fail Adding two types with empty maps with returns empty map
Fail Adding a type with percent returns type with percent hint
Pass Adding two types with the same nonzero values returns same type
Pass Adding two types with empty maps with returns empty map
Pass Adding a type with percent returns type with percent hint
Pass Adding a type with percent 2 returns type with percent hint throws TypeError
Fail Adding a type with a percent hint returns a type with the percent hint
Fail Adding two types with the same percent hint returns a type with the percent hint
Pass Adding a type with a percent hint returns a type with the percent hint
Pass Adding two types with the same percent hint returns a type with the percent hint

View file

@ -2,12 +2,12 @@ Harness status: OK
Found 8 tests
8 Fail
Fail Creating a type from "number" returns {}
Fail Creating a type from "percent" returns { percent: 1 }
Fail Creating a type from <length> returns { length: 1 }
Fail Creating a type from <angle> returns { angle: 1 }
Fail Creating a type from <time> returns { time: 1 }
Fail Creating a type from <frequency> returns { frequency: 1 }
Fail Creating a type from <resolution> returns { resolution: 1 }
Fail Creating a type from <flex> returns { flex: 1 }
8 Pass
Pass Creating a type from "number" returns {}
Pass Creating a type from "percent" returns { percent: 1 }
Pass Creating a type from <length> returns { length: 1 }
Pass Creating a type from <angle> returns { angle: 1 }
Pass Creating a type from <time> returns { time: 1 }
Pass Creating a type from <frequency> returns { frequency: 1 }
Pass Creating a type from <resolution> returns { resolution: 1 }
Pass Creating a type from <flex> returns { flex: 1 }

View file

@ -2,7 +2,7 @@ Harness status: OK
Found 3 tests
3 Fail
Fail Inverting a type with empty map returns the empty map
Fail Inverting a type negates all its exponents
Fail Inverting an inverted type returns the original type
3 Pass
Pass Inverting a type with empty map returns the empty map
Pass Inverting a type negates all its exponents
Pass Inverting an inverted type returns the original type

View file

@ -2,6 +2,6 @@ Harness status: OK
Found 2 tests
2 Fail
Fail Negating a type with empty map returns the empty map
Fail Negating a type returns the same type
2 Pass
Pass Negating a type with empty map returns the empty map
Pass Negating a type returns the same type

View file

@ -2,12 +2,11 @@ Harness status: OK
Found 7 tests
1 Pass
6 Fail
7 Pass
Pass Multiplying two types with different non-null percent hints throws TypeError
Fail Multiplying two types with same base types adds exponents
Fail Multiplying two types with different base types adds exponents
Fail Multiplying two types respects the sign of the exponents
Fail Multiplying a type with no exponents is a no-op
Fail Multiplying a type with percent hint applies the percent hint
Fail Multiplying two types with same percent hint applies the percent hint
Pass Multiplying two types with same base types adds exponents
Pass Multiplying two types with different base types adds exponents
Pass Multiplying two types respects the sign of the exponents
Pass Multiplying a type with no exponents is a no-op
Pass Multiplying a type with percent hint applies the percent hint
Pass Multiplying two types with same percent hint applies the percent hint