summaryrefslogtreecommitdiff
path: root/crocoite/test_browser.py
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2019-06-18 13:41:53 +0200
committerLars-Dominik Braun <lars@6xq.net>2019-06-18 13:41:53 +0200
commitb4669705fa8e581c17bbe0ca0c7cf4fadbd3deb8 (patch)
treeb64aa972023caed27ab5158e4e49aecb008a4bdf /crocoite/test_browser.py
parentc33431e6c5ccf5c0b274e2ed9c21ddf776759b67 (diff)
downloadcrocoite-b4669705fa8e581c17bbe0ca0c7cf4fadbd3deb8.tar.gz
crocoite-b4669705fa8e581c17bbe0ca0c7cf4fadbd3deb8.tar.bz2
crocoite-b4669705fa8e581c17bbe0ca0c7cf4fadbd3deb8.zip
Fix idle state tracking race condition
Closes #16. Expose SiteLoader’s page idle changes through events and move state tracking into controller event handler. Relies on tracking time instead of asyncio event, which is more reliable.
Diffstat (limited to 'crocoite/test_browser.py')
-rw-r--r--crocoite/test_browser.py38
1 files changed, 12 insertions, 26 deletions
diff --git a/crocoite/test_browser.py b/crocoite/test_browser.py
index 6341bd6..713c434 100644
--- a/crocoite/test_browser.py
+++ b/crocoite/test_browser.py
@@ -32,9 +32,9 @@ import hypothesis.strategies as st
from hypothesis.provisional import domains
import pytest
-from .browser import RequestResponsePair, SiteLoader, VarChangeEvent, Request, \
+from .browser import RequestResponsePair, SiteLoader, Request, \
UnicodeBody, ReferenceTimestamp, Base64Body, UnicodeBody, Request, \
- Response, NavigateError
+ Response, NavigateError, PageIdle
from .logger import Logger, Consumer
from .devtools import Crashed, Process
@@ -79,29 +79,6 @@ async def test_invalidurl (loader):
else:
pytest.skip (f'host {host} resolved to {resolved}')
-@pytest.mark.asyncio
-async def test_varchangeevent ():
- e = VarChangeEvent (True)
- assert e.get () == True
-
- # no change at all
- w = asyncio.ensure_future (e.wait ())
- finished, pending = await asyncio.wait ([w], timeout=0.1)
- assert not finished and pending
-
- # no change
- e.set (True)
- finished, pending = await asyncio.wait ([w], timeout=0.1)
- assert not finished and pending
-
- # changed
- e.set (False)
- await asyncio.sleep (0.1) # XXX: is there a yield() ?
- assert w.done ()
- ret = w.result ()
- assert ret == False
- assert e.get () == ret
-
timestamp = st.one_of (
st.integers(min_value=0, max_value=2**32-1),
st.floats (min_value=0, max_value=2**32-1),
@@ -365,7 +342,10 @@ async def test_integration_item (loader, golden):
await loader.navigate (golden.url)
it = loader.__aiter__ ()
- item = await it.__anext__ ()
+ while True:
+ item = await it.__anext__ ()
+ if isinstance (item, RequestResponsePair):
+ break
# we do not know this in advance
item.request.initiator = None
@@ -385,3 +365,9 @@ async def test_integration_item (loader, golden):
finally:
await runner.cleanup ()
+def test_page_idle ():
+ for v in (True, False):
+ idle = PageIdle (v)
+ assert bool (idle) == v
+
+