test_select.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. from nicegui import ui
  2. from .screen import Screen
  3. def test_select(screen: Screen):
  4. ui.select(['A', 'B', 'C'], value='A')
  5. screen.open('/')
  6. screen.should_contain('A')
  7. screen.should_not_contain('B')
  8. screen.should_not_contain('C')
  9. screen.click('A') # open the dropdown
  10. screen.click('B') # close the dropdown
  11. screen.wait(0.5)
  12. screen.should_not_contain('A')
  13. screen.should_contain('B')
  14. screen.should_not_contain('C')
  15. def test_select_with_input(screen: Screen):
  16. ui.select(['A', 'AB', 'XYZ'], with_input=True)
  17. screen.open('/')
  18. screen.find_by_tag('input').click()
  19. screen.should_contain('XYZ')
  20. screen.find_by_tag('input').send_keys('A')
  21. screen.wait(0.5)
  22. screen.should_contain('A')
  23. screen.should_contain('AB')
  24. screen.should_not_contain('XYZ')
  25. def test_replace_select(screen: Screen):
  26. with ui.row() as container:
  27. ui.select(['A'], value='A')
  28. def replace():
  29. container.clear()
  30. with container:
  31. ui.select(['B'], value='B')
  32. ui.button('Replace', on_click=replace)
  33. screen.open('/')
  34. screen.should_contain('A')
  35. screen.click('Replace')
  36. screen.should_contain('B')
  37. screen.should_not_contain('A')
  38. def test_multi_select(screen: Screen):
  39. s = ui.select(['Alice', 'Bob', 'Carol'], value='Alice', multiple=True).props('use-chips')
  40. ui.label().bind_text_from(s, 'value', backward=str)
  41. screen.open('/')
  42. screen.should_contain("['Alice']")
  43. screen.click('Alice')
  44. screen.click('Bob')
  45. screen.should_contain("['Alice', 'Bob']")
  46. screen.click('cancel') # remove icon
  47. screen.should_contain("['Bob']")
  48. def test_changing_options(screen: Screen):
  49. s = ui.select([10, 20, 30], value=10)
  50. ui.label().bind_text_from(s, 'value', lambda v: f'value = {v}')
  51. ui.button('reverse', on_click=lambda: (s.options.reverse(), s.update()))
  52. ui.button('clear', on_click=lambda: (s.options.clear(), s.update()))
  53. screen.open('/')
  54. screen.click('reverse')
  55. screen.should_contain('value = 10')
  56. screen.click('clear')
  57. screen.should_contain('value = None')
  58. def test_set_options(screen: Screen):
  59. s = ui.select([1, 2, 3], value=1)
  60. ui.button('4, 5, 6', on_click=lambda: s.set_options([4, 5, 6], value=4))
  61. screen.open('/')
  62. screen.click('4, 5, 6')
  63. screen.wait(0.5)
  64. screen.find_by_class('q-select').click()
  65. items = [item.text for item in screen.find_all_by_class('q-item')]
  66. assert items == ['4', '5', '6']