mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
While the code in _arrange.py does mark the unknown dock type branch as being for the benefit of type checkers only, and was marked as to be ignored for the purposes of coverage, it was still showing in a coverage test and it's not a terrible thing to ensure that a user, giving the wrong type of dock in their own code, will get the expected result.
102 lines
3.1 KiB
Python
102 lines
3.1 KiB
Python
import pytest
|
|
|
|
from textual._arrange import arrange, TOP_Z
|
|
from textual._layout import WidgetPlacement
|
|
from textual.geometry import Region, Size, Spacing
|
|
from textual.widget import Widget
|
|
|
|
|
|
def test_arrange_empty():
|
|
container = Widget(id="container")
|
|
|
|
placements, widgets, spacing = arrange(container, [], Size(80, 24), Size(80, 24))
|
|
assert placements == []
|
|
assert widgets == set()
|
|
assert spacing == Spacing(0, 0, 0, 0)
|
|
|
|
|
|
def test_arrange_dock_top():
|
|
container = Widget(id="container")
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "top"
|
|
header.styles.height = "1"
|
|
|
|
placements, widgets, spacing = arrange(
|
|
container, [child, header], Size(80, 24), Size(80, 24)
|
|
)
|
|
assert placements == [
|
|
WidgetPlacement(
|
|
Region(0, 0, 80, 1), Spacing(), header, order=TOP_Z, fixed=True
|
|
),
|
|
WidgetPlacement(Region(0, 1, 80, 23), Spacing(), child, order=0, fixed=False),
|
|
]
|
|
assert widgets == {child, header}
|
|
assert spacing == Spacing(1, 0, 0, 0)
|
|
|
|
|
|
def test_arrange_dock_left():
|
|
container = Widget(id="container")
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "left"
|
|
header.styles.width = "10"
|
|
|
|
placements, widgets, spacing = arrange(
|
|
container, [child, header], Size(80, 24), Size(80, 24)
|
|
)
|
|
assert placements == [
|
|
WidgetPlacement(
|
|
Region(0, 0, 10, 24), Spacing(), header, order=TOP_Z, fixed=True
|
|
),
|
|
WidgetPlacement(Region(10, 0, 70, 24), Spacing(), child, order=0, fixed=False),
|
|
]
|
|
assert widgets == {child, header}
|
|
assert spacing == Spacing(0, 0, 0, 10)
|
|
|
|
|
|
def test_arrange_dock_right():
|
|
container = Widget(id="container")
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "right"
|
|
header.styles.width = "10"
|
|
|
|
placements, widgets, spacing = arrange(
|
|
container, [child, header], Size(80, 24), Size(80, 24)
|
|
)
|
|
assert placements == [
|
|
WidgetPlacement(
|
|
Region(70, 0, 10, 24), Spacing(), header, order=TOP_Z, fixed=True
|
|
),
|
|
WidgetPlacement(Region(0, 0, 70, 24), Spacing(), child, order=0, fixed=False),
|
|
]
|
|
assert widgets == {child, header}
|
|
assert spacing == Spacing(0, 10, 0, 0)
|
|
|
|
|
|
def test_arrange_dock_bottom():
|
|
container = Widget(id="container")
|
|
child = Widget(id="child")
|
|
header = Widget(id="header")
|
|
header.styles.dock = "bottom"
|
|
header.styles.height = "1"
|
|
|
|
placements, widgets, spacing = arrange(
|
|
container, [child, header], Size(80, 24), Size(80, 24)
|
|
)
|
|
assert placements == [
|
|
WidgetPlacement(
|
|
Region(0, 23, 80, 1), Spacing(), header, order=TOP_Z, fixed=True
|
|
),
|
|
WidgetPlacement(Region(0, 0, 80, 23), Spacing(), child, order=0, fixed=False),
|
|
]
|
|
assert widgets == {child, header}
|
|
assert spacing == Spacing(0, 0, 1, 0)
|
|
|
|
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))
|