diff --git a/IPython/html/tests/notebook/notifications.js b/IPython/html/tests/notebook/notifications.js new file mode 100644 index 0000000..7366930 --- /dev/null +++ b/IPython/html/tests/notebook/notifications.js @@ -0,0 +1,116 @@ +// Test the notification area and widgets + +casper.notebook_test(function () { + var that = this; + var widget = function (name) { + return that.evaluate(function (name) { + return (IPython.notification_area.widget(name) !== undefined); + }, name); + }; + + var get_widget = function (name) { + return that.evaluate(function (name) { + return (IPython.notification_area.get_widget(name) !== undefined); + }, name); + }; + + var new_notification_widget = function (name) { + return that.evaluate(function (name) { + return (IPython.notification_area.new_notification_widget(name) !== undefined); + }, name); + }; + + var widget_has_class = function (name, class_name) { + return that.evaluate(function (name, class_name) { + var w = IPython.notification_area.get_widget(name); + return w.element.hasClass(class_name); + }, name, class_name); + }; + + var widget_message = function (name) { + return that.evaluate(function (name) { + var w = IPython.notification_area.get_widget(name); + return w.get_message(); + }, name); + }; + + this.then(function () { + // check that existing widgets are there + this.test.assert(get_widget('kernel') && widget('kernel'), 'The kernel notification widget exists'); + this.test.assert(get_widget('notebook') && widget('notbook'), 'The notebook notification widget exists'); + + // try getting a non-existant widget + this.test.assertRaises(get_widget, 'foo', 'get_widget: error is thrown'); + + // try creating a non-existant widget + this.test.assert(widget('bar'), 'widget: new widget is created'); + + // try creating a widget that already exists + this.test.assertRaises(new_notification_widget, 'kernel', 'new_notification_widget: error is thrown'); + }); + + // test creating 'info' messages + this.thenEvaluate(function () { + var tnw = IPython.notification_area.widget('test'); + tnw.info('test info'); + }); + this.waitUntilVisible('#notification_test', function () { + this.test.assert(widget_has_class('test', 'info'), 'info: class is correct'); + this.test.assertEquals(widget_message('test'), 'test info', 'info: message is correct'); + }); + + // test creating 'warning' messages + this.thenEvaluate(function () { + var tnw = IPython.notification_area.widget('test'); + tnw.warning('test warning'); + }); + this.waitUntilVisible('#notification_test', function () { + this.test.assert(widget_has_class('test', 'warning'), 'warning: class is correct'); + this.test.assertEquals(widget_message('test'), 'test warning', 'warning: message is correct'); + }); + + // test creating 'danger' messages + this.thenEvaluate(function () { + var tnw = IPython.notification_area.widget('test'); + tnw.danger('test danger'); + }); + this.waitUntilVisible('#notification_test', function () { + this.test.assert(widget_has_class('test', 'danger'), 'danger: class is correct'); + this.test.assertEquals(widget_message('test'), 'test danger', 'danger: message is correct'); + }); + + // test message timeout + this.thenEvaluate(function () { + var tnw = IPython.notification_area.widget('test'); + tnw.set_message('test timeout', 1000); + }); + this.waitUntilVisible('#notification_test', function () { + this.test.assertEquals(widget_message('test'), 'test timeout', 'timeout: message is correct'); + }); + this.waitWhileVisible('#notification_test', function () { + this.test.assertEquals(widget_message('test'), '', 'timeout: message was cleared'); + }); + + // test click callback + this.thenEvaluate(function () { + var tnw = IPython.notification_area.widget('test'); + tnw._clicked = false; + tnw.set_message('test click', undefined, function () { + tnw._clicked = true; + return true; + }); + }); + this.waitUntilVisible('#notification_test', function () { + this.test.assertEquals(widget_message('test'), 'test click', 'callback: message is correct'); + this.click('#notification_test'); + }); + this.waitFor(function () { + return this.evaluate(function () { + return IPython.notification_area.widget('test')._clicked; + }); + }, function () { + this.waitWhileVisible('#notification_test', function () { + this.test.assertEquals(widget_message('test'), '', 'callback: message was cleared'); + }); + }); +});