浏览代码

re-organize tests

Falko Schindler 2 年之前
父节点
当前提交
79a5a91b8d
共有 11 个文件被更改,包括 164 次插入112 次删除
  1. 14 0
      tests/input.py
  2. 0 0
      tests/test_binding.py
  3. 26 71
      tests/test_element.py
  4. 0 34
      tests/test_groups.py
  5. 34 0
      tests/test_image.py
  6. 4 4
      tests/test_javascript.py
  7. 41 0
      tests/test_joystick.py
  8. 18 0
      tests/test_keyboard.py
  9. 3 3
      tests/test_page.py
  10. 0 0
      tests/test_scene.py
  11. 24 0
      tests/test_toggle.py

+ 14 - 0
tests/input.py

@@ -0,0 +1,14 @@
+from nicegui import ui
+
+from .screen import Screen
+
+
+def test_input_with_multi_word_error_message(screen: Screen):
+    input = ui.input(label='some input')
+    ui.button('set error', on_click=lambda: input.props('error error-message="Some multi word error message"'))
+
+    screen.open('/')
+    screen.should_not_contain('Some multi word error message')
+
+    screen.click('set error')
+    screen.should_contain('Some multi word error message')

+ 0 - 0
tests/test_bindings.py → tests/test_binding.py


+ 26 - 71
tests/test_element.py

@@ -1,4 +1,3 @@
-from selenium.webdriver.common.action_chains import ActionChains
 from selenium.webdriver.common.by import By
 
 from nicegui import ui
@@ -7,51 +6,6 @@ from nicegui.element import Element
 from .screen import Screen
 
 
-def test_keyboard(screen: Screen):
-    result = ui.label()
-    keyboard = ui.keyboard(on_key=lambda e: result.set_text(f'{e.key, e.action}'))
-
-    screen.open('/')
-    assert screen.selenium.find_element(By.ID, keyboard.id)
-    ActionChains(screen.selenium).send_keys('t').perform()
-    screen.should_contain('t, KeyboardAction(keydown=False, keyup=True, repeat=False)')
-
-
-def test_joystick(screen: Screen):
-    j = ui.joystick(on_move=lambda e: coordinates.set_text(f'move {e.x:.3f}, {e.y:.3f}'),
-                    on_end=lambda _: coordinates.set_text('end 0, 0'))
-    coordinates = ui.label('start 0, 0')
-
-    screen.open('/')
-    joystick = screen.selenium.find_element(By.ID, j.id)
-    assert joystick
-    screen.should_contain('start 0, 0')
-    ActionChains(screen.selenium).move_to_element_with_offset(joystick, 25, 25)\
-        .click_and_hold().pause(1).move_by_offset(20, 20).pause(1).perform()
-    screen.should_contain('move 0.400, -0.400')
-    ActionChains(screen.selenium).move_to_element_with_offset(joystick, 25, 25).click().perform()
-    screen.should_contain('end 0, 0')
-
-
-def test_styling_joystick(screen: Screen):
-    j = ui.joystick().style('background-color: gray;').classes('shadow-lg')
-
-    screen.open('/')
-    joystick = screen.selenium.find_element(By.ID, j.id)
-    assert 'background-color: gray;' in joystick.get_attribute('style')
-    assert 'shadow-lg' in joystick.get_attribute('class')
-
-
-def test_input_with_multi_word_error_message(screen: Screen):
-    input = ui.input(label='some input')
-    ui.button('set error', on_click=lambda: input.props('error error-message="Some multi word error message"'))
-
-    screen.open('/')
-    screen.should_not_contain('Some multi word error message')
-    screen.click('set error')
-    screen.should_contain('Some multi word error message')
-
-
 def test_classes(screen: Screen):
     label = ui.label('Some label')
 
@@ -142,31 +96,32 @@ def test_props(screen: Screen):
     assert_props('standard', 'labeled')
 
 
