// // Tests for the Session object // casper.notebook_test(function () { var that = this; var get_info = function () { return that.evaluate(function () { return JSON.parse(JSON.stringify(IPython.notebook.session._get_model())); }); }; // test that the kernel is running this.then(function () { this.test.assert(this.kernel_running(), 'session: kernel is running'); }); // test list this.thenEvaluate(function () { IPython._sessions = null; IPython.notebook.session.list(function (data) { IPython._sessions = data; }); }); this.waitFor(function () { return this.evaluate(function () { return IPython._sessions !== null; }); }); this.then(function () { var num_sessions = this.evaluate(function () { return IPython._sessions.length; }); this.test.assertEquals(num_sessions, 1, 'one session running'); }); // test get_info var session_info = get_info(); this.thenEvaluate(function () { IPython._session_info = null; IPython.notebook.session.get_info(function (data) { IPython._session_info = data; }); }); this.waitFor(function () { return this.evaluate(function () { return IPython._session_info !== null; }); }); this.then(function () { var new_session_info = this.evaluate(function () { return IPython._session_info; }); this.test.assertEquals(session_info.notebook.name, new_session_info.notebook.name, 'session: notebook name correct'); this.test.assertEquals(session_info.notebook.path, new_session_info.notebook.path, 'session: notebook path correct'); this.test.assertEquals(session_info.kernel.name, new_session_info.kernel.name, 'session: kernel name correct'); this.test.assertEquals(session_info.kernel.id, new_session_info.kernel.id, 'session: kernel id correct'); }); // test rename_notebook // // TODO: the PATCH request isn't supported by phantom, so this test always // fails, see https://github.com/ariya/phantomjs/issues/11384 // when this is fixed we can properly run this test // // this.thenEvaluate(function () { // IPython._renamed = false; // IPython.notebook.session.rename_notebook( // "foo", // "bar", // function (data) { // IPython._renamed = true; // } // ); // }); // this.waitFor(function () { // return this.evaluate(function () { // return IPython._renamed; // }); // }); // this.then(function () { // var info = get_info(); // this.test.assertEquals(info.notebook.name, "foo", "notebook was renamed"); // this.test.assertEquals(info.notebook.path, "bar", "notebook path was changed"); // }); // test delete this.thenEvaluate(function () { IPython.notebook.session.delete(); }); this.waitFor(this.kernel_disconnected); this.then(function () { this.test.assert(!this.kernel_running(), 'session deletes kernel'); }); // check for events when starting the session this.event_test( 'start_session', [ 'kernel_created.Session', 'kernel_connected.Kernel', 'kernel_starting.Kernel', 'kernel_ready.Kernel' ], function () { this.thenEvaluate(function () { IPython.notebook.session.start(); }); } ); this.wait_for_kernel_ready(); // check for events when killing the session this.event_test( 'delete_session', ['kernel_killed.Session'], function () { this.thenEvaluate(function () { IPython.notebook.session.delete(); }); } ); // check for events when restarting the session this.event_test( 'restart_session', [ 'kernel_killed.Session', 'kernel_created.Session', 'kernel_connected.Kernel', 'kernel_starting.Kernel', 'kernel_ready.Kernel' ], function () { this.thenEvaluate(function () { IPython.notebook.session.restart(); }); } ); this.wait_for_kernel_ready(); // test handling of failed restart this.event_test( 'failed_restart', [ 'kernel_restarting.Kernel', 'kernel_autorestarting.Kernel', 'kernel_killed.Session', 'kernel_dead.Kernel', ], function () { this.thenEvaluate(function () { var cell = IPython.notebook.get_cell(0); cell.set_text("import os\n" + "from IPython.kernel.connect import get_connection_file\n" + "with open(get_connection_file(), 'w') as f:\n" + " f.write('garbage')\n" + "os._exit(1)"); cell.execute(); }); }, // need an extra-long timeout, because it needs to try // restarting the kernel 5 times! 20000 ); // check for events when starting a nonexistant kernel this.event_test( 'bad_start_session', [ 'kernel_killed.Session', 'kernel_dead.Session' ], function () { this.thenEvaluate(function () { IPython.notebook.session.restart({kernel_name: 'foo'}); }); } ); });