/* * widget unit tests */ (function($) { module('widget factory', { teardown: function() { delete $.ui.testWidget; } }); test('widget creation', function() { var myPrototype = { _create: function() {}, creationTest: function() {} }; $.widget('ui.testWidget', myPrototype); ok($.isFunction($.ui.testWidget), 'constructor was created'); equals('object', typeof $.ui.testWidget.prototype, 'prototype was created'); equals($.ui.testWidget.prototype._create, myPrototype._create, 'create function is copied over'); equals($.ui.testWidget.prototype.creationTest, myPrototype.creationTest, 'random function is copied over'); equals($.ui.testWidget.prototype.option, $.Widget.prototype.option, 'option method copied over from base widget'); }); test('jQuery usage', function() { expect(10); var shouldInit = false; $.widget('ui.testWidget', { getterSetterVal: 5, _create: function() { ok(shouldInit, 'init called on instantiation'); }, methodWithParams: function(param1, param2) { ok(true, 'method called via .pluginName(methodName)'); equals(param1, 'value1', 'parameter passed via .pluginName(methodName, param)'); equals(param2, 'value2', 'multiple parameter passed via .pluginName(methodName, param, param)'); return this; }, getterSetterMethod: function(val) { if (val) { this.getterSetterVal = val; } else { return this.getterSetterVal; } } }); shouldInit = true; var elem = $('
').testWidget(); shouldInit = false; var instance = elem.data('testWidget'); equals(typeof instance, 'object', 'instance stored in .data(pluginName)'); equals(instance.element[0], elem[0], 'element stored on widget'); var ret = elem.testWidget('methodWithParams', 'value1', 'value2'); equals(ret, elem, 'jQuery object returned from method call'); ret = elem.testWidget('getterSetterMethod'); equals(ret, 5, 'getter/setter can act as getter'); ret = elem.testWidget('getterSetterMethod', 30); equals(ret, elem, 'getter/setter method can be chainable'); equals(instance.getterSetterVal, 30, 'getter/setter can act as setter'); }); test('direct usage', function() { expect(9); var shouldInit = false; $.widget('ui.testWidget', { getterSetterVal: 5, _create: function() { ok(shouldInit, 'init called on instantiation'); }, methodWithParams: function(param1, param2) { ok(true, 'method called via .pluginName(methodName)'); equals(param1, 'value1', 'parameter passed via .pluginName(methodName, param)'); equals(param2, 'value2', 'multiple parameter passed via .pluginName(methodName, param, param)'); return this; }, getterSetterMethod: function(val) { if (val) { this.getterSetterVal = val; } else { return this.getterSetterVal; } } }); var elem = $('
')[0]; shouldInit = true; var instance = new $.ui.testWidget({}, elem); shouldInit = false; equals($(elem).data('testWidget'), instance, 'instance stored in .data(pluginName)'); equals(instance.element[0], elem, 'element stored on widget'); var ret = instance.methodWithParams('value1', 'value2'); equals(ret, instance, 'plugin returned from method call'); ret = instance.getterSetterMethod(); equals(ret, 5, 'getter/setter can act as getter'); instance.getterSetterMethod(30); equals(instance.getterSetterVal, 30, 'getter/setter can act as setter'); }); test('merge multiple option arguments', function() { expect(1); $.widget("ui.testWidget", { _create: function() { same(this.options, { disabled: false, option1: "value1", option2: "value2", option3: "value3", option4: { option4a: "valuea", option4b: "valueb" } }); } }); $("
").testWidget({ option1: "valuex", option2: "valuex", option3: "value3", option4: { option4a: "valuex" } }, { option1: "value1", option2: "value2", option4: { option4b: "valueb" } }, { option4: { option4a: "valuea" } }); }); test("re-init", function() { var div = $( "
" ), actions = []; $.widget( "ui.testWidget", { _create: function() { actions.push( "create" ); }, _init: function() { actions.push( "init" ); }, _setOption: function( key, value ) { actions.push( "option" + key ); } }); actions = []; div.testWidget({ foo: "bar" }); same( actions, [ "create", "init" ], "correct methods called on init" ); actions = []; div.testWidget(); same( actions, [ "init" ], "correct methods call on re-init" ); actions = []; div.testWidget({ foo: "bar" }); same( actions, [ "optionfoo", "init" ], "correct methods called on re-init with options" ); }); test(".widget() - base", function() { $.widget("ui.testWidget", { _create: function() {} }); var div = $("
").testWidget() same(div[0], div.testWidget("widget")[0]); }); test(".widget() - overriden", function() { var wrapper = $("
"); $.widget("ui.testWidget", { _create: function() {}, widget: function() { return wrapper; } }); same(wrapper[0], $("
").testWidget().testWidget("widget")[0]); }); })(jQuery);