parent
e00a86c4cb
commit
bc3a8cbe79
@ -1,112 +0,0 @@
|
||||
//
|
||||
// Test saving a notebook with escaped characters
|
||||
//
|
||||
|
||||
casper.notebook_test(function () {
|
||||
// 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.
|
||||
var nbname = "has#hash and space and unicø∂e.ipynb";
|
||||
|
||||
this.append_cell("s = '??'", 'code');
|
||||
|
||||
this.thenEvaluate(function (nbname) {
|
||||
require(['base/js/events'], function (events) {
|
||||
IPython.notebook.set_notebook_name(nbname);
|
||||
IPython._save_success = IPython._save_failed = false;
|
||||
events.on('notebook_saved.Notebook', function () {
|
||||
IPython._save_success = true;
|
||||
});
|
||||
events.on('notebook_save_failed.Notebook',
|
||||
function (event, error) {
|
||||
IPython._save_failed = "save failed with " + error;
|
||||
});
|
||||
IPython.notebook.save_notebook();
|
||||
});
|
||||
}, {nbname:nbname});
|
||||
|
||||
this.waitFor(function () {
|
||||
return this.evaluate(function(){
|
||||
return IPython._save_failed || IPython._save_success;
|
||||
});
|
||||
});
|
||||
|
||||
this.then(function(){
|
||||
var success_failure = this.evaluate(function(){
|
||||
return [IPython._save_success, IPython._save_failed];
|
||||
});
|
||||
this.test.assertEquals(success_failure[1], false, "Save did not fail");
|
||||
this.test.assertEquals(success_failure[0], true, "Save OK");
|
||||
|
||||
var current_name = this.evaluate(function(){
|
||||
return IPython.notebook.notebook_name;
|
||||
});
|
||||
this.test.assertEquals(current_name, nbname, "Save with complicated name");
|
||||
var current_path = this.evaluate(function(){
|
||||
return IPython.notebook.notebook_path;
|
||||
});
|
||||
this.test.assertEquals(current_path, nbname, "path OK");
|
||||
});
|
||||
|
||||
this.thenEvaluate(function(){
|
||||
IPython._checkpoint_created = false;
|
||||
require(['base/js/events'], function (events) {
|
||||
events.on('checkpoint_created.Notebook', function (evt, data) {
|
||||
IPython._checkpoint_created = true;
|
||||
});
|
||||
});
|
||||
IPython.notebook.save_checkpoint();
|
||||
});
|
||||
|
||||
this.waitFor(function () {
|
||||
return this.evaluate(function(){
|
||||
return IPython._checkpoint_created;
|
||||
});
|
||||
});
|
||||
|
||||
this.then(function(){
|
||||
var checkpoints = this.evaluate(function(){
|
||||
return IPython.notebook.checkpoints;
|
||||
});
|
||||
this.test.assertEquals(checkpoints.length, 1, "checkpoints OK");
|
||||
});
|
||||
|
||||
this.then(function(){
|
||||
this.open_dashboard();
|
||||
});
|
||||
|
||||
this.then(function(){
|
||||
var notebook_url = this.evaluate(function(nbname){
|
||||
var escaped_name = encodeURIComponent(nbname);
|
||||
var return_this_thing = null;
|
||||
$("a.item_link").map(function (i,a) {
|
||||
if (a.href.indexOf(escaped_name) >= 0) {
|
||||
return_this_thing = a.href;
|
||||
return;
|
||||
}
|
||||
});
|
||||
return return_this_thing;
|
||||
}, {nbname:nbname});
|
||||
this.test.assertNotEquals(notebook_url, null, "Escaped URL in notebook list");
|
||||
// open the notebook
|
||||
this.open(notebook_url);
|
||||
});
|
||||
|
||||
// wait for the notebook
|
||||
this.waitFor(this.kernel_running);
|
||||
|
||||
this.waitFor(function() {
|
||||
return this.evaluate(function () {
|
||||
return IPython && IPython.notebook && true;
|
||||
});
|
||||
});
|
||||
|
||||
this.then(function(){
|
||||
// check that the notebook name is correct
|
||||
var notebook_name = this.evaluate(function(){
|
||||
return IPython.notebook.notebook_name;
|
||||
});
|
||||
this.test.assertEquals(notebook_name, nbname, "Notebook name is correct");
|
||||
});
|
||||
|
||||
});
|
||||
@ -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
|
||||
Loading…
Reference in new issue