-def test_adding_toggle_options(screen: Screen):
-    label = ui.label()
-    toggle = ui.toggle(['A', 'B', 'C'], on_change=lambda e: label.set_text(f'Choice: {e.value}'))
-
-    def add_option():
-        toggle.options.append('D')
-        toggle.update()
-
-    ui.button('Add option', on_click=add_option)
-
-    screen.open('/')
-    screen.click('A')
-    screen.should_contain('Choice: A')
-
-    screen.should_not_contain('D')
-    screen.click('Add option')
-    screen.should_contain('D')
-    screen.click('D')
-    screen.should_contain('Choice: D')
-
+def test_remove_and_clear(screen: Screen):
+    with ui.row() as row:
+        ui.label('Label A')
+        b = ui.label('Label B')
+        ui.label('Label C')
 
-def test_base64_image(screen: Screen):
-    ui.image('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAEHElEQVRoge2ZXUxbZRjHf6enH3QtBQ7paIFlMO2AMXTGqZE40bCpiRdzF06Nsu3O6G68MH5MnYkk3vhx4cWCJppFlvgZ74wXbsZdLCYaQMeWUWM30EJZgVM+WtpS2uNFoQzTU3pKu2O0v8v38//Pe57ned8cKFOmTBk9EVR7vrxsRlJ6gR7AfdMUrWcC6EcWTnK4fSnbAKPqVEl5C3ipRMLypR54GUkBeCXbAEOOyUdKoahAjqp15DKg12eTDZdaRy4DN43p+1s55HTwVF0Vk/taNM3V3UCDxUStSWQ4HKPDXsFwOK5pvm4GTILADquZbslGPKUAsNdRwXg8wQ6rOe911NPo2UvKplXmYOcWM957Par9wrnL6xv2786qVbcT8EUTSOdH+Co4T//kLE0XfgfgwcFRpPMjea+jm4GkohBaTuKxmhlaiNFoMZFS4Jf5KKHlZN7rqBeyEvPF7kYO11UBsKdyLUuGH2jjNV+Qt0en8lpHtxN41RfkyUt+APYPjfJNcJ7v5TB7f77KJxOhvNfRzcDVaPpqM51Ick6O4DQbuTC7yMBClMml5bzX0bUOdNgtXAzHAGi3WRiOaKsBoGMa1cy/LY0Wi7IBvfl/GhCAJ+qq+HbPdgL7Whi8+5YN59zjsOLr9ODr9PB6s7OQbbOiuRI7jAa+7tjGAcmeaQtukLdNgsBHbfWZW2atSdS6rSqaDAjAp7saOSDZSSoKpwOznJmcw7uYO3+/uL2W2+wVm9GpiiYD3ZKNg85KAI57A3w4vnHJv9Vq5o1mJ9FUCqMgYBLUS08haIqBY+4aAK5E4lyJxDnV4ub0rgaOuasRswgTgL7WeqwGA73XpjIPl2Ki6QQ6q6wAbDUb+fHO5kwZP+qu5qDTwaGLf64bf8RdTbdkYzgc492xGU40FS94V9F0Ai5L2q9kEunzyxz3BhhYiALwmLOSh24IbKfZyHseFykFnh0JkFBKczPRZMBqSA//eCLE894Ap/wyDw+NsZhMAWTiA+B9Tx21JpG+cZmf5haLKHk9mgysCp1bTmXaZhJJvIvpq3HTSpq83V7BM65qAHrc1chdrchdrdjE9HbPNUjIXa2bV49GA6tC22yWTJsoCLhXPq3ZRHKlbW1OpWigxihSYxQzMWMxCNQYi1MLNAXxZ9fnuKOygkckO0+7qjgrR3hhWy0uc3qZ72bCAPwWjmd9mPvv28kW0UDfuMyJP4JFkK/RwAd/zfD4Vgd3OaycaW9c1/dDKMLn1+eAtQf7P1kN41gqe38haPqE4imF7sFR3hmbZiyWIKEo+KJL9F6b4tFfx1jeINMMLcQYWIjijyU2JfpG/tMvsokSSSkAYVytJ5eB/hIoKQxBUdWiHsSycHLlz0gP6T8lepD+xTQjvKnT/mXKlCmzAX8Dl7JCqRHaepQAAAAASUVORK5CYII=').style('width: 50px;')
+    ui.button('Remove B', on_click=lambda: row.remove(b))
+    ui.button('Remove 0', on_click=lambda: row.remove(0))
+    ui.button('Clear', on_click=lambda: row.clear())
 
     screen.open('/')
