Vehicle-Anti-Theft-Face-Rec.../venv/Lib/site-packages/notebook/tests/selenium/test_save.py

65 lines
2.3 KiB
Python

"""Test saving a notebook with escaped characters
"""
from urllib.parse import quote
from .utils import wait_for_selector
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