test_lifecycle.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from typing import List
  2. from nicegui import app, ui
  3. from nicegui.testing 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. app.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():
  19. result.text = await ui.run_javascript('41 + 1')
  20. result = ui.label()
  21. app.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('/', reconnect_timeout=0)
  27. def page():
  28. ui.label(f'client id: {ui.context.client.id}')
  29. app.on_connect(lambda: events.append('connect'))
  30. app.on_disconnect(lambda: events.append('disconnect'))
  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 events == ['connect', 'disconnect', 'connect', 'disconnect', 'connect']
  38. def test_startup_and_shutdown_handlers(screen: Screen):
  39. events: List[str] = []
  40. def startup():
  41. events.append('startup')
  42. async def startup_async():
  43. events.append('startup_async')
  44. def shutdown():
  45. events.append('shutdown')
  46. async def shutdown_async():
  47. events.append('shutdown_async')
  48. app.on_startup(startup)
  49. app.on_startup(startup_async)
  50. app.on_startup(startup_async())
  51. app.on_shutdown(shutdown)
  52. app.on_shutdown(shutdown_async)
  53. app.on_shutdown(shutdown_async())
  54. screen.open('/')
  55. screen.wait(0.5)
  56. assert events == ['startup', 'startup_async', 'startup_async']
  57. app.shutdown()
  58. screen.wait(0.5)
  59. assert events == ['startup', 'startup_async', 'startup_async', 'shutdown', 'shutdown_async', 'shutdown_async']