mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-09 09:39:39 +00:00
LibWeb: Implement HTML spec-compliant rules for floating-point parsing
Attempt to implement HTML specs for parsing floating-point number https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#rules-for-parsing-floating-point-number-values
This commit is contained in:
parent
ba71cb1ca4
commit
14e1e55319
Notes:
github-actions[bot]
2024-10-30 09:48:30 +00:00
Author: https://github.com/khaledev
Commit: 14e1e55319
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1962
3 changed files with 329 additions and 5 deletions
84
Tests/LibWeb/Text/input/input-number-float.html
Normal file
84
Tests/LibWeb/Text/input/input-number-float.html
Normal file
|
@ -0,0 +1,84 @@
|
|||
<input id="input_number" type="number" />
|
||||
<script src="include.js"></script>
|
||||
<script>
|
||||
function testInputGetter(element, value) {
|
||||
try {
|
||||
element.value = value;
|
||||
println(`${element.valueAsNumber}`);
|
||||
} catch (e) {
|
||||
println(`error`);
|
||||
}
|
||||
};
|
||||
|
||||
function testInputSetter(element, valueAsNumber) {
|
||||
try {
|
||||
element.valueAsNumber = valueAsNumber;
|
||||
println(`${element.value}`);
|
||||
} catch (e) {
|
||||
println(`error`);
|
||||
}
|
||||
};
|
||||
|
||||
test(() => {
|
||||
let input = document.getElementById("input_number");
|
||||
|
||||
println(`Getting values (string to number)`);
|
||||
// Basic valid floating point number parsing
|
||||
testInputGetter(input, "42");
|
||||
testInputGetter(input, "-42");
|
||||
testInputGetter(input, "+42");
|
||||
testInputGetter(input, "0");
|
||||
testInputGetter(input, "0.5");
|
||||
testInputGetter(input, "-0.5");
|
||||
testInputGetter(input, ".5");
|
||||
testInputGetter(input, ".");
|
||||
// Floating point parsing with leading and trailing whitespace
|
||||
testInputGetter(input, " 123 ");
|
||||
testInputGetter(input, "\t-123\t");
|
||||
testInputGetter(input, "\n 0.5 \n");
|
||||
// Handling NaN and Infinity values
|
||||
testInputGetter(input, "NaN");
|
||||
testInputGetter(input, "Infinity");
|
||||
testInputGetter(input, "-Infinity");
|
||||
// Parsing numbers in exponential notation
|
||||
testInputGetter(input, "1e2");
|
||||
testInputGetter(input, "1e-2");
|
||||
testInputGetter(input, "1.5e3");
|
||||
testInputGetter(input, "-1.5e-3");
|
||||
// Handling special values 2^1024 and -2^1024
|
||||
testInputGetter(input, "2e1024");
|
||||
testInputGetter(input, "-2e1024");
|
||||
// Handling invalid floating point number inputs
|
||||
testInputGetter(input, "abc");
|
||||
testInputGetter(input, "1.2.3");
|
||||
testInputGetter(input, "++123");
|
||||
testInputGetter(input, "--123");
|
||||
// Handling negative zero (-0)
|
||||
testInputGetter(input, "-0");
|
||||
testInputGetter(input, "+0");
|
||||
// Handling large numbers and overflow
|
||||
testInputGetter(input, "1e308");
|
||||
testInputGetter(input, "-1e308");
|
||||
testInputGetter(input, "1e309"); // overflow
|
||||
testInputGetter(input, "-1e309"); // overflow
|
||||
|
||||
println(`Setting values (number to string)`);
|
||||
testInputSetter(input, 42);
|
||||
testInputSetter(input, -42);
|
||||
testInputSetter(input, 0.5);
|
||||
testInputSetter(input, -0.5);
|
||||
testInputSetter(input, 1e2);
|
||||
testInputSetter(input, 1e-2);
|
||||
testInputSetter(input, 1.5e3);
|
||||
testInputSetter(input, -1.5e-3);
|
||||
testInputSetter(input, 2e1024);
|
||||
testInputSetter(input, -2e1024);
|
||||
testInputSetter(input, 1e308);
|
||||
testInputSetter(input, -1e308);
|
||||
testInputSetter(input, 1e309);
|
||||
testInputSetter(input, -1e309);
|
||||
testInputSetter(input, -0);
|
||||
testInputSetter(input, +0);
|
||||
testInputSetter(input, 0);
|
||||
});
|
||||
</script>
|
Loading…
Add table
Add a link
Reference in a new issue