Skip to content
This repository was archived by the owner on Jun 3, 2024. It is now read-only.

Commit 22a1975

Browse files
committed
port loading component tests to dash.testing - without fixing them
1 parent 386137e commit 22a1975

File tree

2 files changed

+209
-298
lines changed

2 files changed

+209
-298
lines changed
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
from multiprocessing import Lock
2+
3+
import dash
4+
from dash.dependencies import Input, Output
5+
import dash_core_components as dcc
6+
import dash_html_components as html
7+
8+
9+
def test_ldcp001_loading_component_initialization(dash_dcc):
10+
lock = Lock()
11+
12+
app = dash.Dash(__name__)
13+
14+
app.layout = html.Div([
15+
dcc.Loading([html.Div(id='div-1')], className='loading')
16+
], id='root')
17+
18+
@app.callback(Output('div-1', 'children'), [Input('root', 'n_clicks')])
19+
def updateDiv(children):
20+
with lock:
21+
return 'content'
22+
23+
with lock:
24+
dash_dcc.start_server(app)
25+
dash_dcc.find_element('.loading .dash-spinner')
26+
27+
dash_dcc.find_element('.loading #div-1')
28+
29+
assert not dash_dcc.get_logs()
30+
31+
32+
def test_ldcp002_loading_component_action(dash_dcc):
33+
lock = Lock()
34+
35+
app = dash.Dash(__name__)
36+
37+
app.layout = html.Div([
38+
dcc.Loading([html.Div(id='div-1')], className='loading')
39+
], id='root')
40+
41+
@app.callback(Output('div-1', 'children'), [Input('root', 'n_clicks')])
42+
def updateDiv(n_clicks):
43+
if n_clicks is not None:
44+
with lock:
45+
return
46+
47+
return 'content'
48+
49+
with lock:
50+
dash_dcc.start_server(app)
51+
dash_dcc.find_element('.loading #div-1')
52+
53+
dash_dcc.find_element('#root').click()
54+
55+
dash_dcc.find_element('.loading .dash-spinner')
56+
57+
dash_dcc.find_element('.loading #div-1')
58+
59+
assert not dash_dcc.get_logs()
60+
61+
62+
def test_ldcp003_multiple_loading_components(dash_dcc):
63+
lock = Lock()
64+
65+
app = dash.Dash(__name__)
66+
67+
app.layout = html.Div([
68+
dcc.Loading([html.Button(id='btn-1')], className='loading-1'),
69+
dcc.Loading([html.Button(id='btn-2')], className='loading-2')
70+
], id='root')
71+
72+
@app.callback(Output('btn-1', 'value'), [Input('btn-2', 'n_clicks')])
73+
def updateDiv(n_clicks):
74+
if n_clicks is not None:
75+
with lock:
76+
return
77+
78+
return 'content'
79+
80+
@app.callback(Output('btn-2', 'value'), [Input('btn-1', 'n_clicks')])
81+
def updateDiv(n_clicks):
82+
if n_clicks is not None:
83+
with lock:
84+
return
85+
86+
return 'content'
87+
88+
dash_dcc.start_server(app)
89+
90+
dash_dcc.find_element('.loading-1 #btn-1')
91+
dash_dcc.find_element('.loading-2 #btn-2')
92+
93+
with lock:
94+
dash_dcc.find_element('#btn-1').click()
95+
96+
dash_dcc.find_element('.loading-2 .dash-spinner')
97+
dash_dcc.find_element('.loading-1 #btn-1')
98+
99+
dash_dcc.find_element('.loading-2 #btn-2')
100+
101+
with lock:
102+
dash_dcc.find_element('#btn-2').click()
103+
104+
dash_dcc.find_element('.loading-1 .dash-spinner')
105+
106+
dash_dcc.find_element('.loading-1 #btn-1')
107+
dash_dcc.find_element('.loading-2 #btn-2')
108+
109+
assert not dash_dcc.get_logs()
110+
111+
112+
def test_ldcp004_nested_loading_components(dash_dcc):
113+
lock = Lock()
114+
115+
app = dash.Dash(__name__)
116+
117+
app.layout = html.Div([
118+
dcc.Loading([
119+
html.Button(id='btn-1'),
120+
dcc.Loading([html.Button(id='btn-2')], className='loading-2')
121+
], className='loading-1')
122+
], id='root')
123+
124+
@app.callback(Output('btn-1', 'value'), [Input('btn-2', 'n_clicks')])
125+
def updateDiv(n_clicks):
126+
if n_clicks is not None:
127+
with lock:
128+
return
129+
130+
return 'content'
131+
132+
@app.callback(Output('btn-2', 'value'), [Input('btn-1', 'n_clicks')])
133+
def updateDiv(n_clicks):
134+
if n_clicks is not None:
135+
with lock:
136+
return
137+
138+
return 'content'
139+
140+
dash_dcc.start_server(app)
141+
142+
dash_dcc.find_element('.loading-1 #btn-1')
143+
dash_dcc.find_element('.loading-2 #btn-2')
144+
145+
with lock:
146+
dash_dcc.find_element('#btn-1').click()
147+
148+
dash_dcc.find_element('.loading-2 .dash-spinner')
149+
dash_dcc.find_element('.loading-1 #btn-1')
150+
151+
dash_dcc.find_element('.loading-2 #btn-2')
152+
153+
with lock:
154+
dash_dcc.find_element('#btn-2').click()
155+
156+
dash_dcc.find_element('.loading-1 .dash-spinner')
157+
158+
dash_dcc.find_element('.loading-1 #btn-1')
159+
dash_dcc.find_element('.loading-2 #btn-2')
160+
161+
assert not dash_dcc.get_logs()
162+
163+
164+
def test_ldcp005_dynamic_loading_component(dash_dcc):
165+
lock = Lock()
166+
167+
app = dash.Dash(__name__)
168+
app.config['suppress_callback_exceptions'] = True
169+
170+
app.layout = html.Div([html.Button(id='btn-1'), html.Div(id='div-1')])
171+
172+
@app.callback(Output('div-1', 'children'), [Input('btn-1', 'n_clicks')])
173+
def updateDiv(n_clicks):
174+
if n_clicks is None:
175+
return
176+
177+
with lock:
178+
return html.Div([
179+
html.Button(id='btn-2'),
180+
dcc.Loading([html.Button(id='btn-3')], className='loading-1')
181+
])
182+
183+
@app.callback(Output('btn-3', 'content'), [Input('btn-2', 'n_clicks')])
184+
def updateDynamic(n_clicks):
185+
if n_clicks is None:
186+
return
187+
188+
with lock:
189+
return 'content'
190+
191+
dash_dcc.start_server(app)
192+
193+
dash_dcc.find_element('#btn-1')
194+
dash_dcc.find_element('#div-1')
195+
196+
dash_dcc.find_element('#btn-1').click()
197+
198+
dash_dcc.find_element('#div-1 #btn-2')
199+
dash_dcc.find_element('.loading-1 #btn-3')
200+
201+
with lock:
202+
dash_dcc.find_element('#btn-2').click()
203+
204+
dash_dcc.find_element('.loading-1 .dash-spinner')
205+
206+
dash_dcc.find_element('#div-1 #btn-2')
207+
dash_dcc.find_element('.loading-1 #btn-3')
208+
209+
assert not dash_dcc.get_logs()

0 commit comments

Comments
 (0)