test_lifecycle.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import asyncio
  2. from typing import List
  3. from nicegui import app, ui
  4. from nicegui.testing import Screen
  5. def test_adding_elements_during_onconnect_on_auto_index_page(screen: Screen):
  6. connections = []
  7. ui.label('Adding labels on_connect')
  8. app.on_connect(lambda _: connections.append(ui.label(f'new connection {len(connections)}')))
  9. screen.open('/')
  10. screen.should_contain('new connection 0')
  11. screen.open('/')
  12. screen.should_contain('new connection 0')
  13. screen.should_contain('new connection 1')
  14. screen.open('/')
  15. screen.should_contain('new connection 0')
  16. screen.should_contain('new connection 1')
  17. screen.should_contain('new connection 2')
  18. def test_async_connect_handler(screen: Screen):
  19. async def run_js():
  20. await asyncio.sleep(0.1)
  21. status.text = 'Connected'
  22. status = ui.label()
  23. app.on_connect(run_js)
  24. screen.open('/')
  25. screen.should_contain('Connected')
  26. def test_connect_disconnect_is_called_for_each_client(screen: Screen):
  27. events: List[str] = []
  28. @ui.page('/', reconnect_timeout=0)
  29. def page():
  30. ui.label(f'client id: {ui.context.client.id}')
  31. app.on_connect(lambda: events.append('connect'))
  32. app.on_disconnect(lambda: events.append('disconnect'))
  33. screen.open('/')
  34. screen.wait(0.5)
  35. screen.open('/')
  36. screen.wait(0.5)
  37. screen.open('/')
  38. screen.wait(0.5)
  39. assert events == ['connect', 'disconnect', 'connect', 'disconnect', 'connect']
  40. def test_startup_and_shutdown_handlers(screen: Screen):
  41. events: List[str] = []
  42. def startup():
  43. events.append('startup')
  44. async def startup_async():
  45. events.append('startup_async')
  46. def shutdown():
  47. events.append('shutdown')
  48. async def shutdown_async():
  49. events.append('shutdown_async')
  50. app.on_startup(startup)
  51. app.on_startup(startup_async)
  52. app.on_startup(startup_async())
  53. app.on_shutdown(shutdown)
  54. app.on_shutdown(shutdown_async)
  55. app.on_shutdown(shutdown_async())
  56. screen.open('/')
  57. screen.wait(0.5)
  58. assert events == ['startup', 'startup_async', 'startup_async']
  59. app.shutdown()
  60. screen.wait(0.5)
  61. assert events == ['startup', 'startup_async', 'startup_async', 'shutdown', 'shutdown_async', 'shutdown_async']