-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Configure document-title during updates #1315
Changes from 13 commits
6525ca2
3061cba
eb427b0
28630d9
2f7cdc4
899b20e
f5f97cc
1db09c9
8046178
745ba77
57f9b37
740b913
71ee5ec
bb2a6f7
571d6ce
58b1472
087774d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -167,3 +167,111 @@ def find_text(spec): | |
|
||
find_spinners() | ||
find_text({1: 1, 2: 1, 3: 1, 4: 1}) | ||
|
||
|
||
def test_update_title_default(dash_duo): | ||
stlehmann marked this conversation as resolved.
Show resolved
Hide resolved
|
||
lock = Lock() | ||
|
||
app = dash.Dash(__name__) | ||
|
||
app.layout = html.Div( | ||
children=[ | ||
html.H3("Press button see document title updating"), | ||
html.Div(id="output"), | ||
html.Button("Update", id="button", n_clicks=0), | ||
] | ||
) | ||
|
||
@app.callback( | ||
Output("output", "children"), | ||
[Input("button", "n_clicks")] | ||
) | ||
def update(n): | ||
with lock: | ||
return n | ||
|
||
with lock: | ||
dash_duo.start_server(app) | ||
dash_duo.find_element("#button").click() | ||
assert dash_duo.driver.title == "Updating..." | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Very nice tests! One thing though: your callback will execute on page load, right? So holding the lock while starting the server means we're testing the title during the initialization sequence. That's a good thing to test, but I think in at least one of these tests (and maybe all of them) we should test:
Also rather than a simple from dash.testing.wait import until
until(lambda: dash_duo.driver.title == "Updating...", timeout=1) And one last thing, if you're feeling adventurous: These test cases are nearly identical so they could be parametrized, something like: import pytest
@pytest.mark.parametrize(
"kwargs,page_updating_title",
[
({}, "Updating..."),
({"updating_title": None}, "Dash"),
({"updating_title": ""}, "Dash"),
({"updating_title": "Hello World"}, "Hello World")
]
)
def test_rdls003_update_title_default(dash_duo, updating_title, page_updating_title) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I tried to implement your suggestions. I omitted an explicit test for the correct update title on startup because the callback should be called on startup afaik. I hope this is OK. The parametrize decorator is a great thing. Didn't know that until now, thanks :) Hope I did it all right with the locks. I'm not that sure about it. |
||
|
||
|
||
def test_update_title_None(dash_duo): | ||
lock = Lock() | ||
|
||
app = dash.Dash(__name__, update_title=None) | ||
|
||
app.layout = html.Div( | ||
children=[ | ||
html.H3("Press button see document title updating"), | ||
html.Div(id="output"), | ||
html.Button("Update", id="button", n_clicks=0), | ||
] | ||
) | ||
|
||
@app.callback( | ||
Output("output", "children"), | ||
[Input("button", "n_clicks")] | ||
) | ||
def update(n): | ||
with lock: | ||
return n | ||
|
||
with lock: | ||
dash_duo.start_server(app) | ||
dash_duo.find_element("#button").click() | ||
assert dash_duo.driver.title == "Dash" | ||
|
||
|
||
def test_update_title_empty(dash_duo): | ||
lock = Lock() | ||
|
||
app = dash.Dash(__name__, update_title="") | ||
|
||
app.layout = html.Div( | ||
children=[ | ||
html.H3("Press button see document title updating"), | ||
html.Div(id="output"), | ||
html.Button("Update", id="button", n_clicks=0), | ||
] | ||
) | ||
|
||
@app.callback( | ||
Output("output", "children"), | ||
[Input("button", "n_clicks")] | ||
) | ||
def update(n): | ||
with lock: | ||
return n | ||
|
||
with lock: | ||
dash_duo.start_server(app) | ||
dash_duo.find_element("#button").click() | ||
assert dash_duo.driver.title == "Dash" | ||
|
||
|
||
def test_update_title_custom(dash_duo): | ||
lock = Lock() | ||
|
||
app = dash.Dash(__name__, update_title="Hello World") | ||
|
||
app.layout = html.Div( | ||
children=[ | ||
html.H3("Press button see document title updating"), | ||
html.Div(id="output"), | ||
html.Button("Update", id="button", n_clicks=0), | ||
] | ||
) | ||
|
||
@app.callback( | ||
Output("output", "children"), | ||
[Input("button", "n_clicks")] | ||
) | ||
def update(n): | ||
with lock: | ||
return n | ||
|
||
with lock: | ||
dash_duo.start_server(app) | ||
dash_duo.find_element("#button").click() | ||
assert dash_duo.driver.title == "Hello World" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Marc-Andre-Rivet as we were discussing the other day - the renderer no longer holds this default value at all. That means when the R and Julia implementations update to include this functionality in their renderer, they will need to add this option to the back end at the same time or the default behavior will change to no title changes ever.