blob: 17ba5d95ae8ba6c32177a7a3756dc8f32e217fc3 [file] [log] [blame]
import pytest
@pytest.mark.asyncio
@pytest.mark.parametrize("log_argument, expected_text", [
("'TEST'", "TEST"),
("'TWO', 'PARAMETERS'", "TWO PARAMETERS"),
("{}", "[object Object]"),
("['1', '2', '3']", "1,2,3"),
("null, undefined", "null undefined"),
], ids=[
'single string',
'two strings',
'empty object',
'array of strings',
'null and undefined',
])
async def test_console_log_argument_type(bidi_session,
current_session,
wait_for_event,
log_argument,
expected_text):
await bidi_session.session.subscribe(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
# TODO: To be replaced with the BiDi implementation of execute_script.
current_session.execute_script(f"console.log({log_argument})")
event_data = await on_entry_added
assert event_data['text'] == expected_text
@pytest.mark.asyncio
@pytest.mark.parametrize("log_method, expected_level", [
("assert", "error"),
("debug", "debug"),
("error", "error"),
("info", "info"),
("log", "info"),
("table", "info"),
("trace", "debug"),
("warn", "warning"),
])
async def test_console_log_level(bidi_session,
current_session,
wait_for_event,
log_method,
expected_level):
await bidi_session.session.subscribe(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
# TODO: To be replaced with the BiDi implementation of execute_script.
if log_method == 'assert':
# assert has to be called with a first falsy argument to trigger a log.
current_session.execute_script("console.assert(false, 'text')")
else:
current_session.execute_script(f"console.{log_method}('text')")
event_data = await on_entry_added
assert event_data['text'] == 'text'
assert event_data['level'] == expected_level
assert event_data['type'] == 'console'
assert event_data['method'] == log_method
assert isinstance(event_data['timestamp'], int)
@pytest.mark.asyncio
@pytest.mark.parametrize("new_context_method_name", ["refresh", "new_window"])
async def test_console_log_new_context(bidi_session,
current_session,
wait_for_event,
new_context_method_name):
await bidi_session.session.subscribe(events=["log.entryAdded"])
on_entry_added = wait_for_event("log.entryAdded")
current_session.execute_script(f"console.log('text')")
event_data = await on_entry_added
assert event_data['text'] == 'text'
new_context_method = getattr(current_session, new_context_method_name)
new_context_method()
on_entry_added = wait_for_event("log.entryAdded")
current_session.execute_script(f"console.log('text_after_refresh')")
event_data = await on_entry_added
assert event_data['text'] == 'text_after_refresh'
@pytest.mark.asyncio
async def test_console_log_subscribe_twice(bidi_session,
current_session,
wait_for_event):
# Subscribe to log.entryAdded twice and check that events are only received
# once.
await bidi_session.session.subscribe(events=["log.entryAdded"])
await bidi_session.session.subscribe(events=["log.entryAdded"])
# Track all received log.entryAdded events in the events array
events = []
async def on_event(method, data):
events.append(data)
remove_listener = bidi_session.add_event_listener("log.entryAdded", on_event)
on_entry_added = wait_for_event("log.entryAdded")
current_session.execute_script(f"console.log('text1')")
await on_entry_added
assert len(events) == 1;
assert events[0]['text'] == 'text1'
# Wait for another console log so that potential duplicates for the first
# log have time to be received.
on_entry_added = wait_for_event("log.entryAdded")
current_session.execute_script(f"console.log('text2')")
await on_entry_added
assert len(events) == 2;
assert events[1]['text'] == 'text2'
remove_listener()