test_radio_element.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from nicegui import events, ui
  2. from nicegui.testing import Screen
  3. def test_radio_click(screen: Screen):
  4. r = ui.radio(['A', 'B', 'C'])
  5. screen.open('/')
  6. screen.click('A')
  7. assert r.value == 'A'
  8. screen.click('B')
  9. assert r.value == 'B'
  10. def test_radio_click_already_selected(screen: Screen):
  11. r = ui.radio(['A', 'B', 'C'], value='B')
  12. screen.open('/')
  13. screen.click('B')
  14. assert r.value == 'B'
  15. def test_radio_set_value(screen: Screen):
  16. r = ui.radio(['A', 'B', 'C'])
  17. screen.open('/')
  18. r.set_value('B')
  19. assert r.value == 'B'
  20. def test_radio_set_options(screen: Screen):
  21. r = ui.radio(['A', 'B', 'C'])
  22. screen.open('/')
  23. r.set_options(['D', 'E', 'F'])
  24. assert r.options == ['D', 'E', 'F']
  25. def test_radio_set_options_value_still_valid(screen: Screen):
  26. r = ui.radio(['A', 'B', 'C'], value='C')
  27. screen.open('/')
  28. r.set_options(['C', 'D', 'E'])
  29. assert r.value == 'C'
  30. def test_radio_set_options_value_none(screen: Screen):
  31. r = ui.radio(['A', 'B', 'C'], value='C')
  32. screen.open('/')
  33. r.set_options(['D', 'E', 'F'])
  34. assert r.value is None
  35. def test_radio_set_options_value(screen: Screen):
  36. r = ui.radio(['A', 'B', 'C'])
  37. screen.open('/')
  38. r.set_options(['D', 'E', 'F'], value='E')
  39. assert r.value == 'E'
  40. def test_radio_set_options_value_callback(screen: Screen):
  41. """Fix for https://github.com/zauberzeug/nicegui/issues/3733.
  42. When using `set_options` with the value argument set and the `on_change` callback active on the element,
  43. `on_change` should never pass `None` through, even if the old value is not within the new list of element options.
  44. """
  45. def check_change_is_not_none(e: events.ValueChangeEventArguments):
  46. assert e.value is not None
  47. r = ui.radio(['A', 'B', 'C'], on_change=check_change_is_not_none)
  48. screen.open('/')
  49. r.set_options(['D', 'E', 'F'], value='F')