##// END OF EJS Templates
Added bool widget value toggle tests
Jonathan Frederic -
Show More
@@ -1,179 +1,220 b''
1 // Test the widget framework.
1 // Test the widget framework.
2 casper.notebook_test(function () {
2 casper.notebook_test(function () {
3 var index;
3 var index;
4
4
5 // Test widget dependencies ////////////////////////////////////////////////
5 // Test widget dependencies ////////////////////////////////////////////////
6 this.then(function () {
6 this.then(function () {
7
7
8 // Check if the WidgetManager class is defined.
8 // Check if the WidgetManager class is defined.
9 this.test.assert(this.evaluate(function() {
9 this.test.assert(this.evaluate(function() {
10 return IPython.WidgetManager != undefined;
10 return IPython.WidgetManager != undefined;
11 }), 'WidgetManager class is defined');
11 }), 'WidgetManager class is defined');
12 });
12 });
13
13
14 index = this.append_cell(
14 index = this.append_cell(
15 'from IPython.html import widgets\n' +
15 'from IPython.html import widgets\n' +
16 'from IPython.display import display, clear_output\n' +
16 'from IPython.display import display, clear_output\n' +
17 'print("Success")');
17 'print("Success")');
18 this.execute_cell_then(index);
18 this.execute_cell_then(index);
19
19
20 this.wait(500); // Wait for require.js async callbacks to load dependencies.
20 this.wait(500); // Wait for require.js async callbacks to load dependencies.
21
21
22 this.then(function () {
22 this.then(function () {
23 // Check if the widget manager has been instanciated.
23 // Check if the widget manager has been instanciated.
24 this.test.assert(this.evaluate(function() {
24 this.test.assert(this.evaluate(function() {
25 return IPython.widget_manager != undefined;
25 return IPython.widget_manager != undefined;
26 }), 'Notebook widget manager instanciated');
26 }), 'Notebook widget manager instanciated');
27 });
27 });
28
28
29
29
30 // Check widget mapping ////////////////////////////////////////////////////
30 // Check widget mapping ////////////////////////////////////////////////////
31 index = this.append_cell(
31 index = this.append_cell(
32 'names = [name for name in dir(widgets)' +
32 'names = [name for name in dir(widgets)' +
33 ' if name.endswith("Widget") and name!= "Widget"]\n' +
33 ' if name.endswith("Widget") and name!= "Widget"]\n' +
34 'for name in names:\n' +
34 'for name in names:\n' +
35 ' print(name)\n');
35 ' print(name)\n');
36 this.execute_cell_then(index, function(index){
36 this.execute_cell_then(index, function(index){
37
37
38 // Get the widget names that are registered with the widget manager. Assume
38 // Get the widget names that are registered with the widget manager. Assume
39 // a 1 to 1 mapping of model and widgets names (model names just have 'model'
39 // a 1 to 1 mapping of model and widgets names (model names just have 'model'
40 // suffixed).
40 // suffixed).
41 var javascript_names = this.evaluate(function () {
41 var javascript_names = this.evaluate(function () {
42 names = [];
42 names = [];
43 for (var name in IPython.widget_manager.widget_model_types) {
43 for (var name in IPython.widget_manager.widget_model_types) {
44 names.push(name.replace('Model',''));
44 names.push(name.replace('Model',''));
45 }
45 }
46 return names;
46 return names;
47 });
47 });
48
48
49 // Get the widget names registered in python.
49 // Get the widget names registered in python.
50 var python_names = this.get_output_cell(index).text.split('\n');
50 var python_names = this.get_output_cell(index).text.split('\n');
51
51
52 // Make sure the two lists have the same items.
52 // Make sure the two lists have the same items.
53 for (var i in javascript_names) {
53 for (var i in javascript_names) {
54 var javascript_name = javascript_names[i];
54 var javascript_name = javascript_names[i];
55 var found = false;
55 var found = false;
56 for (var j in python_names) {
56 for (var j in python_names) {
57 var python_name = python_names[j];
57 var python_name = python_names[j];
58 if (python_name==javascript_name) {
58 if (python_name==javascript_name) {
59 found = true;
59 found = true;
60 break;
60 break;
61 }
61 }
62 }
62 }
63 this.test.assert(found, javascript_name + ' exists in python');
63 this.test.assert(found, javascript_name + ' exists in python');
64 }
64 }
65 for (var i in python_names) {
65 for (var i in python_names) {
66 var python_name = python_names[i];
66 var python_name = python_names[i];
67 if (python_name.length > 0) {
67 if (python_name.length > 0) {
68 var found = false;
68 var found = false;
69 for (var j in javascript_names) {
69 for (var j in javascript_names) {
70 var javascript_name = javascript_names[j];
70 var javascript_name = javascript_names[j];
71 if (python_name==javascript_name) {
71 if (python_name==javascript_name) {
72 found = true;
72 found = true;
73 break;
73 break;
74 }
74 }
75 }
75 }
76 this.test.assert(found, python_name + ' exists in javascript');
76 this.test.assert(found, python_name + ' exists in javascript');
77 }
77 }
78 }
78 }
79 });
79 });
80
80
81
81
82 // Test bool widget ////////////////////////////////////////////////////////
82 // Test bool widget ////////////////////////////////////////////////////////
83 var bool_index = this.append_cell(
83 var bool_index = this.append_cell(
84 'bool_widget = widgets.BoolWidget(description="Title", value=True)\n' +
84 'bool_widget = widgets.BoolWidget(description="Title", value=True)\n' +
85 'display(bool_widget)\n'+
85 'display(bool_widget)\n'+
86 'display(bool_widget, view_name="ToggleButtonView")\n' +
86 'display(bool_widget, view_name="ToggleButtonView")\n' +
87 'print("Success")');
87 'print("Success")');
88 this.execute_cell_then(bool_index, function(index){
88 this.execute_cell_then(bool_index, function(index){
89
89
90 var button_output = this.get_output_cell(index).text;
90 var button_output = this.get_output_cell(index).text;
91 this.test.assert(button_output == 'Success\n',
91 this.test.assert(button_output == 'Success\n',
92 'Create bool widget cell executed with correct output.');
92 'Create bool widget cell executed with correct output.');
93
93
94 this.test.assert(this.cell_element_exists(index,
94 this.test.assert(this.cell_element_exists(index,
95 '.widget-area .widget-subarea'),
95 '.widget-area .widget-subarea'),
96 'Widget subarea exists.');
96 'Widget subarea exists.');
97
97
98 this.test.assert(this.cell_element_exists(index,
98 this.test.assert(this.cell_element_exists(index,
99 '.widget-area .widget-subarea .widget-hbox-single input'),
99 '.widget-area .widget-subarea .widget-hbox-single input'),
100 'Checkbox exists.');
100 'Checkbox exists.');
101
101
102 this.test.assert(this.cell_element_function(index,
102 this.test.assert(this.cell_element_function(index,
103 '.widget-area .widget-subarea .widget-hbox-single input', 'val')==true,
103 '.widget-area .widget-subarea .widget-hbox-single input', 'prop', ['checked']),
104 'Checkbox is checked.');
104 'Checkbox is checked.');
105
105
106 this.test.assert(this.cell_element_exists(index,
106 this.test.assert(this.cell_element_exists(index,
107 '.widget-area .widget-subarea .widget-hbox-single .widget-hlabel'),
107 '.widget-area .widget-subarea .widget-hbox-single .widget-hlabel'),
108 'Checkbox label exists.');
108 'Checkbox label exists.');
109
109
110 this.test.assert(this.cell_element_function(index,
110 this.test.assert(this.cell_element_function(index,
111 '.widget-area .widget-subarea .widget-hbox-single .widget-hlabel', 'html')=="Title",
111 '.widget-area .widget-subarea .widget-hbox-single .widget-hlabel', 'html')=="Title",
112 'Checkbox labeled correctly.');
112 'Checkbox labeled correctly.');
113
113
114 this.test.assert(this.cell_element_exists(index,
114 this.test.assert(this.cell_element_exists(index,
115 '.widget-area .widget-subarea div button'),
115 '.widget-area .widget-subarea div button'),
116 'Toggle button exists.');
116 'Toggle button exists.');
117
117
118 this.test.assert(this.cell_element_function(index,
118 this.test.assert(this.cell_element_function(index,
119 '.widget-area .widget-subarea div button', 'html')=="Title",
119 '.widget-area .widget-subarea div button', 'html')=="Title",
120 'Toggle button labeled correctly.');
120 'Toggle button labeled correctly.');
121
121
122 this.test.assert(this.cell_element_function(index,
122 this.test.assert(this.cell_element_function(index,
123 '.widget-area .widget-subarea div button', 'hasClass', ['active']),
123 '.widget-area .widget-subarea div button', 'hasClass', ['active']),
124 'Toggle button is toggled.');
124 'Toggle button is toggled.');
125
125
126 });
126 });
127
127
128 index = this.append_cell(
129 'bool_widget.value = False\n' +
130 'print("Success")');
131 this.execute_cell_then(index, function(index){
132
133 var button_output = this.get_output_cell(index).text;
134 this.test.assert(button_output == 'Success\n',
135 'Change bool widget value cell executed with correct output.');
136
137 this.test.assert(!this.cell_element_function(bool_index,
138 '.widget-area .widget-subarea .widget-hbox-single input', 'prop', ['checked']),
139 'Checkbox is not checked. (1)');
140
141 this.test.assert(!this.cell_element_function(bool_index,
142 '.widget-area .widget-subarea div button', 'hasClass', ['active']),
143 'Toggle button is not toggled. (1)');
144
145 // Try toggling the bool by clicking on the toggle button.
146 this.cell_element_function(bool_index, '.widget-area .widget-subarea div button', 'click');
147
148 this.test.assert(this.cell_element_function(bool_index,
149 '.widget-area .widget-subarea .widget-hbox-single input', 'prop', ['checked']),
150 'Checkbox is checked. (2)');
151
152 this.test.assert(this.cell_element_function(bool_index,
153 '.widget-area .widget-subarea div button', 'hasClass', ['active']),
154 'Toggle button is toggled. (2)');
155
156 // Try toggling the bool by clicking on the checkbox.
157 this.cell_element_function(bool_index, '.widget-area .widget-subarea .widget-hbox-single input', 'click');
158
159 this.test.assert(!this.cell_element_function(bool_index,
160 '.widget-area .widget-subarea .widget-hbox-single input', 'prop', ['checked']),
161 'Checkbox is not checked. (3)');
162
163 this.test.assert(!this.cell_element_function(bool_index,
164 '.widget-area .widget-subarea div button', 'hasClass', ['active']),
165 'Toggle button is not toggled. (3)');
166
167 });
168
128 // Test button widget //////////////////////////////////////////////////////
169 // Test button widget //////////////////////////////////////////////////////
129 var button_index = this.append_cell(
170 var button_index = this.append_cell(
130 'button = widgets.ButtonWidget(description="Title")\n' +
171 'button = widgets.ButtonWidget(description="Title")\n' +
131 'display(button)\n'+
172 'display(button)\n'+
132 'print("Success")\n' +
173 'print("Success")\n' +
133 'def handle_click(sender):\n' +
174 'def handle_click(sender):\n' +
134 ' print("Clicked")\n' +
175 ' print("Clicked")\n' +
135 'button.on_click(handle_click)');
176 'button.on_click(handle_click)');
136 this.execute_cell_then(button_index, function(index){
177 this.execute_cell_then(button_index, function(index){
137
178
138 var button_output = this.get_output_cell(index).text;
179 var button_output = this.get_output_cell(index).text;
139 this.test.assert(button_output == 'Success\n',
180 this.test.assert(button_output == 'Success\n',
140 'Create button cell executed with correct output.');
181 'Create button cell executed with correct output.');
141
182
142 this.test.assert(this.cell_element_exists(index,
183 this.test.assert(this.cell_element_exists(index,
143 '.widget-area .widget-subarea'),
184 '.widget-area .widget-subarea'),
144 'Widget subarea exists.');
185 'Widget subarea exists.');
145
186
146 this.test.assert(this.cell_element_exists(index,
187 this.test.assert(this.cell_element_exists(index,
147 '.widget-area .widget-subarea button'),
188 '.widget-area .widget-subarea button'),
148 'Widget button exists.');
189 'Widget button exists.');
149
190
150 this.test.assert(this.cell_element_function(index,
191 this.test.assert(this.cell_element_function(index,
151 '.widget-area .widget-subarea button', 'html')=='Title',
192 '.widget-area .widget-subarea button', 'html')=='Title',
152 'Set button description.');
193 'Set button description.');
153
194
154 this.cell_element_function(index,
195 this.cell_element_function(index,
155 '.widget-area .widget-subarea button', 'click');
196 '.widget-area .widget-subarea button', 'click');
156 });
197 });
157
198
158 this.wait(500); // Wait for click to execute in kernel and write output
199 this.wait(500); // Wait for click to execute in kernel and write output
159
200
160 this.then(function () {
201 this.then(function () {
161 this.test.assert(this.get_output_cell(button_index, 1).text == 'Clicked\n',
202 this.test.assert(this.get_output_cell(button_index, 1).text == 'Clicked\n',
162 'Button click event fires.');
203 'Button click event fires.');
163 });
204 });
164
205
165 index = this.append_cell(
206 index = this.append_cell(
166 'button.close()\n'+
207 'button.close()\n'+
167 'print("Success")\n');
208 'print("Success")\n');
168 this.execute_cell_then(index, function(index){
209 this.execute_cell_then(index, function(index){
169
210
170 var button_output = this.get_output_cell(index).text;
211 var button_output = this.get_output_cell(index).text;
171 this.test.assert(button_output == 'Success\n',
212 this.test.assert(button_output == 'Success\n',
172 'Close button cell executed with correct output.');
213 'Close button cell executed with correct output.');
173
214
174 this.test.assert(! this.cell_element_exists(button_index,
215 this.test.assert(! this.cell_element_exists(button_index,
175 '.widget-area .widget-subarea button'),
216 '.widget-area .widget-subarea button'),
176 'Widget button doesn\'t exists.');
217 'Widget button doesn\'t exists.');
177 });
218 });
178 });
219 });
179
220
General Comments 0
You need to be logged in to leave comments. Login now