1
0

test_image.py 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from pathlib import Path
  2. from nicegui import app, ui
  3. from nicegui.testing import Screen
  4. example_file = Path(__file__).parent / '../examples/slideshow/slides/slide1.jpg'
  5. example_data = ('data:image/png;base64,'
  6. 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAEHElEQVRo'
  7. 'ge2ZXUxbZRjHf6enH3QtBQ7paIFlMO2AMXTGqZE40bCpiRdzF06Nsu3O6G68MH5MnYkk3vhx4cWCJppF'
  8. 'lvgZ74wXbsZdLCYaQMeWUWM30EJZgVM+WtpS2uNFoQzTU3pKu2O0v8v38//Pe57ned8cKFOmTBk9EVR7'
  9. 'vrxsRlJ6gR7AfdMUrWcC6EcWTnK4fSnbAKPqVEl5C3ipRMLypR54GUkBeCXbAEOOyUdKoahAjqp15DKg'
  10. '12eTDZdaRy4DN43p+1s55HTwVF0Vk/taNM3V3UCDxUStSWQ4HKPDXsFwOK5pvm4GTILADquZbslGPKUA'
  11. 'sNdRwXg8wQ6rOe911NPo2UvKplXmYOcWM957Par9wrnL6xv2786qVbcT8EUTSOdH+Co4T//kLE0Xfgfg'
  12. 'wcFRpPMjea+jm4GkohBaTuKxmhlaiNFoMZFS4Jf5KKHlZN7rqBeyEvPF7kYO11UBsKdyLUuGH2jjNV+Q'
  13. 't0en8lpHtxN41RfkyUt+APYPjfJNcJ7v5TB7f77KJxOhvNfRzcDVaPpqM51Ick6O4DQbuTC7yMBClMml'
  14. '5bzX0bUOdNgtXAzHAGi3WRiOaKsBoGMa1cy/LY0Wi7IBvfl/GhCAJ+qq+HbPdgL7Whi8+5YN59zjsOLr'
  15. '9ODr9PB6s7OQbbOiuRI7jAa+7tjGAcmeaQtukLdNgsBHbfWZW2atSdS6rSqaDAjAp7saOSDZSSoKpwOz'
  16. 'nJmcw7uYO3+/uL2W2+wVm9GpiiYD3ZKNg85KAI57A3w4vnHJv9Vq5o1mJ9FUCqMgYBLUS08haIqBY+4a'
  17. 'AK5E4lyJxDnV4ub0rgaOuasRswgTgL7WeqwGA73XpjIPl2Ki6QQ6q6wAbDUb+fHO5kwZP+qu5qDTwaGL'
  18. 'f64bf8RdTbdkYzgc492xGU40FS94V9F0Ai5L2q9kEunzyxz3BhhYiALwmLOSh24IbKfZyHseFykFnh0J'
  19. 'kFBKczPRZMBqSA//eCLE894Ap/wyDw+NsZhMAWTiA+B9Tx21JpG+cZmf5haLKHk9mgysCp1bTmXaZhJJ'
  20. 'vIvpq3HTSpq83V7BM65qAHrc1chdrchdrdjE9HbPNUjIXa2bV49GA6tC22yWTJsoCLhXPq3ZRHKlbW1O'
  21. 'pWigxihSYxQzMWMxCNQYi1MLNAXxZ9fnuKOygkckO0+7qjgrR3hhWy0uc3qZ72bCAPwWjmd9mPvv28kW'
  22. '0UDfuMyJP4JFkK/RwAd/zfD4Vgd3OaycaW9c1/dDKMLn1+eAtQf7P1kN41gqe38haPqE4imF7sFR3hmb'
  23. 'ZiyWIKEo+KJL9F6b4tFfx1jeINMMLcQYWIjijyU2JfpG/tMvsokSSSkAYVytJ5eB/hIoKQxBUdWiHsSy'
  24. 'cHLlz0gP6T8lepD+xTQjvKnT/mXKlCmzAX8Dl7JCqRHaepQAAAAASUVORK5CYII=')
  25. def test_base64_image(screen: Screen):
  26. ui.image(example_data).style('width: 50px;')
  27. screen.open('/')
  28. screen.wait(0.2)
  29. image = screen.find_by_class('q-img__image')
  30. assert 'data:image/png;base64,iVB' in image.get_attribute('src')
  31. def test_setting_local_file(screen: Screen):
  32. ui.image(example_file)
  33. screen.open('/')
  34. image = screen.find_by_class('q-img__image')
  35. screen.should_load_image(image)
  36. def test_binding_local_file(screen: Screen):
  37. images = {'one': example_file}
  38. ui.image().bind_source_from(images, 'one')
  39. screen.open('/')
  40. image = screen.find_by_class('q-img__image')
  41. screen.should_load_image(image)
  42. def test_set_source_with_local_file(screen: Screen):
  43. ui.image().set_source(example_file)
  44. screen.open('/')
  45. image = screen.find_by_class('q-img__image')
  46. screen.should_load_image(image)
  47. def test_removal_of_generated_routes(screen: Screen):
  48. img = ui.image(example_file)
  49. ui.button('Slide 2', on_click=lambda: img.set_source(str(example_file).replace('slide1', 'slide2')))
  50. ui.button('Slide 3', on_click=lambda: img.set_source(str(example_file).replace('slide1', 'slide3')))
  51. screen.open('/')
  52. number_of_routes = len(app.routes)
  53. screen.click('Slide 2')
  54. screen.wait(0.5)
  55. assert len(app.routes) == number_of_routes
  56. screen.click('Slide 3')
  57. screen.wait(0.5)
  58. assert len(app.routes) == number_of_routes
  59. def test_force_reload(screen: Screen):
  60. img1 = ui.image(example_file)
  61. img2 = ui.image(example_data)
  62. ui.button('Reload 1', on_click=img1.force_reload)
  63. ui.button('Reload 2', on_click=img2.force_reload)
  64. screen.open('/')
  65. images = screen.find_all_by_class('q-img__image')
  66. screen.should_load_image(images[0])
  67. screen.should_load_image(images[1])
  68. screen.click('Reload 1')
  69. screen.wait(0.5)
  70. assert not screen.caplog.records
  71. screen.click('Reload 2')
  72. screen.wait(0.5)
  73. screen.assert_py_logger('WARNING', 'ui.image: force_reload() only works with network sources (not base64)')