from playwright.sync_api import expect
from .support import PyScriptTest, skip_worker
class TestSplashscreen(PyScriptTest):
def test_autoshow_and_autoclose(self):
"""
By default, we show the splashscreen and we close it when the loading is
complete.
XXX: this test is a bit fragile: now it works reliably because the
startup is so slow that when we do expect(div).to_be_visible(), the
splashscreen is still there. But in theory, if the startup become very
fast, it could happen that by the time we arrive in python lang, it
has already been removed.
"""
self.pyscript_run(
"""
print('hello pyscript')
""",
wait_for_pyscript=False,
)
div = self.page.locator("py-splashscreen > div")
expect(div).to_be_visible()
expect(div).to_contain_text("Python startup...")
assert "Python startup..." in self.console.info.text
#
# now we wait for the startup to complete
self.wait_for_pyscript()
#
# and now the splashscreen should have been removed
expect(div).to_be_hidden()
assert self.page.locator("py-locator").count() == 0
assert "hello pyscript" in self.console.log.lines
def test_autoclose_false(self):
self.pyscript_run(
"""
[splashscreen]
autoclose = false
print('hello pyscript')
""",
)
div = self.page.locator("py-splashscreen > div")
expect(div).to_be_visible()
expect(div).to_contain_text("Python startup...")
expect(div).to_contain_text("Startup complete")
assert "hello pyscript" in self.console.log.lines
def test_autoclose_loader_deprecated(self):
self.pyscript_run(
"""
autoclose_loader = false
print('hello pyscript')
""",
)
warning = self.page.locator(".py-warning")
inner_text = warning.inner_html()
assert "The setting autoclose_loader is deprecated" in inner_text
div = self.page.locator("py-splashscreen > div")
expect(div).to_be_visible()
expect(div).to_contain_text("Python startup...")
expect(div).to_contain_text("Startup complete")
assert "hello pyscript" in self.console.log.lines
def test_splashscreen_disabled_option(self):
self.pyscript_run(
"""
[splashscreen]
enabled = false
def test():
print("Hello pyscript!")
test()
""",
)
assert self.page.locator("py-splashscreen").count() == 0
assert self.console.log.lines[-1] == "Hello pyscript!"
py_terminal = self.page.wait_for_selector("py-terminal")
assert py_terminal.inner_text() == "Hello pyscript!\n"
@skip_worker("FIXME: js.document")
def test_splashscreen_custom_message(self):
self.pyscript_run(
"""
[splashscreen]
autoclose = false
from js import document
splashscreen = document.querySelector("py-splashscreen")
splashscreen.log("Hello, world!")
""",
)
splashscreen = self.page.locator("py-splashscreen")
assert splashscreen.count() == 1
assert "Hello, world!" in splashscreen.inner_text()