浏览代码

adding more tests

Rodja Trappe 2 年之前
父节点
当前提交
d4db2d8068
共有 3 个文件被更改,包括 63 次插入26 次删除
  1. 4 2
      nicegui/page.py
  2. 59 0
      tests/test_auto_context.py
  3. 0 24
      tests/test_pages.py

+ 4 - 2
nicegui/page.py

@@ -104,11 +104,13 @@ class Page(jp.QuasarPage):
                     arg_count = len(inspect.signature(self.page_ready_handler).parameters)
                     is_coro = is_coroutine(self.page_ready_handler)
                     if arg_count == 1:
-                        await self.page_ready_handler(msg.websocket) if is_coro else self.page_ready_handler(msg.websocket)
+                        result = self.page_ready_handler(msg.websocket)
                     elif arg_count == 0:
-                        await self.page_ready_handler() if is_coro else self.page_ready_handler()
+                        result = self.page_ready_handler()
                     else:
                         raise ValueError(f'invalid number of arguments (0 or 1 allowed, got {arg_count})')
+                    if is_coro:
+                        await update_before_await(result, context)
             except:
                 globals.log.exception('Failed to execute page-ready')
         return False

+ 59 - 0
tests/test_auto_context.py

@@ -1,6 +1,8 @@
 import asyncio
+from typing import Generator
 
 from nicegui import ui
+from nicegui.events import PageEvent
 
 from .screen import Screen
 
@@ -51,3 +53,60 @@ def test_adding_elements_during_onconnect(screen: Screen):
 
     screen.open('/')
     screen.should_contain('Label 2')
+
+
+def test_autoupdate_on_async_page_after_yield(screen: Screen):
+    @ui.page('/')
+    async def page() -> Generator[None, PageEvent, None]:
+        ui.label('before page is ready')
+        yield
+        ui.label('page ready')
+        await asyncio.sleep(1)
+        ui.label('one')
+        await asyncio.sleep(1)
+        ui.label('two')
+        await asyncio.sleep(1)
+        ui.label('three')
+
+    screen.open('/')
+    screen.should_contain('before page is ready')
+    screen.should_contain('page ready')
+    screen.should_not_contain('one')
+    screen.wait_for('one')
+    screen.should_not_contain('two')
+    screen.wait_for('two')
+    screen.should_not_contain('three')
+    screen.wait_for('three')
+
+
+def test_autoupdate_on_async_page_ready_callback(screen: Screen):
+    async def ready():
+        ui.label('page ready')
+        await asyncio.sleep(1)
+        ui.label('after delay')
+
+    @ui.page('/', on_page_ready=ready)
+    def page() -> Generator[None, PageEvent, None]:
+        ui.label('before page is ready')
+
+    screen.open('/')
+    screen.should_contain('before page is ready')
+    screen.should_contain('page ready')
+    screen.should_not_contain('after delay')
+    screen.wait_for('after delay')
+
+
+def test_autoupdate_on_async_event_handler(screen: Screen):
+    async def open():
+        with ui.dialog() as dialog, ui.card():
+            l = ui.label('This should be visible')
+        dialog.open()
+        await asyncio.sleep(1)
+        l.text = "New text after 1 second"
+    ui.button('Dialog', on_click=open)
+
+    screen.open('/')
+    screen.click('Dialog')
+    screen.should_contain('This should be visible')
+    screen.should_not_contain('New text after 1 second')
+    screen.wait_for('New text after 1 second')

+ 0 - 24
tests/test_pages.py

@@ -268,27 +268,3 @@ def test_exception_in_on_page_ready_callback(screen: Screen):
     screen.open('/')
     screen.should_contain('this is shown')
     screen.assert_py_logger('ERROR', 'Failed to execute page-ready')
-
-
-def test_autoupdate_on_async_page_after_yield(screen: Screen):
-    @ui.page('/')
-    async def page() -> Generator[None, PageEvent, None]:
-        ui.label('before page is ready')
-        yield
-        ui.label('page ready')
-        await asyncio.sleep(1)
-        ui.label('one')
-        await asyncio.sleep(1)
-        ui.label('two')
-        await asyncio.sleep(1)
-        ui.label('three')
-
-    screen.open('/')
-    screen.should_contain('before page is ready')
-    screen.should_contain('page ready')
-    screen.should_not_contain('one')
-    screen.wait_for('one')
-    screen.should_not_contain('two')
-    screen.wait_for('two')
-    screen.should_not_contain('three')
-    screen.wait_for('three')