test_lifecycle.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from typing import List
  2. from nicegui import Client, ui
  3. from .screen import Screen
  4. def test_adding_elements_during_onconnect_on_auto_index_page(screen: Screen):
  5. connections = []
  6. ui.label('Adding labels on_connect')
  7. ui.on_connect(lambda _: connections.append(ui.label(f'new connection {len(connections)}')))
  8. screen.open('/')
  9. screen.should_contain('new connection 0')
  10. screen.open('/')
  11. screen.should_contain('new connection 0')
  12. screen.should_contain('new connection 1')
  13. screen.open('/')
  14. screen.should_contain('new connection 0')
  15. screen.should_contain('new connection 1')
  16. screen.should_contain('new connection 2')
  17. def test_async_connect_handler(screen: Screen):
  18. async def run_js(client: Client):
  19. result.text = await ui.run_javascript('41 + 1')
  20. result = ui.label()
  21. ui.on_connect(run_js)
  22. screen.open('/')
  23. screen.should_contain('42')
  24. def test_connect_disconnect_is_called_for_each_client(screen: Screen):
  25. events: List[str] = []
  26. @ui.page('/')
  27. def page(client: Client):
  28. ui.label(f'client id: {client.id}')
  29. ui.on_connect(lambda c: events.append(f'connect {c.id}'))
  30. ui.on_disconnect(lambda c: events.append(f'disconnect {c.id}'))
  31. screen.open('/')
  32. screen.wait(0.5)
  33. screen.open('/')
  34. screen.wait(0.5)
  35. screen.open('/')
  36. screen.wait(0.5)
  37. assert len(events) == 5
  38. assert events[0].startswith('connect ')
  39. assert events[1].startswith('disconnect ')
  40. assert events[2].startswith('connect ')
  41. assert events[3].startswith('disconnect ')
  42. assert events[4].startswith('connect ')