// Test widget button class
casper.notebook_test(function () {
    var button_index = this.append_cell(
        'from IPython.html import widgets\n' + 
        'from IPython.display import display, clear_output\n' +
        'button = widgets.Button(description="Title")\n' +
        'display(button)\n' +
        'print("Success")\n' +
        'def handle_click(sender):\n' +
        '    display("Clicked")\n' +
        'button.on_click(handle_click)');
    this.execute_cell_then(button_index, function(index){
        this.test.assertEquals(this.get_output_cell(index).text, 'Success\n',
            'Create button cell executed with correct output.');
    });

    // Wait for the widgets to actually display.
    var widget_button_selector = '.widget-area .widget-subarea button';
    this.wait_for_element(button_index, widget_button_selector);

    // Continue with the tests.
    this.then(function() {
        this.test.assert(this.cell_element_exists(button_index, 
            '.widget-area .widget-subarea'),
            'Widget subarea exists.');

        this.test.assert(this.cell_element_exists(button_index, 
            widget_button_selector),
            'Widget button exists.');

        this.test.assert(this.cell_element_function(button_index, 
            widget_button_selector, 'html')=='Title',
            'Set button description.');

        this.cell_element_function(button_index, 
            widget_button_selector, 'click');
    });

    this.wait_for_output(button_index, 1);

    this.then(function () {
        var warning_text = this.get_output_cell(button_index, 1).text;
        this.test.assertNotEquals(warning_text.indexOf('Warning'), -1,
            'Importing widgets show a warning');
        this.test.assertEquals(this.get_output_cell(button_index, 2).data['text/plain'], "'Clicked'",
            'Button click event fires.');
    });
});