##// END OF EJS Templates
Make test robust against differences in line endings...
Make test robust against differences in line endings git on Windows can change line endings on checkout, which was leading to a test failure.

File last commit:

r15282:80785047
r16745:a56cfe97
Show More
widget.js
182 lines | 6.9 KiB | application/javascript | JavascriptLexer
Jonathan Frederic
Added test for pack and unpack Model functions
r15082 var xor = function (a, b) {return !a ^ !b;};
Jonathan Frederic
Added support for RuntimeArray
r15084 var isArray = function (a) {return toString.call(a) === "[object Array]" || toString.call(a) === "[object RuntimeArray]";};
Jonathan Frederic
Added test for pack and unpack Model functions
r15082 var recursive_compare = function(a, b) {
// Recursively compare two objects.
var same = true;
same = same && !xor(a instanceof Object, b instanceof Object);
same = same && !xor(isArray(a), isArray(b));
if (same) {
if (a instanceof Object) {
Jonathan Frederic
Added test that shows the problem.
r15277 var key;
for (key in a) {
Jonathan Frederic
Added test for pack and unpack Model functions
r15082 if (a.hasOwnProperty(key) && !recursive_compare(a[key], b[key])) {
same = false;
break;
}
}
Jonathan Frederic
Added test that shows the problem.
r15277 for (key in b) {
Jonathan Frederic
Added test for pack and unpack Model functions
r15082 if (b.hasOwnProperty(key) && !recursive_compare(a[key], b[key])) {
same = false;
break;
}
}
} else {
return a === b;
}
}
return same;
Jonathan Frederic
Added test that shows the problem.
r15277 };
Jonathan Frederic
Added test for pack and unpack Model functions
r15082
Jonathan Frederic
Add basic widget.js tests
r14309 // Test the widget framework.
casper.notebook_test(function () {
Jonathan Frederic
Cleaned up utilities in widget casper js tests
r14435 var index;
Jonathan Frederic
Make widget tests use new casper util functions
r14436
Jonathan Frederic
Add basic widget.js tests
r14309 this.then(function () {
// Check if the WidgetManager class is defined.
this.test.assert(this.evaluate(function() {
MinRK
first review pass on widget tests
r14797 return IPython.WidgetManager !== undefined;
Jonathan Frederic
Add basic widget.js tests
r14309 }), 'WidgetManager class is defined');
Jonathan Frederic
Fixed casperjs widget tests...
r14350 });
Jonathan Frederic
Make widget tests use new casper util functions
r14436 index = this.append_cell(
Jonathan Frederic
Cleaned up utilities in widget casper js tests
r14435 'from IPython.html import widgets\n' +
'from IPython.display import display, clear_output\n' +
'print("Success")');
Jonathan Frederic
Make widget tests use new casper util functions
r14436 this.execute_cell_then(index);
Jonathan Frederic
Cleaned up utilities in widget casper js tests
r14435
Jonathan Frederic
Fixed casperjs widget tests...
r14350 this.then(function () {
MinRK
first review pass on widget tests
r14797 // Check if the widget manager has been instantiated.
Jonathan Frederic
Add basic widget.js tests
r14309 this.test.assert(this.evaluate(function() {
MinRK
first review pass on widget tests
r14797 return IPython.notebook.kernel.widget_manager !== undefined;
}), 'Notebook widget manager instantiated');
Jonathan Frederic
Added test for pack and unpack Model functions
r15082
// Functions that can be used to test the packing and unpacking APIs
var that = this;
var test_pack = function (input) {
var output = that.evaluate(function(input) {
var model = new IPython.WidgetModel(IPython.notebook.kernel.widget_manager, undefined);
var results = model._pack_models(input);
return results;
}, {input: input});
that.test.assert(recursive_compare(input, output),
JSON.stringify(input) + ' passed through Model._pack_model unchanged');
};
var test_unpack = function (input) {
var output = that.evaluate(function(input) {
var model = new IPython.WidgetModel(IPython.notebook.kernel.widget_manager, undefined);
var results = model._unpack_models(input);
return results;
}, {input: input});
that.test.assert(recursive_compare(input, output),
JSON.stringify(input) + ' passed through Model._unpack_model unchanged');
};
var test_packing = function(input) {
test_pack(input);
test_unpack(input);
};
Jonathan Frederic
Added test that shows the problem.
r15277 test_packing({0: 'hi', 1: 'bye'});
test_packing(['hi', 'bye']);
test_packing(['hi', 5]);
test_packing(['hi', '5']);
test_packing([1.0, 0]);
test_packing([1.0, false]);
test_packing([1, false]);
test_packing([1, false, {a: 'hi'}]);
test_packing([1, false, ['hi']]);
// Test multi-set, single touch code. First create a custom widget.
this.evaluate(function() {
var MultiSetView = IPython.DOMWidgetView.extend({
render: function(){
this.model.set('a', 1);
this.model.set('b', 2);
this.model.set('c', 3);
this.touch();
},
});
Jonathan Frederic
Fixed typo in new test
r15278 IPython.WidgetManager.register_widget_view('MultiSetView', MultiSetView);
Jonathan Frederic
Added test that shows the problem.
r15277 }, {});
});
// Try creating the multiset widget, verify that sets the values correctly.
var multiset = {};
multiset.index = this.append_cell(
'from IPython.utils.traitlets import Unicode, CInt\n' +
'class MultiSetWidget(widgets.Widget):\n' +
' _view_name = Unicode("MultiSetView", sync=True)\n' +
' a = CInt(0, sync=True)\n' +
' b = CInt(0, sync=True)\n' +
' c = CInt(0, sync=True)\n' +
Jonathan Frederic
Added a test to make sure full state was not getting sent.
r15282 ' d = CInt(-1, sync=True)\n' + // See if it sends a full state.
' def _handle_receive_state(self, sync_data):\n' +
' widgets.Widget._handle_receive_state(self, sync_data)\n'+
' self.d = len(sync_data)\n' +
Jonathan Frederic
Added test that shows the problem.
r15277 'multiset = MultiSetWidget()\n' +
'display(multiset)\n' +
'print(multiset.model_id)');
this.execute_cell_then(multiset.index, function(index) {
multiset.model_id = this.get_output_cell(index).text.trim();
});
this.wait_for_widget(multiset);
index = this.append_cell(
'print("%d%d%d" % (multiset.a, multiset.b, multiset.c))');
this.execute_cell_then(index, function(index) {
this.test.assertEquals(this.get_output_cell(index).text.trim(), '123',
'Multiple model.set calls and one view.touch update state in back-end.');
Jonathan Frederic
Add basic widget.js tests
r14309 });
Jonathan Frederic
Added a test to make sure full state was not getting sent.
r15282 index = this.append_cell(
'print("%d" % (multiset.d))');
this.execute_cell_then(index, function(index) {
this.test.assertEquals(this.get_output_cell(index).text.trim(), '3',
'Multiple model.set calls sent a partial state.');
});
Jonathan Frederic
Use wait_for_widget in widgets and string widget tests
r14995 var textbox = {};
Jonathan Frederic
Added throttling test
r14463 throttle_index = this.append_cell(
'import time\n' +
Jonathan Frederic
Renamed widgets......
r14834 'textbox = widgets.TextWidget()\n' +
Jonathan Frederic
Use waitFor instead of sleeping.
r14951 'display(textbox)\n' +
Jonathan Frederic
Added throttling test
r14463 'textbox.add_class("my-throttle-textbox")\n' +
'def handle_change(name, old, new):\n' +
' print(len(new))\n' +
' time.sleep(0.5)\n' +
MinRK
first review pass on widget tests
r14797 'textbox.on_trait_change(handle_change, "value")\n' +
Jonathan Frederic
Use wait_for_widget in widgets and string widget tests
r14995 'print(textbox.model_id)');
Jonathan Frederic
Added throttling test
r14463 this.execute_cell_then(throttle_index, function(index){
Jonathan Frederic
Use wait_for_widget in widgets and string widget tests
r14995 textbox.model_id = this.get_output_cell(index).text.trim();
Jonathan Frederic
Added throttling test
r14463
this.test.assert(this.cell_element_exists(index,
'.widget-area .widget-subarea'),
'Widget subarea exists.');
this.test.assert(this.cell_element_exists(index,
'.my-throttle-textbox'), 'Textbox exists.');
// Send 20 characters
Jonathan Frederic
Remove sleep from the following,...
r14970 this.sendKeys('.my-throttle-textbox', '....................');
Jonathan Frederic
Added throttling test
r14463 });
Jonathan Frederic
Use wait_for_widget in widgets and string widget tests
r14995 this.wait_for_widget(textbox);
this.then(function () {
MinRK
first review pass on widget tests
r14797 var outputs = this.evaluate(function(i) {
return IPython.notebook.get_cell(i).output_area.outputs;
}, {i : throttle_index});
Jonathan Frederic
Added throttling test
r14463
// Only 4 outputs should have printed, but because of timing, sometimes
// 5 outputs will print. All we need to do is verify num outputs <= 5
// because that is much less than 20.
MinRK
first review pass on widget tests
r14797 this.test.assert(outputs.length <= 5, 'Messages throttled.');
Jonathan Frederic
Added throttling test
r14463
// We also need to verify that the last state sent was correct.
MinRK
first review pass on widget tests
r14797 var last_state = outputs[outputs.length-1].text;
this.test.assertEquals(last_state, "20\n", "Last state sent when throttling.");
Jonathan Frederic
Fixed widget_manager instance test.
r14625 });
Jonathan Frederic
Added int range and int widget tests.
r14454 });