test_number.py 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import pytest
  2. from selenium.webdriver.common.by import By
  3. from nicegui import ui
  4. from .screen import Screen
  5. def test_apply_format_on_blur(screen: Screen):
  6. ui.number('Number', format='%.4f', value=3.14159)
  7. ui.button('Button')
  8. screen.open('/')
  9. screen.should_contain_input('3.1416')
  10. element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Number"]')
  11. element.send_keys('789')
  12. screen.click('Button')
  13. screen.should_contain_input('3.1417')
  14. def test_max_value(screen: Screen):
  15. ui.number('Number', min=0, max=10, value=5)
  16. ui.button('Button')
  17. screen.open('/')
  18. screen.should_contain_input('5')
  19. element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Number"]')
  20. element.send_keys('6')
  21. screen.click('Button')
  22. screen.should_contain_input('10')
  23. def test_clearable_number(screen: Screen):
  24. number = ui.number(value=42).props('clearable')
  25. ui.label().bind_text_from(number, 'value', lambda value: f'value: {value}')
  26. screen.open('/')
  27. screen.should_contain('value: 42')
  28. screen.click('cancel')
  29. screen.should_contain('value: None')
  30. screen.click('value: None') # loose focus
  31. screen.wait(0.5)
  32. screen.should_contain('value: None')
  33. def test_out_of_limits(screen: Screen):
  34. number = ui.number('Number', min=0, max=10, value=5)
  35. ui.label().bind_text_from(number, 'out_of_limits', lambda value: f'out_of_limits: {value}')
  36. screen.open('/')
  37. screen.should_contain('out_of_limits: False')
  38. number.value = 11
  39. screen.should_contain('out_of_limits: True')
  40. number.max = 15
  41. screen.should_contain('out_of_limits: False')
  42. @pytest.mark.parametrize('precision', [None, 1, -1])
  43. def test_rounding(precision: int, screen: Screen):
  44. number = ui.number('Number', value=12, precision=precision)
  45. ui.label().bind_text_from(number, 'value', lambda value: f'number=_{value}_')
  46. screen.open('/')
  47. screen.should_contain('number=_12_')
  48. element = screen.selenium.find_element(By.XPATH, '//*[@aria-label="Number"]')
  49. element.send_keys('.345')
  50. screen.click('number=') # blur the number input
  51. if precision is None:
  52. screen.should_contain('number=_12.345_')
  53. elif precision == 1:
  54. screen.should_contain('number=_12.3_')
  55. elif precision == -1:
  56. screen.should_contain('number=_10.0_')