forked from reactive-python/reactpy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_component.py
More file actions
75 lines (51 loc) · 1.97 KB
/
test_component.py
File metadata and controls
75 lines (51 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import reactpy
from reactpy.testing import DisplayFixture
from .. import pytestmark # noqa: F401
def test_component_repr():
@reactpy.component
def MyComponent(a, *b, **c):
pass
mc1 = MyComponent(1, 2, 3, x=4, y=5)
expected = f"MyComponent({id(mc1):02x}, a=1, b=(2, 3), c={{'x': 4, 'y': 5}})"
assert repr(mc1) == expected
# not enough args supplied to function
assert repr(MyComponent()) == "MyComponent(...)"
async def test_simple_component():
@reactpy.component
def SimpleDiv():
return reactpy.html.div()
assert SimpleDiv().render() == {"tagName": "div"}
async def test_simple_parameterized_component():
@reactpy.component
def SimpleParamComponent(tag):
return reactpy.Vdom(tag)()
assert SimpleParamComponent("div").render() == {"tagName": "div"}
async def test_component_with_var_args():
@reactpy.component
def ComponentWithVarArgsAndKwargs(*args, **kwargs):
return reactpy.html.div(kwargs, args)
assert ComponentWithVarArgsAndKwargs("hello", "world", my_attr=1).render() == {
"tagName": "div",
"attributes": {"my_attr": 1},
"children": ["hello", "world"],
}
async def test_display_simple_hello_world(display: DisplayFixture):
@reactpy.component
def Hello():
return reactpy.html.p({"id": "hello"}, ["Hello World"])
await display.show(Hello)
await display.page.wait_for_selector("#hello")
async def test_pre_tags_are_rendered_correctly(display: DisplayFixture):
@reactpy.component
def PreFormatted():
return reactpy.html.pre(
{"id": "pre-form-test"},
reactpy.html.span("this", reactpy.html.span("is"), "some"),
"pre-formatted",
" text",
)
await display.show(PreFormatted)
pre = await display.page.wait_for_selector("#pre-form-test")
assert (
await pre.evaluate("node => node.innerHTML")
) == "<span>this<span>is</span>some</span>pre-formatted text"