diff --git a/notebook/tests/notebook/dualmode_cellinsert.js b/notebook/tests/notebook/dualmode_cellinsert.js deleted file mode 100644 index f066b16cc9..0000000000 --- a/notebook/tests/notebook/dualmode_cellinsert.js +++ /dev/null @@ -1,82 +0,0 @@ - -// Test -casper.notebook_test(function () { - var a = 'print("a")'; - var index = this.append_cell(a); - this.execute_cell_then(index); - - var b = 'print("b")'; - index = this.append_cell(b); - this.execute_cell_then(index); - - var c = 'print("c")'; - index = this.append_cell(c); - this.execute_cell_then(index); - - this.thenEvaluate(function() { - IPython.notebook.default_cell_type = 'code'; - }); - - this.then(function () { - // Cell insertion - this.select_cell(2); - this.trigger_keydown('m'); // Make it markdown - this.trigger_keydown('a'); // Creates one cell - this.test.assertEquals(this.get_cell_text(2), '', 'a; New cell 2 text is empty'); - this.test.assertEquals(this.get_cell(2).cell_type, 'code', 'a; inserts a code cell'); - this.validate_notebook_state('a', 'command', 2); - this.trigger_keydown('b'); // Creates one cell - this.test.assertEquals(this.get_cell_text(2), '', 'b; Cell 2 text is still empty'); - this.test.assertEquals(this.get_cell_text(3), '', 'b; New cell 3 text is empty'); - this.test.assertEquals(this.get_cell(3).cell_type, 'code', 'b; inserts a code cell'); - this.validate_notebook_state('b', 'command', 3); - }); - - this.thenEvaluate(function() { - IPython.notebook.class_config.set('default_cell_type', 'selected'); - }); - - this.then(function () { - this.select_cell(2); - this.trigger_keydown('m'); // switch it to markdown for the next test - this.test.assertEquals(this.get_cell(2).cell_type, 'markdown', 'test cell is markdown'); - this.trigger_keydown('a'); // new cell above - this.test.assertEquals(this.get_cell(2).cell_type, 'markdown', 'a; inserts a markdown cell when markdown selected'); - this.trigger_keydown('b'); // new cell below - this.test.assertEquals(this.get_cell(3).cell_type, 'markdown', 'b; inserts a markdown cell when markdown selected'); - }); - - this.thenEvaluate(function() { - IPython.notebook.class_config.set('default_cell_type', 'above'); - }); - - this.then(function () { - this.select_cell(2); - this.trigger_keydown('y'); // switch it to code for the next test - this.test.assertEquals(this.get_cell(2).cell_type, 'code', 'test cell is code'); - this.trigger_keydown('b'); // new cell below - this.test.assertEquals(this.get_cell(3).cell_type, 'code', 'b; inserts a code cell below code cell'); - this.trigger_keydown('a'); // new cell above - this.test.assertEquals(this.get_cell(3).cell_type, 'code', 'a; inserts a code cell above code cell'); - }); - - this.then(function () { - this.set_cell_text(1, 'cell1'); - this.select_cell(1); - this.select_cell(2, false); - this.trigger_keydown('a'); - this.test.assertEquals(this.get_cell_text(1), '', 'a; New cell 1 text is empty'); - this.test.assertEquals(this.get_cell_text(2), 'cell1', 'a; Cell 2 text is old cell 1'); - - this.set_cell_text(1, 'cell1'); - this.set_cell_text(2, 'cell2'); - this.set_cell_text(3, 'cell3'); - this.select_cell(1); - this.select_cell(2, false); - this.trigger_keydown('b'); - this.test.assertEquals(this.get_cell_text(1), 'cell1', 'b; Cell 1 remains'); - this.test.assertEquals(this.get_cell_text(2), 'cell2', 'b; Cell 2 remains'); - this.test.assertEquals(this.get_cell_text(3), '', 'b; Cell 3 is new'); - this.test.assertEquals(this.get_cell_text(4), 'cell3', 'b; Cell 4 text is old cell 3'); - }); -}); diff --git a/notebook/tests/selenium/test_deletecell.py b/notebook/tests/selenium/test_deletecell.py index 388dd2ad83..7c4eebada1 100644 --- a/notebook/tests/selenium/test_deletecell.py +++ b/notebook/tests/selenium/test_deletecell.py @@ -1,5 +1,3 @@ -import os -import pytest def cell_is_deletable(nb, index): JS = 'return Jupyter.notebook.get_cell({}).is_deletable();'.format(index) diff --git a/notebook/tests/selenium/test_dualmode_insertcell.py b/notebook/tests/selenium/test_dualmode_insertcell.py new file mode 100644 index 0000000000..4ab100ced2 --- /dev/null +++ b/notebook/tests/selenium/test_dualmode_insertcell.py @@ -0,0 +1,57 @@ +from selenium.webdriver.common.keys import Keys +from .utils import shift + +def test_insert_cell(notebook): + a = "print('a')" + b = "print('b')" + c = "print('c')" + + notebook.edit_cell(index=0, content=a) + notebook.append(b, c) + notebook.to_command_mode() + + assert notebook.get_cells_contents() == [a, b, c] + + notebook.to_command_mode() + notebook.focus_cell(2) + notebook.convert_cell_type(2, "markdown") + + # insert code cell above + notebook.current_cell.send_keys("a") + assert notebook.get_cell_contents(2) == "" + assert notebook.get_cell_type(2) == "code" + assert len(notebook.cells) == 4 + + # insert code cell below + notebook.current_cell.send_keys("b") + assert notebook.get_cell_contents(2) == "" + assert notebook.get_cell_contents(3) == "" + assert notebook.get_cell_type(3) == "code" + assert len(notebook.cells) == 5 + + notebook.edit_cell(index=1, content="cell1") + notebook.focus_cell(1) + notebook.current_cell.send_keys("a") + assert notebook.get_cell_contents(1) == "" + assert notebook.get_cell_contents(2) == "cell1" + + notebook.edit_cell(index=1, content='cell1') + notebook.edit_cell(index=2, content='cell2') + notebook.edit_cell(index=3, content='cell3') + notebook.focus_cell(2) + notebook.current_cell.send_keys("b") + assert notebook.get_cell_contents(1) == "cell1" + assert notebook.get_cell_contents(2) == "cell2" + assert notebook.get_cell_contents(3) == "" + assert notebook.get_cell_contents(4) == "cell3" + + # insert above multiple selected cells + notebook.focus_cell(1) + shift(notebook.browser, Keys.DOWN) + notebook.current_cell.send_keys('a') + + # insert below multiple selected cells + notebook.focus_cell(2) + shift(notebook.browser, Keys.DOWN) + notebook.current_cell.send_keys('b') + assert notebook.get_cells_contents()[1:5] == ["", "cell1", "cell2", ""] diff --git a/notebook/tests/selenium/utils.py b/notebook/tests/selenium/utils.py index d17ac0e5e5..3645354e0b 100644 --- a/notebook/tests/selenium/utils.py +++ b/notebook/tests/selenium/utils.py @@ -131,10 +131,17 @@ def get_cells_contents(self): JS = 'return Jupyter.notebook.get_cells().map(function(c) {return c.get_text();})' return self.browser.execute_script(JS) + def get_cell_contents(self, index=0, selector='div .CodeMirror-code'): + return self.cells[index].find_element_by_css_selector(selector).text + def set_cell_metadata(self, index, key, value): JS = 'Jupyter.notebook.get_cell({}).metadata.{} = {}'.format(index, key, value) return self.browser.execute_script(JS) + def get_cell_type(self, index=0): + JS = 'return Jupyter.notebook.get_cell({}).cell_type'.format(index) + return self.browser.execute_script(JS) + def set_cell_input_prompt(self, index, prmpt_val): JS = 'Jupyter.notebook.get_cell({}).set_input_prompt({})'.format(index, prmpt_val) self.browser.execute_script(JS)