UNPKG

patternfly

Version:

This reference implementation of PatternFly is based on [Bootstrap v3](http://getbootstrap.com/). Think of PatternFly as a "skinned" version of Bootstrap with additional components and customizations.

324 lines (241 loc) 13.4 kB
$(function () { module("bootstrap-combobox") test("should be defined on jquery object", function () { ok($(document.body).combobox, 'combobox method is defined') }) test("should return element", function () { var $select = $('<select />') ok($($select).combobox()[0] == $select[0], 'select returned') }) test("should build combobox from a select", function() { var $select = $('<select />') $select.combobox() ok($select.data('combobox').$source, 'has a source select') ok($select.data('combobox').$container, 'has a container') ok($select.data('combobox').$element, 'has a input element') ok($select.data('combobox').$button, 'has a button') ok($select.data('combobox').$target, 'has a target') }) test("should listen to an input", function () { var $select = $('<select />') , combobox = $select.combobox().data('combobox') , $input = combobox.$element ok($._data($input[0], 'events').blur, 'has a blur event') ok($._data($input[0], 'events').keypress, 'has a keypress event') ok($._data($input[0], 'events').keyup, 'has a keyup event') if (combobox.eventSupported('keydown')) { ok($._data($input[0], 'events').keydown, 'has a keydown event') } else { ok($._data($input[0], 'events').keydown, 'does not have a keydown event') } combobox.$menu.remove() }) test("should listen to an button", function () { var $select = $('<select />') , $button = $select.combobox().data('combobox').$button ok($._data($button[0], 'events').click, 'has a click event') }) test("should create a menu", function () { var $select = $('<select />') ok($select.combobox().data('combobox').$menu, 'has a menu') }) test("should listen to the menu", function () { var $select = $('<select />') , $menu = $select.combobox().data('combobox').$menu ok($._data($menu[0], 'events').mouseover, 'has a mouseover(pseudo: mouseenter)') ok($._data($menu[0], 'events').click, 'has a click') }) test("should show menu when query entered", function () { var $select = $('<select><option></option><option value="aa">aa</option><option value="ab">ab</option><option value="ac">ac</option></select>').appendTo('body') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') $input.val('a') combobox.lookup() ok(combobox.$menu.is(":visible"), 'menu is visible') equal(combobox.$menu.find('li').length, 3, 'has 3 items in menu') equal(combobox.$menu.find('.active').length, 1, 'one item is active') combobox.$menu.remove() $select.remove() combobox.$container.remove() }) test("should hide menu when query entered", function () { stop() var $select = $('<select><option></option><option value="aa">aa</option><option value="ab">ab</option><option value="ac">ac</option></select>').appendTo('body') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') $input.val('a') combobox.lookup() ok(combobox.$menu.is(":visible"), 'menu is visible') equal(combobox.$menu.find('li').length, 3, 'has 3 items in menu') equal(combobox.$menu.find('.active').length, 1, 'one item is active') $input.blur() setTimeout(function () { ok(!combobox.$menu.is(":visible"), "menu is no longer visible") start() }, 200) combobox.$menu.remove() $select.remove() combobox.$container.remove() }) test("should set next item when down arrow is pressed", function () { var $select = $('<select><option></option><option>aa</option><option>ab</option><option>ac</option></select>').appendTo('body') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') $input.val('a') combobox.lookup() ok(combobox.$menu.is(":visible"), 'menu is visible') equal(combobox.$menu.find('li').length, 3, 'has 3 items in menu') equal(combobox.$menu.find('.active').length, 1, 'one item is active') ok(combobox.$menu.find('li').first().hasClass('active'), "first item is active") $input.trigger({ type: 'keypress' , keyCode: 40 }) ok(combobox.$menu.find('li').first().next().hasClass('active'), "second item is active") $input.trigger({ type: 'keypress' , keyCode: 38 }) ok(combobox.$menu.find('li').first().hasClass('active'), "first item is active") combobox.$menu.remove() $select.remove() combobox.$container.remove() }) test("should set input and select value to selected item", function () { var $select = $('<select><option></option><option>aa</option><option>ab</option><option>ac</option></select>').appendTo('body') , combobox = $select.combobox().data('combobox') , $input = combobox.$element , $source = combobox.$source , $target = combobox.$target $input.val('a') combobox.lookup() $(combobox.$menu.find('li')[2]).mouseover().click() equal($input.val(), 'ac', 'input value was correctly set') equal($source.val(), 'ac', 'select value was correctly set') equal($target.val(), 'ac', 'hidden field value was correctly set') ok(!combobox.$menu.is(':visible'), 'the menu was hidden') combobox.$menu.remove() $select.remove() combobox.$container.remove() }) test("should show menu when no item is selected and button is clicked", function () { var $select = $('<select><option></option><option>aa</option><option>ab</option><option>ac</option></select>').appendTo('body') , $button = $select.combobox().data('combobox').$button , combobox = $select.data('combobox') $button.click() ok(combobox.$menu.is(":visible"), 'menu is visible') equal(combobox.$menu.find('li').length, 3, 'has 3 items in menu') equal(combobox.$menu.find('.active').length, 1, 'one item is active') combobox.$menu.remove() $select.remove() combobox.$container.remove() }) test("should add class to container when an item is selected", function () { var $select = $('<select><option></option><option>aa</option><option>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') $input.val('a') combobox.lookup() $(combobox.$menu.find('li')[2]).mouseover().click() ok(combobox.$container.hasClass('combobox-selected'), 'container has selected class') combobox.$menu.remove() }) test("should clear and focus input and select and remove class from container when button is clicked when item is selected", function () { var $select = $('<select><option></option><option>aa</option><option>ab</option><option>ac</option></select>') , combobox = $select.combobox().data('combobox') , $input = combobox.$element , $source = combobox.$source , $target = combobox.$target $input.val('a') combobox.lookup() $(combobox.$menu.find('li')[2]).mouseover().click() equal($input.val(), 'ac', 'input value was correctly set') equal($source.val(), 'ac', 'select value was correctly set') equal($target.val(), 'ac', 'hidden field value was correctly set') combobox.$button.mouseover().click() equal($input.val(), '', 'input value was cleared correctly') equal($select.val(), '', 'select value was cleared correctly') // ok($input.is(":focus"), 'input has focus') combobox.$menu.remove() }) test("should set as selected if select was selected before load", function () { var $select = $('<select><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , $target = $select.combobox().data('combobox').$target , combobox = $select.data('combobox') equal($input.val(), 'ab', 'input value was correctly set') equal($target.val(), 'ab', 'hidden input value was correctly set') equal($select.val(), 'ab', 'select value was correctly set') }) test("should clear input on blur when value does not exist", function() { var $select = $('<select><option>aa</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') $input.val('DOES NOT EXIST') $input.trigger('keyup') $input.trigger('blur') equal($input.val(), '', 'input value was correctly set') equal($select.val(), 'aa', 'select value was correctly set') combobox.$menu.remove() }) test("should set placeholder text on the input if specified text of no value option", function() { var $select = $('<select><option value="">Pick One</option><option value="aa">aa</option><option value="ab">ab</option><option value="ac">ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') equal($input.attr('placeholder'), 'Pick One', 'input value was correctly set') combobox.$menu.remove() }) test("should set placeholder text on the input if specified as an data attribute", function() { var $select = $('<select data-placeholder="Type something..."><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') equal($input.attr('placeholder'), 'Type something...', 'input value was correctly set') combobox.$menu.remove() }) test("should set required attribute the input if specified on the select", function() { var $select = $('<select required="required"><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') equal($input.attr('required'), 'required', 'required was correctly set') combobox.$menu.remove() }) test("should copy classes to the input if specified on the select", function() { var $select = $('<select class="input-small"><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') equal($input.attr('class'), 'input-small', 'class was correctly set') combobox.$menu.remove() }) test("should copy rel attribute to the input if specified on the select", function() { var $select = $('<select rel="tooltip"><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') equal($input.attr('rel'), 'tooltip', 'rel was correctly set') combobox.$menu.remove() }) test("should copy title attribute to the input if specified on the select", function() { var $select = $('<select title="A title"><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') equal($input.attr('title'), 'A title', 'title was correctly set') combobox.$menu.remove() }) test("should use bootstrap 2 classes if bsVersion option is set to '2'", function() { var $select = $('<select title="A title"><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox({bsVersion: '2'}).data('combobox').$element , combobox = $select.data('combobox') ok($input.parent('.input-append').length > 0) ok($input.siblings('span.add-on').length > 0) ok($input.siblings('span.add-on').children('i.icon-remove').length > 0) combobox.$menu.remove() }) test("should respect disabled attribute", function() { var $select = $('<select title="A title" disabled><option></option><option>aa</option><option selected>ab</option><option>ac</option></select>') , $input = $select.combobox().data('combobox').$element , combobox = $select.data('combobox') equal($input.prop('disabled'), true) equal(combobox.$button.attr('disabled'), "disabled") equal(combobox.disabled, true) combobox.$menu.remove() }) })