Files
textual/tests/option_list/test_option_list_disabled.py
Dave Pearson 0a9b9603a0 Extend OptionList testing (#2166)
* Add tests for errors when removing things that don't exist

* Add tests for errors when toggling enabled/disabled on invalid options
2023-03-30 11:20:17 +01:00

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)