import html import re import pytest 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) @pytest.mark.xfail(reason="issue #878") 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"] @pytest.mark.xfail(reason="fix me") def test_output_attribute(self): self.pyscript_run( """ display('hello world')
""" ) mydiv = self.page.locator("#mydiv") assert mydiv.inner_text() == "hello world" 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'