##// END OF EJS Templates
fix bug in stale profile clean up for clusters...
fix bug in stale profile clean up for clusters "clusters" tab of my notebook wasn't rendering, so checked the log, found the stack trace: ``` [...] File "/usr/local/lib/python3.4/site-packages/ipython-3.0.0-py3.4.egg/IPython/html/services/clusters/handlers.py", line 21, in get self.finish(json.dumps(self.cluster_manager.list_profiles())) File "/usr/local/lib/python3.4/site-packages/ipython-3.0.0-py3.4.egg/IPython/html/services/clusters/clustermanager.py", line 77, in list_profiles self.update_profiles() File "/usr/local/lib/python3.4/site-packages/ipython-3.0.0-py3.4.egg/IPython/html/services/clusters/clustermanager.py", line 74, in update_profiles self.profiles.pop(stale) TypeError: unhashable type: 'set' ``` looks like a pretty straightforward mistake

File last commit:

r21208:e65db1aa
r21236:10a376e0
Show More
deletecell.js
107 lines | 4.5 KiB | application/javascript | JavascriptLexer
Jessica B. Hamrick
Add tests for undeletable cells
r17999
// Test
casper.notebook_test(function () {
var that = this;
var cell_is_deletable = function (index) {
// Get the deletable status of a cell.
return that.evaluate(function (index) {
var cell = IPython.notebook.get_cell(index);
return cell.is_deletable();
}, index);
};
var a = 'print("a")';
var index = this.append_cell(a);
var b = 'print("b")';
index = this.append_cell(b);
var c = 'print("c")';
index = this.append_cell(c);
this.thenEvaluate(function() {
IPython.notebook.get_cell(1).metadata.deletable = false;
Jessica B. Hamrick
Fix tests
r18001 IPython.notebook.get_cell(2).metadata.deletable = 0; // deletable only when exactly false
Jessica B. Hamrick
Add tests for undeletable cells
r17999 IPython.notebook.get_cell(3).metadata.deletable = true;
});
this.then(function () {
// Check deletable status of the cells
this.test.assert(cell_is_deletable(0), 'Cell 0 is deletable');
this.test.assert(!cell_is_deletable(1), 'Cell 1 is not deletable');
Jessica B. Hamrick
Fix tests
r18001 this.test.assert(cell_is_deletable(2), 'Cell 2 is deletable');
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.test.assert(cell_is_deletable(3), 'Cell 3 is deletable');
});
// Try to delete cell 0 (should succeed)
this.then(function () {
this.select_cell(0);
this.trigger_keydown('esc');
this.trigger_keydown('d', 'd');
this.test.assertEquals(this.get_cells_length(), 3, 'Delete cell 0: There are now 3 cells');
this.test.assertEquals(this.get_cell_text(0), a, 'Delete cell 0: Cell 1 is now cell 0');
this.test.assertEquals(this.get_cell_text(1), b, 'Delete cell 0: Cell 2 is now cell 1');
this.test.assertEquals(this.get_cell_text(2), c, 'Delete cell 0: Cell 3 is now cell 2');
this.validate_notebook_state('dd', 'command', 0);
});
// Try to delete cell 0 (should fail)
this.then(function () {
this.select_cell(0);
this.trigger_keydown('d', 'd');
this.test.assertEquals(this.get_cells_length(), 3, 'Delete cell 0: There are still 3 cells');
this.test.assertEquals(this.get_cell_text(0), a, 'Delete cell 0: Cell 0 was not deleted');
this.test.assertEquals(this.get_cell_text(1), b, 'Delete cell 0: Cell 1 was not affected');
this.test.assertEquals(this.get_cell_text(2), c, 'Delete cell 0: Cell 2 was not affected');
this.validate_notebook_state('dd', 'command', 0);
});
Jessica B. Hamrick
Fix tests
r18001 // Try to delete cell 1 (should succeed)
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.then(function () {
this.select_cell(1);
this.trigger_keydown('d', 'd');
Jessica B. Hamrick
Fix tests
r18001 this.test.assertEquals(this.get_cells_length(), 2, 'Delete cell 1: There are now 2 cells');
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.test.assertEquals(this.get_cell_text(0), a, 'Delete cell 1: Cell 0 was not affected');
Jessica B. Hamrick
Fix tests
r18001 this.test.assertEquals(this.get_cell_text(1), c, 'Delete cell 1: Cell 1 was not affected');
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.validate_notebook_state('dd', 'command', 1);
});
Jessica B. Hamrick
Fix tests
r18001 // Try to delete cell 1 (should succeed)
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.then(function () {
Jessica B. Hamrick
Fix tests
r18001 this.select_cell(1);
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.trigger_keydown('d', 'd');
Jessica B. Hamrick
Fix tests
r18001 this.test.assertEquals(this.get_cells_length(), 1, 'Delete cell 1: There is now 1 cell');
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.test.assertEquals(this.get_cell_text(0), a, 'Delete cell 2: Cell 0 was not affected');
Jessica B. Hamrick
Fix tests
r18001 this.validate_notebook_state('dd', 'command', 0);
Jessica B. Hamrick
Add tests for undeletable cells
r17999 });
Jessica B. Hamrick
Fix tests
r18001 // Change the deletable status of the last cells
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.thenEvaluate(function() {
IPython.notebook.get_cell(0).metadata.deletable = true;
});
this.then(function () {
Jessica B. Hamrick
Fix tests
r18001 // Check deletable status of the cell
Jessica B. Hamrick
Add tests for undeletable cells
r17999 this.test.assert(cell_is_deletable(0), 'Cell 0 is deletable');
// Try to delete the last cell (should succeed)
this.select_cell(0);
this.trigger_keydown('d', 'd');
this.test.assertEquals(this.get_cells_length(), 1, 'Delete last cell: There is still 1 cell');
this.test.assertEquals(this.get_cell_text(0), "", 'Delete last cell: Cell 0 was deleted');
this.validate_notebook_state('dd', 'command', 0);
});
// Make sure copied cells are deletable
this.thenEvaluate(function() {
IPython.notebook.get_cell(0).metadata.deletable = false;
});
this.then(function () {
this.select_cell(0);
this.trigger_keydown('c', 'v');
this.test.assertEquals(this.get_cells_length(), 2, 'Copy cell: There are 2 cells');
this.test.assert(!cell_is_deletable(0), 'Cell 0 is not deletable');
this.test.assert(cell_is_deletable(1), 'Cell 1 is deletable');
this.validate_notebook_state('cv', 'command', 1);
});
});