/
test_viewable.py
100 lines (70 loc) · 2.55 KB
/
test_viewable.py
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import param
import pytest
from panel import config
from panel.interact import interactive
from panel.pane import Markdown, Str, panel
from panel.param import ParamMethod
from panel.viewable import Viewable, Viewer
from .util import jb_available
all_viewables = [w for w in param.concrete_descendents(Viewable).values()
if not w.__name__.startswith('_') and
not issubclass(w, interactive)]
class ExampleViewer(Viewer):
value = param.String()
def __panel__(self):
return self.value
class ExampleViewerWithDeps(Viewer):
value = param.String()
@param.depends('value')
def __panel__(self):
return self.value
@jb_available
def test_viewable_ipywidget():
pane = Str('A')
with config.set(comms='ipywidgets'):
data, metadata = pane._repr_mimebundle_()
assert 'application/vnd.jupyter.widget-view+json' in data
@pytest.mark.parametrize('viewable', all_viewables)
def test_viewable_signature(viewable):
from inspect import Parameter, signature
parameters = signature(viewable).parameters
assert 'params' in parameters
try:
assert parameters['params'] == Parameter('params', Parameter.VAR_KEYWORD, annotation='Any')
except Exception:
assert parameters['params'] == Parameter('params', Parameter.VAR_KEYWORD)
def test_Viewer_not_initialized():
class Test(Viewer):
def __panel__(self):
return "# Test"
test = panel(Test)
assert test.object == "# Test"
# Confirm that initialized also work
test = panel(Test())
assert test.object == "# Test"
def test_viewer_wraps_panel():
tv = ExampleViewer(value="hello")
view = tv._create_view()
assert isinstance(view, Markdown)
assert view.object == "hello"
def test_viewer_wraps_panel_with_deps(document, comm):
tv = ExampleViewerWithDeps(value="hello")
view = tv._create_view()
view.get_root(document, comm)
assert isinstance(view, ParamMethod)
assert view._pane.object == "hello"
tv.value = "goodbye"
assert view._pane.object == "goodbye"
def test_viewer_with_deps_resolved_by_panel_func(document, comm):
tv = ExampleViewerWithDeps(value="hello")
view = panel(tv)
view.get_root(document, comm)
assert isinstance(view, ParamMethod)
assert view._pane.object == "hello"
def test_non_viewer_class():
# This test checks that a class with __panel__ (other than Viewer)
# does not raise a TypeError: issubclass() arg 1 must be a class
class Example:
def __panel__(self):
return 42
panel(Example())