mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
After upgrading `pytest-asyncio` to the latest version, lots of tests started failing in CI only on Python 3.9: `RuntimeError: There is no current event loop in thread 'MainThread'` Apparently these tests may have only been passing previously due to issues in earlier versions of `pytest-asyncio`. Changing these tests to async seems to fix the failures on Python 3.9. Related issue: https://github.com/pytest-dev/pytest-asyncio/issues/1039
119 lines
3.3 KiB
Python
119 lines
3.3 KiB
Python
import pytest
|
|
|
|
from textual._arrange import TOP_Z, arrange
|
|
from textual.app import App
|
|
from textual.geometry import NULL_OFFSET, Region, Size, Spacing
|
|
from textual.layout import WidgetPlacement
|
|
from textual.widget import Widget
|
|
|
|
|
|
async def test_arrange_empty():
|
|
container = Widget(id="container")
|
|
|
|
result = arrange(container, [], Size(80, 24), Size(80, 24))
|
|
assert result.placements == []
|
|
assert result.widgets == set()
|
|
|
|
|
|
async def test_arrange_dock_top():
|
|
container = Widget(id="container")
|
|
container._parent = App()
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "top"
|
|
header.styles.height = "1"
|
|
|
|
result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
|
|
|
|
assert result.placements == [
|
|
WidgetPlacement(
|
|
Region(0, 0, 80, 1), NULL_OFFSET, Spacing(), header, order=TOP_Z, fixed=True
|
|
),
|
|
WidgetPlacement(
|
|
Region(0, 1, 80, 23), NULL_OFFSET, Spacing(), child, order=0, fixed=False
|
|
),
|
|
]
|
|
assert result.widgets == {child, header}
|
|
|
|
|
|
async def test_arrange_dock_left():
|
|
container = Widget(id="container")
|
|
container._parent = App()
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "left"
|
|
header.styles.width = "10"
|
|
|
|
result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
|
|
assert result.placements == [
|
|
WidgetPlacement(
|
|
Region(0, 0, 10, 24),
|
|
NULL_OFFSET,
|
|
Spacing(),
|
|
header,
|
|
order=TOP_Z,
|
|
fixed=True,
|
|
),
|
|
WidgetPlacement(
|
|
Region(10, 0, 70, 24), NULL_OFFSET, Spacing(), child, order=0, fixed=False
|
|
),
|
|
]
|
|
assert result.widgets == {child, header}
|
|
|
|
|
|
async def test_arrange_dock_right():
|
|
container = Widget(id="container")
|
|
container._parent = App()
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "right"
|
|
header.styles.width = "10"
|
|
|
|
result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
|
|
assert result.placements == [
|
|
WidgetPlacement(
|
|
Region(70, 0, 10, 24),
|
|
NULL_OFFSET,
|
|
Spacing(),
|
|
header,
|
|
order=TOP_Z,
|
|
fixed=True,
|
|
),
|
|
WidgetPlacement(
|
|
Region(0, 0, 70, 24), NULL_OFFSET, Spacing(), child, order=0, fixed=False
|
|
),
|
|
]
|
|
assert result.widgets == {child, header}
|
|
|
|
|
|
async def test_arrange_dock_bottom():
|
|
container = Widget(id="container")
|
|
container._parent = App()
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "bottom"
|
|
header.styles.height = "1"
|
|
|
|
result = arrange(container, [child, header], Size(80, 24), Size(80, 24))
|
|
assert result.placements == [
|
|
WidgetPlacement(
|
|
Region(0, 23, 80, 1),
|
|
NULL_OFFSET,
|
|
Spacing(),
|
|
header,
|
|
order=TOP_Z,
|
|
fixed=True,
|
|
),
|
|
WidgetPlacement(
|
|
Region(0, 0, 80, 23), NULL_OFFSET, Spacing(), child, order=0, fixed=False
|
|
),
|
|
]
|
|
assert result.widgets == {child, header}
|
|
|
|
|
|
async def test_arrange_dock_badly():
|
|
child = Widget(id="child")
|
|
child.styles.dock = "nowhere"
|
|
with pytest.raises(AssertionError):
|
|
_ = arrange(Widget(), [child], Size(80, 24), Size(80, 24))
|