diff --git a/IPython/html/tests/services/kernel.js b/IPython/html/tests/services/kernel.js
index b3caf7e..d93c0d9 100644
--- a/IPython/html/tests/services/kernel.js
+++ b/IPython/html/tests/services/kernel.js
@@ -3,24 +3,127 @@
// Kernel tests
//
casper.notebook_test(function () {
+ // test that the kernel is running
this.then(function () {
- this.test.assert(this.kernel_running(), 'kernel: kernel is running');
+ this.test.assert(this.kernel_running(), 'kernel is running');
});
+ // test list
+ this.thenEvaluate(function () {
+ IPython._kernels = null;
+ IPython.notebook.kernel.list(function (data) {
+ IPython._kernels = data;
+ });
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython._kernels !== null;
+ });
+ });
+ this.then(function () {
+ var num_kernels = this.evaluate(function () {
+ return IPython._kernels.length;
+ });
+ this.test.assertEquals(num_kernels, 1, 'one kernel running');
+ });
+
+ // test get_info
+ var kernel_info = this.evaluate(function () {
+ return {
+ name: IPython.notebook.kernel.name,
+ id: IPython.notebook.kernel.id
+ };
+ });
+ this.thenEvaluate(function () {
+ IPython._kernel_info = null;
+ IPython.notebook.kernel.get_info(function (data) {
+ IPython._kernel_info = data;
+ });
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython._kernel_info !== null;
+ });
+ });
+ this.then(function () {
+ var new_kernel_info = this.evaluate(function () {
+ return IPython._kernel_info;
+ });
+ this.test.assertEquals(kernel_info.name, new_kernel_info.name, 'kernel: name correct');
+ this.test.assertEquals(kernel_info.id, new_kernel_info.id, 'kernel: id correct');
+ });
+
+ // test interrupt
+ this.thenEvaluate(function () {
+ IPython._interrupted = false;
+ IPython.notebook.kernel.interrupt(function () {
+ IPython._interrupted = true;
+ });
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython._interrupted;
+ });
+ });
+ this.then(function () {
+ var interrupted = this.evaluate(function () {
+ return IPython._interrupted;
+ });
+ this.test.assert(interrupted, 'kernel was interrupted');
+ });
+
+ // test restart
+ this.thenEvaluate(function () {
+ IPython.notebook.kernel.restart();
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython.notebook.kernel.is_fully_disconnected();
+ });
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython.notebook.kernel.is_connected();
+ });
+ });
+ this.then(function () {
+ this.test.assert(this.kernel_running(), 'kernel restarted');
+ });
+
+ // test reconnect
+ this.thenEvaluate(function () {
+ IPython.notebook.kernel.stop_channels();
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython.notebook.kernel.is_fully_disconnected();
+ });
+ });
+ this.thenEvaluate(function () {
+ IPython.notebook.kernel.reconnect();
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython.notebook.kernel.is_connected();
+ });
+ });
+ this.then(function () {
+ this.test.assert(this.kernel_running(), 'kernel reconnected');
+ });
+
+ // test kernel_info_request
this.evaluate(function () {
IPython.notebook.kernel.kernel_info(
function(msg){
IPython._kernel_info_response = msg;
});
});
-
this.waitFor(
function () {
return this.evaluate(function(){
return IPython._kernel_info_response;
});
});
-
this.then(function () {
var kernel_info_response = this.evaluate(function(){
return IPython._kernel_info_response;
@@ -28,18 +131,62 @@ casper.notebook_test(function () {
this.test.assertTrue( kernel_info_response.msg_type === 'kernel_info_reply', 'Kernel info request return kernel_info_reply');
this.test.assertTrue( kernel_info_response.content !== undefined, 'Kernel_info_reply is not undefined');
});
-
+
+ // test kill
this.thenEvaluate(function () {
IPython.notebook.kernel.kill();
});
-
this.waitFor(function () {
return this.evaluate(function () {
return IPython.notebook.kernel.is_fully_disconnected();
});
});
-
this.then(function () {
this.test.assert(!this.kernel_running(), 'kernel is not running');
});
+
+ // test start
+ var url;
+ this.then(function () {
+ url = this.evaluate(function () {
+ return IPython.notebook.kernel.start();
+ });
+ });
+ this.then(function () {
+ this.test.assertEquals(url, "/api/kernels", "start url is correct");
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython.notebook.kernel.is_connected();
+ });
+ });
+ this.then(function () {
+ this.test.assert(this.kernel_running(), 'kernel is running');
+ });
+
+ // test start with parameters
+ this.thenEvaluate(function () {
+ IPython.notebook.kernel.kill();
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython.notebook.kernel.is_fully_disconnected();
+ });
+ });
+ this.then(function () {
+ url = this.evaluate(function () {
+ return IPython.notebook.kernel.start({foo: "bar"});
+ });
+ });
+ this.then(function () {
+ this.test.assertEquals(url, "/api/kernels?foo=bar", "start url with params is correct");
+ });
+ this.waitFor(function () {
+ return this.evaluate(function () {
+ return IPython.notebook.kernel.is_connected();
+ });
+ });
+ this.then(function () {
+ this.test.assert(this.kernel_running(), 'kernel is running');
+ });
});