test_layout.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from __future__ import annotations
  2. import pytest
  3. from prompt_toolkit.layout import InvalidLayoutError, Layout
  4. from prompt_toolkit.layout.containers import HSplit, VSplit, Window
  5. from prompt_toolkit.layout.controls import BufferControl
  6. def test_layout_class():
  7. c1 = BufferControl()
  8. c2 = BufferControl()
  9. c3 = BufferControl()
  10. win1 = Window(content=c1)
  11. win2 = Window(content=c2)
  12. win3 = Window(content=c3)
  13. layout = Layout(container=VSplit([HSplit([win1, win2]), win3]))
  14. # Listing of windows/controls.
  15. assert list(layout.find_all_windows()) == [win1, win2, win3]
  16. assert list(layout.find_all_controls()) == [c1, c2, c3]
  17. # Focusing something.
  18. layout.focus(c1)
  19. assert layout.has_focus(c1)
  20. assert layout.has_focus(win1)
  21. assert layout.current_control == c1
  22. assert layout.previous_control == c1
  23. layout.focus(c2)
  24. assert layout.has_focus(c2)
  25. assert layout.has_focus(win2)
  26. assert layout.current_control == c2
  27. assert layout.previous_control == c1
  28. layout.focus(win3)
  29. assert layout.has_focus(c3)
  30. assert layout.has_focus(win3)
  31. assert layout.current_control == c3
  32. assert layout.previous_control == c2
  33. # Pop focus. This should focus the previous control again.
  34. layout.focus_last()
  35. assert layout.has_focus(c2)
  36. assert layout.has_focus(win2)
  37. assert layout.current_control == c2
  38. assert layout.previous_control == c1
  39. def test_create_invalid_layout():
  40. with pytest.raises(InvalidLayoutError):
  41. Layout(HSplit([]))