mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 10:57:34 +00:00
LibWeb: Ensure DOMRect top, bottom, left and right handle NaN correctly
This commit is contained in:
parent
b03c94c26e
commit
1560bfc6c9
3 changed files with 47 additions and 4 deletions
|
@ -3,8 +3,16 @@ Testing DOMRect:
|
||||||
2. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
2. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
||||||
3. {"x":-10,"y":-20,"width":30,"height":40,"top":-20,"right":20,"bottom":20,"left":-10}
|
3. {"x":-10,"y":-20,"width":30,"height":40,"top":-20,"right":20,"bottom":20,"left":-10}
|
||||||
4. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
4. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
||||||
|
5. {"x":null,"y":20,"width":30,"height":40,"top":20,"right":null,"bottom":60,"left":null}
|
||||||
|
6. {"x":10,"y":null,"width":30,"height":40,"top":null,"right":40,"bottom":null,"left":10}
|
||||||
|
7. {"x":10,"y":20,"width":null,"height":40,"top":20,"right":null,"bottom":60,"left":null}
|
||||||
|
8. {"x":10,"y":20,"width":30,"height":null,"top":null,"right":40,"bottom":null,"left":10}
|
||||||
Testing DOMRectReadOnly:
|
Testing DOMRectReadOnly:
|
||||||
1. {"x":0,"y":0,"width":0,"height":0,"top":0,"right":0,"bottom":0,"left":0}
|
1. {"x":0,"y":0,"width":0,"height":0,"top":0,"right":0,"bottom":0,"left":0}
|
||||||
2. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
2. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
||||||
3. {"x":-10,"y":-20,"width":30,"height":40,"top":-20,"right":20,"bottom":20,"left":-10}
|
3. {"x":-10,"y":-20,"width":30,"height":40,"top":-20,"right":20,"bottom":20,"left":-10}
|
||||||
4. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
4. {"x":10,"y":20,"width":30,"height":40,"top":20,"right":40,"bottom":60,"left":10}
|
||||||
|
5. {"x":null,"y":20,"width":30,"height":40,"top":20,"right":null,"bottom":60,"left":null}
|
||||||
|
6. {"x":10,"y":null,"width":30,"height":40,"top":null,"right":40,"bottom":null,"left":10}
|
||||||
|
7. {"x":10,"y":20,"width":null,"height":40,"top":20,"right":null,"bottom":60,"left":null}
|
||||||
|
8. {"x":10,"y":20,"width":30,"height":null,"top":null,"right":40,"bottom":null,"left":10}
|
||||||
|
|
|
@ -26,6 +26,18 @@
|
||||||
// 4. Creating a DOMRect with DOMRect.fromRect()
|
// 4. Creating a DOMRect with DOMRect.fromRect()
|
||||||
testPart(() => Rect.fromRect({ x: 10, y: 20, width: 30, height: 40 }));
|
testPart(() => Rect.fromRect({ x: 10, y: 20, width: 30, height: 40 }));
|
||||||
|
|
||||||
|
// 5. Creating a DOMRect with NaN x value
|
||||||
|
testPart(() => new Rect(NaN, 20, 30, 40));
|
||||||
|
|
||||||
|
// 6. Creating a DOMRect with NaN y value
|
||||||
|
testPart(() => new Rect(10, NaN, 30, 40));
|
||||||
|
|
||||||
|
// 7. Creating a DOMRect with NaN width value
|
||||||
|
testPart(() => new Rect(10, 20, NaN, 40));
|
||||||
|
|
||||||
|
// 8. Creating a DOMRect with NaN height value
|
||||||
|
testPart(() => new Rect(10, 20, 30, NaN));
|
||||||
|
|
||||||
testCounter = 1;
|
testCounter = 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -36,10 +36,33 @@ public:
|
||||||
double width() const { return m_rect.width(); }
|
double width() const { return m_rect.width(); }
|
||||||
double height() const { return m_rect.height(); }
|
double height() const { return m_rect.height(); }
|
||||||
|
|
||||||
double top() const { return min(y(), y() + height()); }
|
double top() const
|
||||||
double right() const { return max(x(), x() + width()); }
|
{
|
||||||
double bottom() const { return max(y(), y() + height()); }
|
if (isnan(y()) || isnan(height()))
|
||||||
double left() const { return min(x(), x() + width()); }
|
return NAN;
|
||||||
|
return min(y(), y() + height());
|
||||||
|
}
|
||||||
|
|
||||||
|
double right() const
|
||||||
|
{
|
||||||
|
if (isnan(x()) || isnan(width()))
|
||||||
|
return NAN;
|
||||||
|
return max(x(), x() + width());
|
||||||
|
}
|
||||||
|
|
||||||
|
double bottom() const
|
||||||
|
{
|
||||||
|
if (isnan(y()) || isnan(height()))
|
||||||
|
return NAN;
|
||||||
|
return max(y(), y() + height());
|
||||||
|
}
|
||||||
|
|
||||||
|
double left() const
|
||||||
|
{
|
||||||
|
if (isnan(x()) || isnan(width()))
|
||||||
|
return NAN;
|
||||||
|
return min(x(), x() + width());
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DOMRectReadOnly(JS::Realm&, double x, double y, double width, double height);
|
DOMRectReadOnly(JS::Realm&, double x, double y, double width, double height);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue