test_refreshable.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import asyncio
  2. from nicegui import ui
  3. from .screen import Screen
  4. def test_refreshable(screen: Screen) -> None:
  5. numbers = []
  6. @ui.refreshable
  7. def number_ui() -> None:
  8. ui.label('[' + ', '.join(str(n) for n in sorted(numbers)) + ']')
  9. number_ui()
  10. ui.button('Refresh', on_click=number_ui.refresh)
  11. screen.open('/')
  12. screen.should_contain('[]')
  13. numbers.append(1)
  14. screen.click('Refresh')
  15. screen.should_contain('[1]')
  16. numbers.append(2)
  17. screen.click('Refresh')
  18. screen.should_contain('[1, 2]')
  19. numbers.clear()
  20. screen.click('Refresh')
  21. screen.should_contain('[]')
  22. async def test_async_refreshable(screen: Screen) -> None:
  23. numbers = []
  24. @ui.refreshable
  25. async def number_ui() -> None:
  26. await asyncio.sleep(0.1)
  27. ui.label('[' + ', '.join(str(n) for n in sorted(numbers)) + ']')
  28. @ui.page('/')
  29. async def index():
  30. with ui.column(): # this is necessary to reproduce bug #863
  31. await number_ui()
  32. ui.button('Refresh', on_click=number_ui.refresh)
  33. screen.open('/')
  34. screen.should_contain('[]')
  35. numbers.append(1)
  36. screen.click('Refresh')
  37. screen.should_not_contain('[]') # ensure bug #863 is fixed
  38. screen.should_contain('[1]')
  39. numbers.append(2)
  40. screen.click('Refresh')
  41. screen.should_not_contain('[]')
  42. screen.should_contain('[1, 2]')
  43. numbers.clear()
  44. screen.click('Refresh')
  45. screen.should_contain('[]')