mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
* Add tests for errors when removing things that don't exist * Add tests for errors when toggling enabled/disabled on invalid options
111 lines
4.4 KiB
Python
111 lines
4.4 KiB
Python
"""Unit tests for testing an option list's disabled facility."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from textual.app import App, ComposeResult
|
|
from textual.widgets import OptionList
|
|
from textual.widgets.option_list import Option, OptionDoesNotExist
|
|
|
|
|
|
class OptionListApp(App[None]):
|
|
"""Test option list application."""
|
|
|
|
def __init__(self, disabled: bool) -> None:
|
|
super().__init__()
|
|
self.initial_disabled = disabled
|
|
|
|
def compose(self) -> ComposeResult:
|
|
"""Compose the child widgets."""
|
|
yield OptionList(
|
|
*[
|
|
Option(str(n), id=str(n), disabled=self.initial_disabled)
|
|
for n in range(100)
|
|
]
|
|
)
|
|
|
|
|
|
async def test_default_enabled() -> None:
|
|
"""Options created enabled should remain enabled."""
|
|
async with OptionListApp(False).run_test() as pilot:
|
|
option_list = pilot.app.query_one(OptionList)
|
|
for option in range(option_list.option_count):
|
|
assert option_list.get_option_at_index(option).disabled is False
|
|
|
|
|
|
async def test_default_disabled() -> None:
|
|
"""Options created disabled should remain disabled."""
|
|
async with OptionListApp(True).run_test() as pilot:
|
|
option_list = pilot.app.query_one(OptionList)
|
|
for option in range(option_list.option_count):
|
|
assert option_list.get_option_at_index(option).disabled is True
|
|
|
|
|
|
async def test_enabled_to_disabled_via_index() -> None:
|
|
"""It should be possible to change enabled to disabled via index."""
|
|
async with OptionListApp(False).run_test() as pilot:
|
|
option_list = pilot.app.query_one(OptionList)
|
|
for n in range(option_list.option_count):
|
|
assert option_list.get_option_at_index(n).disabled is False
|
|
option_list.disable_option_at_index(n)
|
|
assert option_list.get_option_at_index(n).disabled is True
|
|
|
|
|
|
async def test_disabled_to_enabled_via_index() -> None:
|
|
"""It should be possible to change disabled to enabled via index."""
|
|
async with OptionListApp(True).run_test() as pilot:
|
|
option_list = pilot.app.query_one(OptionList)
|
|
for n in range(option_list.option_count):
|
|
assert option_list.get_option_at_index(n).disabled is True
|
|
option_list.enable_option_at_index(n)
|
|
assert option_list.get_option_at_index(n).disabled is False
|
|
|
|
|
|
async def test_enabled_to_disabled_via_id() -> None:
|
|
"""It should be possible to change enabled to disabled via id."""
|
|
async with OptionListApp(False).run_test() as pilot:
|
|
option_list = pilot.app.query_one(OptionList)
|
|
for n in range(option_list.option_count):
|
|
assert option_list.get_option(str(n)).disabled is False
|
|
option_list.disable_option(str(n))
|
|
assert option_list.get_option(str(n)).disabled is True
|
|
|
|
|
|
async def test_disabled_to_enabled_via_id() -> None:
|
|
"""It should be possible to change disabled to enabled via id."""
|
|
async with OptionListApp(True).run_test() as pilot:
|
|
option_list = pilot.app.query_one(OptionList)
|
|
for n in range(option_list.option_count):
|
|
assert option_list.get_option(str(n)).disabled is True
|
|
option_list.enable_option(str(n))
|
|
assert option_list.get_option(str(n)).disabled is False
|
|
|
|
|
|
async def test_disable_invalid_id() -> None:
|
|
"""Disabling an option via an ID that does not exist should throw an error."""
|
|
async with OptionListApp(True).run_test() as pilot:
|
|
with pytest.raises(OptionDoesNotExist):
|
|
pilot.app.query_one(OptionList).disable_option("does-not-exist")
|
|
|
|
|
|
async def test_disable_invalid_index() -> None:
|
|
"""Disabling an option via an index that does not exist should throw an error."""
|
|
async with OptionListApp(True).run_test() as pilot:
|
|
with pytest.raises(OptionDoesNotExist):
|
|
pilot.app.query_one(OptionList).disable_option_at_index(4242)
|
|
|
|
|
|
async def test_enable_invalid_id() -> None:
|
|
"""Disabling an option via an ID that does not exist should throw an error."""
|
|
async with OptionListApp(False).run_test() as pilot:
|
|
with pytest.raises(OptionDoesNotExist):
|
|
pilot.app.query_one(OptionList).enable_option("does-not-exist")
|
|
|
|
|
|
async def test_enable_invalid_index() -> None:
|
|
"""Disabling an option via an index that does not exist should throw an error."""
|
|
async with OptionListApp(False).run_test() as pilot:
|
|
with pytest.raises(OptionDoesNotExist):
|
|
pilot.app.query_one(OptionList).enable_option_at_index(4242)
|