-
Notifications
You must be signed in to change notification settings - Fork 5.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4377 from takluyver/selenium-test-save
Convert test of saving with complex name to Selenium
- Loading branch information
Showing
4 changed files
with
74 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
"""Test saving a notebook with escaped characters | ||
""" | ||
|
||
from urllib.parse import quote | ||
from .utils import wait_for_selector, new_window | ||
|
||
promise_js = """ | ||
var done = arguments[arguments.length - 1]; | ||
%s.then( | ||
data => { done(["success", data]); }, | ||
error => { done(["error", error]); } | ||
); | ||
""" | ||
|
||
def execute_promise(js, browser): | ||
state, data = browser.execute_async_script(promise_js % js) | ||
if state == 'success': | ||
return data | ||
raise Exception(data) | ||
|
||
|
||
def test_save(notebook): | ||
# don't use unicode with ambiguous composed/decomposed normalization | ||
# because the filesystem may use a different normalization than literals. | ||
# This causes no actual problems, but will break string comparison. | ||
nbname = "has#hash and space and unicø∂e.ipynb" | ||
escaped_name = quote(nbname) | ||
|
||
notebook.edit_cell(index=0, content="s = '??'") | ||
|
||
notebook.browser.execute_script("Jupyter.notebook.set_notebook_name(arguments[0])", nbname) | ||
|
||
model = execute_promise("Jupyter.notebook.save_notebook()", notebook.browser) | ||
assert model['name'] == nbname | ||
|
||
current_name = notebook.browser.execute_script("return Jupyter.notebook.notebook_name") | ||
assert current_name == nbname | ||
|
||
current_path = notebook.browser.execute_script("return Jupyter.notebook.notebook_path") | ||
assert current_path == nbname | ||
|
||
displayed_name = notebook.browser.find_element_by_id('notebook_name').text | ||
assert displayed_name + '.ipynb' == nbname | ||
|
||
execute_promise("Jupyter.notebook.save_checkpoint()", notebook.browser) | ||
|
||
checkpoints = notebook.browser.execute_script("return Jupyter.notebook.checkpoints") | ||
assert len(checkpoints) == 1 | ||
|
||
notebook.browser.find_element_by_css_selector('#ipython_notebook a').click() | ||
hrefs_nonmatch = [] | ||
for link in wait_for_selector(notebook.browser, 'a.item_link'): | ||
href = link.get_attribute('href') | ||
if escaped_name in href: | ||
print("Opening", href) | ||
notebook.browser.get(href) | ||
wait_for_selector(notebook.browser, '.cell') | ||
break | ||
hrefs_nonmatch.append(href) | ||
else: | ||
raise AssertionError("{!r} not found in {!r}" | ||
.format(escaped_name, hrefs_nonmatch)) | ||
|
||
current_name = notebook.browser.execute_script("return Jupyter.notebook.notebook_name") | ||
assert current_name == nbname |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters