test_component_state.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. """Ensure that Components returned by ComponentState.create have independent State classes."""
  2. import reflex as rx
  3. from reflex.components.base.bare import Bare
  4. def test_component_state():
  5. """Create two components with independent state classes."""
  6. class CS(rx.ComponentState):
  7. count: int = 0
  8. def increment(self):
  9. self.count += 1
  10. @classmethod
  11. def get_component(cls, *children, **props):
  12. return rx.el.div(
  13. *children,
  14. **props,
  15. )
  16. cs1, cs2 = CS.create("a", id="a"), CS.create("b", id="b")
  17. assert isinstance(cs1, rx.Component)
  18. assert isinstance(cs2, rx.Component)
  19. assert cs1.State is not None
  20. assert cs2.State is not None
  21. assert cs1.State != cs2.State
  22. assert issubclass(cs1.State, CS)
  23. assert issubclass(cs1.State, rx.State)
  24. assert issubclass(cs2.State, CS)
  25. assert issubclass(cs2.State, rx.State)
  26. assert CS._per_component_state_instance_count == 2
  27. assert isinstance(cs1.State.increment, rx.event.EventHandler)
  28. assert cs1.State.increment != cs2.State.increment
  29. assert len(cs1.children) == 1
  30. assert cs1.children[0].render() == Bare.create("{`a`}").render()
  31. assert cs1.id == "a"
  32. assert len(cs2.children) == 1
  33. assert cs2.children[0].render() == Bare.create("{`b`}").render()
  34. assert cs2.id == "b"