diff --git a/src/textual/_collections.py b/src/textual/_collections.py index 91def6bde..2b3f0ec16 100644 --- a/src/textual/_collections.py +++ b/src/textual/_collections.py @@ -1,7 +1,7 @@ """Provides collection-based utility code.""" from __future__ import annotations -from typing import Generic, TypeVar, Iterator, overload, Iterable +from typing import Generic, TypeVar, Iterator, overload, Iterable, Sequence T = TypeVar("T") @@ -15,7 +15,7 @@ class ImmutableSequence(Generic[T]): Args: wrap (Iterable[T]): The iterable value being wrapped. """ - self._wrap = tuple(wrap) + self._wrap = wrap if isinstance(wrap, Sequence) else tuple(wrap) @overload def __getitem__(self, index: int) -> T: diff --git a/tests/test_collections.py b/tests/test_collections.py index cd4d0f71e..de2cbf686 100644 --- a/tests/test_collections.py +++ b/tests/test_collections.py @@ -57,10 +57,11 @@ def test_get_item_from_immutable_sequence() -> None: assert wrap(range(10))[0] == 0 assert wrap(range(10))[-1] == 9 + def test_get_slice_from_immutable_sequence() -> None: """It should be possible to get a slice from an immutable sequence.""" - assert list(wrap(range(10))[0:2]) == [0,1] - assert list(wrap(range(10))[0:-1]) == [0,1,2,3,4,5,6,7,8] + assert list(wrap(iter(range(10)))[0:2]) == [0,1] + assert list(wrap(iter(range(10)))[0:-1]) == [0,1,2,3,4,5,6,7,8] def test_immutable_sequence_contains() -> None: