1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
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
def test_arrange_empty():
container = Widget(id="container")
result = arrange(container, [], Size(80, 24), Size(80, 24))
assert result.placements == []
assert result.widgets == set()
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}
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}
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}
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}
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))
|