-    screen.wait(0.2)
-    image = screen.selenium.find_element(By.CLASS_NAME, 'q-img__image')
-    assert 'data:image/png;base64,iVB' in image.get_attribute('src')
+    screen.should_contain('Label A')
+    screen.should_contain('Label B')
+    screen.should_contain('Label C')
+
+    screen.click('Remove B')
+    screen.should_contain('Label A')
+    screen.should_not_contain('Label B')
+    screen.should_contain('Label C')
+
+    screen.click('Remove 0')
+    screen.should_not_contain('Label A')
+    screen.should_not_contain('Label B')
+    screen.should_contain('Label C')
+
+    screen.click('Clear')
+    screen.should_not_contain('Label A')
+    screen.should_not_contain('Label B')
+    screen.should_not_contain('Label C')

+ 0 - 34
tests/test_groups.py

@@ -1,34 +0,0 @@
-from nicegui import ui
-
-from .screen import Screen
-
-
-def test_remove_and_clear(screen: Screen):
-    with ui.row() as row:
-        ui.label('Label A')
-        b = ui.label('Label B')
-        ui.label('Label C')
-
-    ui.button('Remove B', on_click=lambda: row.remove(b))
-    ui.button('Remove 0', on_click=lambda: row.remove(0))
-    ui.button('Clear', on_click=lambda: row.clear())
-
-    screen.open('/')
-    screen.should_contain('Label A')
-    screen.should_contain('Label B')
-    screen.should_contain('Label C')
-
-    screen.click('Remove B')
-    screen.should_contain('Label A')
-    screen.should_not_contain('Label B')
-    screen.should_contain('Label C')
-
-    screen.click('Remove 0')
-    screen.should_not_contain('Label A')
-    screen.should_not_contain('Label B')
-    screen.should_contain('Label C')
-
-    screen.click('Clear')
-    screen.should_not_contain('Label A')
-    screen.should_not_contain('Label B')
-    screen.should_not_contain('Label C')

+ 34 - 0
tests/test_image.py

