fix zero division error (#2674)

* fix zero division error

* push tests
This commit is contained in:
Will McGugan
2023-05-28 14:56:05 +01:00
committed by GitHub
parent 65b0c34f2e
commit ab10c7c326
3 changed files with 34 additions and 2 deletions

View File

@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
## Unreleased
### Fixed
- Fixed zero division error https://github.com/Textualize/textual/issues/2673
### Added
- `work` decorator accepts `description` parameter to add debug string https://github.com/Textualize/textual/issues/2597

View File

@@ -101,6 +101,8 @@ def resolve_fraction_unit(
if not remaining_space or not widget_styles:
return Fraction(1)
initial_space = remaining_space
def resolve_scalar(
scalar: Scalar | None, fraction_unit: Fraction = Fraction(1)
) -> Fraction | None:
@@ -166,8 +168,8 @@ def resolve_fraction_unit(
return (
Fraction(remaining_space, remaining_fraction)
if remaining_space > 0
else Fraction(1)
if remaining_fraction > 0
else initial_space
)

View File

@@ -5,6 +5,7 @@ import pytest
from textual._resolve import resolve, resolve_fraction_unit
from textual.css.scalar import Scalar
from textual.css.styles import Styles
from textual.geometry import Size
from textual.widget import Widget
@@ -125,6 +126,30 @@ def test_resolve_fraction_unit():
) == Fraction(2)
def test_resolve_fraction_unit_stress_test():
"""Check for zero division errors."""
# https://github.com/Textualize/textual/issues/2673
widget = Widget()
styles = widget.styles
styles.width = "1fr"
# We're mainly checking for the absence of zero division errors,
# which is a reoccurring theme for this code.
for remaining_space in range(1, 101, 10):
for max_width in range(1, remaining_space):
styles.max_width = max_width
for width in range(1, remaining_space):
resolved_unit = resolve_fraction_unit(
[styles, styles, styles],
Size(width, 24),
Size(width, 24),
Fraction(remaining_space),
"width",
)
assert resolved_unit <= remaining_space
def test_resolve_issue_2502():
"""Test https://github.com/Textualize/textual/issues/2502"""