blob: a86f2f495d1a74c5f0e1dfb8cbd912e2f3930ede [file] [log] [blame]
import pytest
from webdriver.bidi.modules.script import ContextTarget, SerializationOptions
@pytest.mark.asyncio
@pytest.mark.parametrize(
"expression, expected",
[
("undefined", {"type": "undefined"}),
("null", {"type": "null"}),
("'foobar'", {"type": "string", "value": "foobar"}),
("'2'", {"type": "string", "value": "2"}),
("Number.NaN", {"type": "number", "value": "NaN"}),
("-0", {"type": "number", "value": "-0"}),
("Infinity", {"type": "number", "value": "Infinity"}),
("-Infinity", {"type": "number", "value": "-Infinity"}),
("3", {"type": "number", "value": 3}),
("1.4", {"type": "number", "value": 1.4}),
("true", {"type": "boolean", "value": True}),
("false", {"type": "boolean", "value": False}),
("42n", {"type": "bigint", "value": "42"}),
],
)
async def test_primitive_values(bidi_session, top_context, expression, expected):
result = await bidi_session.script.evaluate(
expression=expression,
target=ContextTarget(top_context["context"]),
await_promise=True,
)
assert result == expected
@pytest.mark.asyncio
@pytest.mark.parametrize(
"expression, expected",
[
("(Symbol('foo'))", {"type": "symbol", },),
(
"[1, 'foo', true, new RegExp(/foo/g), [1]]",
{
"type": "array",
"value": [
{"type": "number", "value": 1},
{"type": "string", "value": "foo"},
{"type": "boolean", "value": True},
{
"type": "regexp",
"value": {
"pattern": "foo",
"flags": "g",
},
},
{"type": "array"},
],
},
),
(
"({'foo': {'bar': 'baz'}, 'qux': 'quux', 1: 'fred', '2': 'thud'})",
{
"type": "object",
"value": [
["1", {"type": "string", "value": "fred"}],
["2", {"type": "string", "value": "thud"}],
["foo", {"type": "object"}],
["qux", {"type": "string", "value": "quux"}],
],
},
),
("(()=>{})", {"type": "function", },),
("(function(){})", {"type": "function", },),
("(async ()=>{})", {"type": "function", },),
("(async function(){})", {"type": "function", },),
(
"new RegExp(/foo/g)",
{
"type": "regexp",
"value": {
"pattern": "foo",
"flags": "g",
},
},
),
(
"new Date(1654004849000)",
{
"type": "date",
"value": "2022-05-31T13:47:29.000Z",
},
),
(
"new Map([[1, 2], ['foo', 'bar'], [true, false], ['baz', [1]]])",
{
"type": "map",
"value": [
[
{"type": "number", "value": 1},
{"type": "number", "value": 2},
],
["foo", {"type": "string", "value": "bar"}],
[
{"type": "boolean", "value": True},
{"type": "boolean", "value": False},
],
["baz", {"type": "array"}],
],
},
),
(
"new Set([1, 'foo', true, [1], new Map([[1,2]])])",
{
"type": "set",
"value": [
{"type": "number", "value": 1},
{"type": "string", "value": "foo"},
{"type": "boolean", "value": True},
{"type": "array"},
{"type": "map"},
],
},
),
("new WeakMap()", {"type": "weakmap", },),
("new WeakSet()", {"type": "weakset", },),
("new Error('SOME_ERROR_TEXT')", {"type": "error"},),
("([1, 2][Symbol.iterator]())", {
"type": "iterator",
}),
("new Proxy({}, {})", {
"type": "proxy"
}),
# generator
("(function*() { yield 'a'; })", {
"type": "generator"
}),
("Promise.resolve()", {"type": "promise", },),
("new Int32Array()", {"type": "typedarray", },),
("new ArrayBuffer()", {"type": "arraybuffer", },),
("window", {"type": "window", },),
("new URL('https://example.com')", {"type": "object", },),
]
)
async def test_remote_values(bidi_session, top_context, expression, expected):
result = await bidi_session.script.evaluate(
expression=expression,
target=ContextTarget(top_context["context"]),
await_promise=False,
serialization_options=SerializationOptions(max_object_depth=1),
)
assert result == expected