@@ -0,0 +1,34 @@
+from selenium.webdriver.common.by import By
+
+from nicegui import ui
+
+from .screen import Screen
+
+
+def test_base64_image(screen: Screen):
+    data = ('data:image/png;base64,'
+            'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABmJLR0QA/wD/AP+gvaeTAAAEHElEQVRo'
+            'ge2ZXUxbZRjHf6enH3QtBQ7paIFlMO2AMXTGqZE40bCpiRdzF06Nsu3O6G68MH5MnYkk3vhx4cWCJppF'
+            'lvgZ74wXbsZdLCYaQMeWUWM30EJZgVM+WtpS2uNFoQzTU3pKu2O0v8v38//Pe57ned8cKFOmTBk9EVR7'
+            'vrxsRlJ6gR7AfdMUrWcC6EcWTnK4fSnbAKPqVEl5C3ipRMLypR54GUkBeCXbAEOOyUdKoahAjqp15DKg'
+            '12eTDZdaRy4DN43p+1s55HTwVF0Vk/taNM3V3UCDxUStSWQ4HKPDXsFwOK5pvm4GTILADquZbslGPKUA'
+            'sNdRwXg8wQ6rOe911NPo2UvKplXmYOcWM957Par9wrnL6xv2786qVbcT8EUTSOdH+Co4T//kLE0Xfgfg'
+            'wcFRpPMjea+jm4GkohBaTuKxmhlaiNFoMZFS4Jf5KKHlZN7rqBeyEvPF7kYO11UBsKdyLUuGH2jjNV+Q'
+            't0en8lpHtxN41RfkyUt+APYPjfJNcJ7v5TB7f77KJxOhvNfRzcDVaPpqM51Ick6O4DQbuTC7yMBClMml'
+            '5bzX0bUOdNgtXAzHAGi3WRiOaKsBoGMa1cy/LY0Wi7IBvfl/GhCAJ+qq+HbPdgL7Whi8+5YN59zjsOLr'
+            '9ODr9PB6s7OQbbOiuRI7jAa+7tjGAcmeaQtukLdNgsBHbfWZW2atSdS6rSqaDAjAp7saOSDZSSoKpwOz'
+            'nJmcw7uYO3+/uL2W2+wVm9GpiiYD3ZKNg85KAI57A3w4vnHJv9Vq5o1mJ9FUCqMgYBLUS08haIqBY+4a'
+            'AK5E4lyJxDnV4ub0rgaOuasRswgTgL7WeqwGA73XpjIPl2Ki6QQ6q6wAbDUb+fHO5kwZP+qu5qDTwaGL'
+            'f64bf8RdTbdkYzgc492xGU40FS94V9F0Ai5L2q9kEunzyxz3BhhYiALwmLOSh24IbKfZyHseFykFnh0J'
+            'kFBKczPRZMBqSA//eCLE894Ap/wyDw+NsZhMAWTiA+B9Tx21JpG+cZmf5haLKHk9mgysCp1bTmXaZhJJ'
+            'vIvpq3HTSpq83V7BM65qAHrc1chdrchdrdjE9HbPNUjIXa2bV49GA6tC22yWTJsoCLhXPq3ZRHKlbW1O'
+            'pWigxihSYxQzMWMxCNQYi1MLNAXxZ9fnuKOygkckO0+7qjgrR3hhWy0uc3qZ72bCAPwWjmd9mPvv28kW'
+            '0UDfuMyJP4JFkK/RwAd/zfD4Vgd3OaycaW9c1/dDKMLn1+eAtQf7P1kN41gqe38haPqE4imF7sFR3hmb'
+            'ZiyWIKEo+KJL9F6b4tFfx1jeINMMLcQYWIjijyU2JfpG/tMvsokSSSkAYVytJ5eB/hIoKQxBUdWiHsSy'
+            'cHLlz0gP6T8lepD+xTQjvKnT/mXKlCmzAX8Dl7JCqRHaepQAAAAASUVORK5CYII=')
+    ui.image(data).style('width: 50px;')
+
+    screen.open('/')
+    screen.wait(0.2)
+    image = screen.selenium.find_element(By.CLASS_NAME, 'q-img__image')
+    assert 'data:image/png;base64,iVB' in image.get_attribute('src')

+ 4 - 4
tests/test_javascript.py

@@ -6,7 +6,7 @@ from nicegui.events import ValueChangeEventArguments
 from .screen import Screen
 
 
-def test_executing_javascript_on_button_press(screen: Screen):
+def test_run_javascript_on_button_press(screen: Screen):
     async def set_title() -> None:
         await ui.run_javascript('document.title = "A New Title"')
     ui.button('change title', on_click=set_title)
@@ -18,7 +18,7 @@ def test_executing_javascript_on_button_press(screen: Screen):
     assert screen.selenium.title != 'NiceGUI'
 
 
-def test_executing_javascript_on_value_change(screen: Screen):
+def test_run_javascript_on_value_change(screen: Screen):
     @ui.page('/')
     async def main_page(client: Client):
         async def set_title(e: ValueChangeEventArguments) -> None:
@@ -38,7 +38,7 @@ def test_executing_javascript_on_value_change(screen: Screen):
     assert screen.selenium.title == 'Page Title A'
 
 
-def test_executing_javascript_on_async_page(screen: Screen):
+def test_run_javascript_on_async_page(screen: Screen):
     @ui.page('/')
     async def page():
         ui.label('before js')
@@ -52,7 +52,7 @@ def test_executing_javascript_on_async_page(screen: Screen):
     screen.should_contain('after js')
 
 
