123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- """Ensure that Components returned by ComponentState.create have independent State classes."""
- import pytest
- import reflex as rx
- from reflex.components.base.bare import Bare
- from reflex.utils.exceptions import ReflexRuntimeError
- def test_component_state():
- """Create two components with independent state classes."""
- class CS(rx.ComponentState):
- count: int = 0
- def increment(self):
- self.count += 1
- @classmethod
- def get_component(cls, *children, **props):
- return rx.el.div(
- *children,
- **props,
- )
- cs1, cs2 = CS.create("a", id="a"), CS.create("b", id="b")
- assert isinstance(cs1, rx.Component)
- assert isinstance(cs2, rx.Component)
- assert cs1.State is not None
- assert cs2.State is not None
- assert cs1.State != cs2.State
- assert issubclass(cs1.State, CS)
- assert issubclass(cs1.State, rx.State)
- assert issubclass(cs2.State, CS)
- assert issubclass(cs2.State, rx.State)
- assert CS._per_component_state_instance_count == 2
- assert isinstance(cs1.State.increment, rx.event.EventHandler)
- assert cs1.State.increment != cs2.State.increment
- assert len(cs1.children) == 1
- assert cs1.children[0].render() == Bare.create("a").render()
- assert cs1.id == "a"
- assert len(cs2.children) == 1
- assert cs2.children[0].render() == Bare.create("b").render()
- assert cs2.id == "b"
- def test_init_component_state() -> None:
- """Ensure that ComponentState subclasses cannot be instantiated directly."""
- class CS(rx.ComponentState):
- @classmethod
- def get_component(cls, *children, **props):
- return rx.el.div()
- with pytest.raises(ReflexRuntimeError):
- CS()
- class SubCS(CS):
- pass
- with pytest.raises(ReflexRuntimeError):
- SubCS()
|