import html
import re
from .support import PyScriptTest
class TestOutput(PyScriptTest):
def test_simple_display(self):
self.pyscript_run(
"""
display('hello world')
"""
)
inner_html = self.page.content()
pattern = r'
hello world
'
assert re.search(pattern, inner_html)
def test_consecutive_display(self):
self.pyscript_run(
"""
display('hello 1')
hello 2
display('hello 3')
"""
)
inner_text = self.page.inner_text("body")
lines = inner_text.splitlines()
lines = [line for line in lines if line != ""] # remove empty lines
assert lines == ["hello 1", "hello 2", "hello 3"]
def test_output_attribute_shows_deprecated_warning(self):
self.pyscript_run(
"""
display('hello world')
"""
)
warning_banner = self.page.locator(".alert-banner")
assert "The 'output' attribute is deprecated" in warning_banner.inner_text()
def test_target_attribute(self):
self.pyscript_run(
"""
display('hello world', target="mydiv")
"""
)
mydiv = self.page.locator("#mydiv")
assert mydiv.inner_text() == "hello world"
def test_consecutive_display_target(self):
self.pyscript_run(
"""
display('hello 1')
hello in between 1 and 2
display('hello 2', target="second")
display('hello 3')
"""
)
inner_text = self.page.inner_text("body")
lines = inner_text.splitlines()
lines = [line for line in lines if line != ""] # remove empty lines
assert lines == ["hello 1", "hello in between 1 and 2", "hello 2", "hello 3"]
def test_multiple_display_calls_same_tag(self):
self.pyscript_run(
"""
display('hello')
display('world')
"""
)
tag = self.page.locator("py-script")
lines = tag.inner_text().splitlines()
assert lines == ["hello", "world"]
def test_implicit_target_from_a_different_tag(self):
self.pyscript_run(
"""
def say_hello():
display('hello')
say_hello()
"""
)
py1 = self.page.locator("#py1")
py2 = self.page.locator("#py2")
assert py1.inner_text() == ""
assert py2.inner_text() == "hello"
def test_no_implicit_target(self):
self.pyscript_run(
"""
def display_hello():
# this fails because we don't have any implicit target
# from event handlers
display('hello')
"""
)
self.page.locator("text=Click me").click()
text = self.page.text_content("body")
assert "hello" not in text
self.check_js_errors(
"Implicit target not allowed here. Please use display(..., target=...)"
)
def test_explicit_target_pyscript_tag(self):
self.pyscript_run(
"""
def display_hello():
display('hello', target='second-pyscript-tag')
display_hello()
"""
)
text = self.page.locator("id=second-pyscript-tag").inner_text()
assert text == "hello"
def test_explicit_target_on_button_tag(self):
self.pyscript_run(
"""
def display_hello():
display('hello', target='my-button')
"""
)
self.page.locator("text=Click me").click()
text = self.page.locator("id=my-button").inner_text()
assert "hello" in text
def test_explicit_different_target_from_call(self):
self.pyscript_run(
"""
def display_hello():
display('hello', target='second-pyscript-tag')
print('nothing to see here')
display_hello()
"""
)
text = self.page.locator("id=second-pyscript-tag").all_inner_texts()
assert "hello" in text
def test_append_true(self):
self.pyscript_run(
"""
display('hello world', append=True)
"""
)
inner_html = self.page.content()
pattern = r'hello world
'
assert re.search(pattern, inner_html)
def test_append_false(self):
self.pyscript_run(
"""
display('hello world', append=False)
"""
)
inner_html = self.page.content()
pattern = r'hello world'
assert re.search(pattern, inner_html)
def test_display_multiple_values(self):
self.pyscript_run(
"""
hello = 'hello'
world = 'world'
display(hello, world)
"""
)
inner_text = self.page.inner_text("html")
assert inner_text == "hello\nworld"
def test_display_list_dict_tuple(self):
self.pyscript_run(
"""
l = ['A', 1, '!']
d = {'B': 2, 'List': l}
t = ('C', 3, '!')
display(l, d, t)
"""
)
inner_text = self.page.inner_text("html")
print(inner_text)
assert (
inner_text
== "['A', 1, '!']\n{'B': 2, 'List': ['A', 1, '!']}\n('C', 3, '!')"
)
def test_display_should_escape(self):
self.pyscript_run(
"""
display("hello world
")
"""
)
out = self.page.locator("py-script > div")
assert out.inner_html() == html.escape("hello world
")
assert out.inner_text() == "hello world
"
def test_display_HTML(self):
self.pyscript_run(
"""
display(HTML("hello world
"))
"""
)
out = self.page.locator("py-script > div")
assert out.inner_html() == "hello world
"
assert out.inner_text() == "hello world"
def test_image_display(self):
self.pyscript_run(
"""
packages = [ "matplotlib"]
import matplotlib.pyplot as plt
xpoints = [3, 6, 9]
ypoints = [1, 2, 3]
plt.plot(xpoints, ypoints)
plt.show()
"""
)
inner_html = self.page.content()
pattern = r'