-def test_retrieving_content_from_javascript(screen: Screen):
+def test_response_from_javascript(screen: Screen):
     async def compute() -> None:
         response = await ui.run_javascript('1 + 41')
         for _, answer in response.items():

+ 41 - 0
tests/test_joystick.py

@@ -0,0 +1,41 @@
+from selenium.webdriver.common.action_chains import ActionChains
+from selenium.webdriver.common.by import By
+
+from nicegui import ui
+
+from .screen import Screen
+
+
+def test_joystick(screen: Screen):
+    j = ui.joystick(on_move=lambda e: coordinates.set_text(f'move {e.x:.3f}, {e.y:.3f}'),
+                    on_end=lambda _: coordinates.set_text('end 0, 0'))
+    coordinates = ui.label('start 0, 0')
+
+    screen.open('/')
+    joystick = screen.selenium.find_element(By.ID, j.id)
+    assert joystick
+    screen.should_contain('start 0, 0')
+
+    ActionChains(screen.selenium) \
+        .move_to_element_with_offset(joystick, 25, 25) \
+        .click_and_hold() \
+        .pause(1) \
+        .move_by_offset(20, 20) \
+        .pause(1) \
+        .perform()
+    screen.should_contain('move 0.400, -0.400')
+
+    ActionChains(screen.selenium) \
+        .move_to_element_with_offset(joystick, 25, 25) \
+        .click() \
+        .perform()
+    screen.should_contain('end 0, 0')
+
+
+def test_styling_joystick(screen: Screen):
+    j = ui.joystick().style('background-color: gray;').classes('shadow-lg')
+
+    screen.open('/')
+    joystick = screen.selenium.find_element(By.ID, j.id)
+    assert 'background-color: gray;' in joystick.get_attribute('style')
+    assert 'shadow-lg' in joystick.get_attribute('class')

+ 18 - 0
tests/test_keyboard.py

@@ -0,0 +1,18 @@
+from selenium.webdriver.common.action_chains import ActionChains
+from selenium.webdriver.common.by import By
+
+from nicegui import ui
+
+from .screen import Screen
+
+
+def test_keyboard(screen: Screen):
+    result = ui.label()
+    keyboard = ui.keyboard(on_key=lambda e: result.set_text(f'{e.key, e.action}'))
+
+    screen.open('/')
+    assert screen.selenium.find_element(By.ID, keyboard.id)
+    ActionChains(screen.selenium) \
+        .send_keys('t') \
+        .perform()
+    screen.should_contain('t, KeyboardAction(keydown=False, keyup=True, repeat=False)')

+ 3 - 3
tests/test_pages.py → tests/test_page.py

@@ -83,9 +83,9 @@ def test_creating_new_page_after_startup(screen: Screen):
     screen.should_contain('page created after startup')
 
 
-def test_shared_and_individual_pages(screen: Screen):
-    @ui.page('/individual_page')
-    def individual_page():
+def test_shared_and_private_pages(screen: Screen):
+    @ui.page('/private_page')
+    def private_page():
         ui.label(f'private page with uuid {uuid4()}')
 
     ui.label(f'shared page with uuid {uuid4()}')

+ 0 - 0
tests/test_3d_scene.py → tests/test_scene.py


+ 24 - 0
tests/test_toggle.py

@@ -0,0 +1,24 @@
+from nicegui import ui
+
+from .screen import Screen
+
+
+def test_adding_toggle_options(screen: Screen):
+    label = ui.label()
+    toggle = ui.toggle(['A', 'B', 'C'], on_change=lambda e: label.set_text(f'Choice: {e.value}'))
+
+    def add_option():
+        toggle.options.append('D')
+        toggle.update()
+
+    ui.button('Add option', on_click=add_option)
+
+    screen.open('/')
+    screen.click('A')
+    screen.should_contain('Choice: A')
+
+    screen.should_not_contain('D')
+    screen.click('Add option')
+    screen.should_contain('D')
+    screen.click('D')
+    screen.should_contain('Choice: D')