mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
from time import perf_counter
|
|
|
|
from textual.app import App, ComposeResult
|
|
from textual.widgets import Static
|
|
|
|
|
|
class AnimApp(App):
|
|
CSS = """
|
|
#foo {
|
|
height: 1;
|
|
}
|
|
|
|
"""
|
|
|
|
def compose(self) -> ComposeResult:
|
|
yield Static("foo", id="foo")
|
|
|
|
|
|
async def test_animate_height() -> None:
|
|
"""Test animating styles.height works."""
|
|
|
|
# Styles.height is a scalar, which makes it more complicated to animate
|
|
|
|
app = AnimApp()
|
|
|
|
async with app.run_test() as pilot:
|
|
static = app.query_one(Static)
|
|
assert static.size.height == 1
|
|
static.styles.animate("height", 100, duration=0.5, easing="linear")
|
|
start = perf_counter()
|
|
|
|
# Wait for half the animation
|
|
await pilot.pause(0.25)
|
|
# Check we reached the half way point
|
|
assert abs(static.styles.height.value - 50) < 5
|
|
elapsed = perf_counter() - start
|
|
# Check at least that much time has elapsed
|
|
assert 0.5 > elapsed > 0.25
|
|
# Wait for the animation to finished
|
|
await pilot.wait_for_animation()
|
|
elapsed = perf_counter() - start
|
|
# Check that the full time has elapsed
|
|
assert elapsed > 0.5
|
|
# Check the height reached the maximum
|
|
assert static.styles.height.value == 100
|