import os import pathlib import time def test_init(selenium): assert 'Python initialization complete' in selenium.logs assert len(selenium.driver.window_handles) == 1 def test_webbrowser(selenium): selenium.run("import antigravity") time.sleep(2) assert len(selenium.driver.window_handles) == 2 def test_print(selenium): selenium.run("print('This should be logged')") assert 'This should be logged' in selenium.logs def test_import_js(selenium): result = selenium.run( "from js import window\nwindow.title = 'Foo'\nwindow.title") assert result == 'Foo' def test_py_proxy(selenium): selenium.run( "class Foo:\n" " bar = 42\n" " def get_value(self, value):\n" " return value * 64\n" "f = Foo()\n" ) assert selenium.run_js("return pyodide.pyimport('f').get_value(2)") == 128 assert selenium.run_js("return pyodide.pyimport('f').bar") == 42 assert selenium.run_js("return ('bar' in pyodide.pyimport('f'))") == True selenium.run_js("f = pyodide.pyimport('f'); f.baz = 32") assert selenium.run("f.baz") == 32 assert set(selenium.run_js( "return Object.getOwnPropertyNames(pyodide.pyimport('f'))")) == set( ['$$', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'bar', 'baz', 'get_value']) assert selenium.run("hasattr(f, 'baz')") == True selenium.run_js("delete pyodide.pyimport('f').baz") assert selenium.run("hasattr(f, 'baz')") == False def test_js_proxy(selenium): assert selenium.run( "from js import document\n" "el = document.createElement('div')\n" "document.body.appendChild(el)\n" "document.body.children.length\n" ) == 1 assert selenium.run( "document.body.children[0].tagName") == 'DIV' def test_open_url(selenium): assert selenium.run( "import pyodide\n" "pyodide.open_url('../test/data.txt').read()\n") == 'HELLO\n' def test_run_core_python_test(python_test, selenium): selenium.run( "import sys\n" "exitcode = -1\n" "def exit(n=0):\n" " global exitcode\n" " exitcode = n\n" " raise SystemExit()\n\n" "sys.exit = exit\n") selenium.run( "from test.libregrtest import main\n" "main(['{}'], verbose=True, verbose3=True)".format(python_test)) exitcode = selenium.run("exitcode") assert exitcode == 0 def pytest_generate_tests(metafunc): if 'python_test' in metafunc.fixturenames: test_modules = [] with open( str(pathlib.Path(__file__).parents[0] / "python_tests.txt")) as fp: for line in fp: line = line.strip() if line.startswith('#'): continue parts = line.split() if len(parts) == 1: test_modules.append(parts[0]) # XXX: The tests take too long to run, so we're just doing a # sanity check on the first 25 if 'TRAVIS' in os.environ and len(test_modules) > 25: break metafunc.parametrize("python_test", test_modules)