import pytest
import webview
from .util import run_test
@pytest.fixture
def window():
return webview.create_window(
'Evaluate JS test', html='
TEST
'
)
def test_mixed(window):
run_test(webview, window, mixed_test)
def test_array(window):
run_test(webview, window, array_test)
def test_object(window):
run_test(webview, window, object_test)
def test_string(window):
run_test(webview, window, string_test)
def test_int(window):
run_test(webview, window, int_test)
def test_float(window):
run_test(webview, window, float_test)
def test_undefined(window):
run_test(webview, window, undefined_test)
def test_null(window):
run_test(webview, window, null_test)
def test_nan(window):
run_test(webview, window, nan_test)
def test_body(window):
run_test(webview, window, body_test)
def test_document(window):
run_test(webview, window, document_test)
def test_node(window):
run_test(webview, window, node_test)
def test_exception(window):
run_test(webview, window, exception_test)
def mixed_test(window):
result = window.evaluate_js(
"""
document.body.style.backgroundColor = '#212121';
// comment
function test() {
return 2 + 2;
}
test();
"""
)
assert result == 4
def array_test(window):
result = window.evaluate_js(
"""
function getValue() {
return [undefined, 1, 'two', 3.00001, {four: true}]
}
getValue()
"""
)
assert result == [None, 1, 'two', 3.00001, {'four': True}]
def object_test(window):
result = window.evaluate_js(
"""
function getValue() {
return {1: 2, 'test': true, obj: {2: false, 3: 3.1}}
}
getValue()
"""
)
assert result == {'1': 2, 'test': True, 'obj': {'2': False, '3': 3.1}}
def string_test(window):
result = window.evaluate_js(
"""
function getValue() {
return "this is only a test"
}
getValue()
"""
)
assert result == 'this is only a test'
def int_test(window):
result = window.evaluate_js(
"""
function getValue() {
return 23
}
getValue()
"""
)
assert result == 23
def float_test(window):
result = window.evaluate_js(
"""
function getValue() {
return 23.23443
}
getValue()
"""
)
assert result == 23.23443
def undefined_test(window):
result = window.evaluate_js(
"""
function getValue() {
return undefined
}
getValue()
"""
)
assert result is None
def null_test(window):
result = window.evaluate_js(
"""
function getValue() {
return null
}
getValue()
"""
)
assert result is None
def nan_test(window):
result = window.evaluate_js(
"""
function getValue() {
return NaN
}
getValue()
"""
)
assert result is None
def body_test(window):
result = window.evaluate_js('document.body')
assert result['nodeName'] == 'BODY'
def document_test(window):
result = window.evaluate_js('document')
assert result['nodeName'] == '#document'
def node_test(window):
node = window.evaluate_js('document.querySelector("#node")')
assert node['id'] == 'node'
assert node['innerText'] == 'TEST'
def exception_test(window):
with pytest.raises(webview.errors.JavascriptException):
window.evaluate_js('eklmn')