fuelux
Version:
Base Fuel UX styles and controls
212 lines (162 loc) • 7.18 kB
JavaScript
/*global QUnit:false, module:false, test:false, asyncTest:false, expect:false*/
/*global start:false, stop:false ok:false, equal:false, notEqual:false, deepEqual:false*/
/*global notDeepEqual:false, strictEqual:false, notStrictEqual:false, raises:false*/
define(function(require){
var $ = require('jquery');
var html = require('text!test/markup/combobox-markup.html!strip');
/* FOR DEV TESTING - uncomment to test against index.html */
//html = require('text!index.html!strip');
html = $('<div>'+html+'</div>').find('#MyComboboxContainer');
require('bootstrap');
require('fuelux/combobox');
module("Fuel UX Combobox");
test("should be defined on jquery object", function () {
ok($().combobox, 'combobox method is defined');
});
test("should return element", function () {
var $combobox = $(html).find("#MyCombobox");
ok($combobox.combobox() === $combobox , 'combobox should be initialized');
});
test("should disable dropdown menu if no items exists", function () {
var $combobox = $(html).find('#MyComboboxSingleItem').combobox();
equal($combobox.find('.btn').hasClass('disabled'), true, 'dropdown disabled');
});
test("should set disabled state", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('disable');
equal($combobox.find('.btn').hasClass('disabled'), true, 'element disabled');
});
test("should set enabled state", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('disable');
$combobox.combobox('enable');
equal($combobox.find('.btn').hasClass('disabled'), false, 'element enabled');
});
test("should set default selection", function () {
// should be "Three" based on the data-selected attribute
var $combobox = $(html).find("#MyComboboxWithSelected").combobox();
var item = $combobox.combobox('selectedItem');
var expectedItem = { text: 'Three', value: 3 };
deepEqual(item, expectedItem, 'default item selected');
});
test("should not autoselect when no default selection", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
var item = $combobox.combobox('selectedItem');
var expectedItem = { text: '' };
deepEqual(item, expectedItem, 'no item selected');
});
test("should return selectedItem", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectByIndex', 0);
var item = $combobox.combobox('selectedItem');
var expectedItem = { text: 'One', value: 1 };
deepEqual(item, expectedItem, 'selectedItem returns expected value');
});
test("should return selectedItem", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectByIndex', 0);
var item1 = $combobox.combobox('selectedItem');
var item2 = $combobox.combobox('getValue');
deepEqual(item1, item2, 'getValue alias matches selectedItem');
});
test("should select by index", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectByIndex', 0);
var item = $combobox.combobox('selectedItem');
var expectedItem = { text: 'One', value: 1 };
deepEqual(item, expectedItem, 'item selected');
});
test("should select by value", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectByValue', 2);
var item = $combobox.combobox('selectedItem');
var expectedItem = { text: 'Two', value: 2 };
deepEqual(item, expectedItem, 'item selected');
});
test("should select by value with whitespace", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectByValue', 'Item Five');
var item = $combobox.combobox('selectedItem');
var expectedItem = { text: 'Item Five', value: 'Item Five' };
deepEqual(item, expectedItem, 'item selected');
});
test("should select by text", function() {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectByText', 'THREE');
var item = $combobox.combobox('selectedItem');
var expectedItem = { text:'Three', value: 3 };
deepEqual(item, expectedItem, 'item selected');
});
test("should select by text with whitespace", function() {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectByText', 'Item Five');
var item = $combobox.combobox('selectedItem');
var expectedItem = { text:'Item Five', value: 'Item Five' };
deepEqual(item, expectedItem, 'item selected');
});
test("should select by selector", function () {
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.combobox('selectBySelector', 'li[data-fizz=buzz]');
var item = $combobox.combobox('selectedItem');
var expectedItem = { text: 'Six', value: 6, foo: 'bar', fizz: 'buzz' };
deepEqual(item, expectedItem, 'item selected');
});
test("should fire changed event - item selected", function () {
var eventFireCount = 0;
var selectedText = '';
var selectedValue = '';
var $combobox = $(html).find("#MyCombobox").combobox().on('changed.fu.combobox', function (evt, data) {
eventFireCount++;
selectedText = data.text;
selectedValue = data.value;
});
// simulate changed event
$combobox.find('a:first').click();
equal(eventFireCount, 1, 'changed event fired once');
equal(selectedText, 'One', 'text passed in from changed event');
equal(selectedValue, 1, 'value passed in from changed event');
});
test("should fire input change event - item selected", function () {
var eventFireCount = 0;
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.find('input').on('change', function () {
eventFireCount++;
});
// simulate changed event
$combobox.find('a:first').click();
equal(eventFireCount, 1, 'change event fired once');
});
test("should fire bubblable input change event - item selected", function () {
var eventFireCount = 0;
var $combobox = $(html).find("#MyCombobox").combobox();
$combobox.on('change', 'input', function () {
eventFireCount++;
});
// simulate changed event
$combobox.find('a:first').click();
equal(eventFireCount, 1, 'change event bubbled once');
});
test("should fire changed event - input changed", function () {
var eventFireCount = 0;
var selectedText = '';
var $combobox = $(html).find("#MyCombobox").combobox().on('changed.fu.combobox', function (evt, data) {
eventFireCount++;
selectedText = data.text;
});
$combobox.find('input').val('Seven').change();
equal(eventFireCount, 1, 'changed event fired once');
equal(selectedText, 'Seven', 'text passed in from changed event');
});
test("should destroy control", function () {
var id = '#MyCombobox';
var $el = $(html).find(id).combobox();
equal(typeof( $el.combobox('destroy')) , 'string', 'returns string (markup)');
equal( $(html).find(id).length, false, 'control has been removed from DOM');
});
test("should remove whitespace", function () {
var $combobox = $(html).find("#MyComboboxWithWhiteSpace").combobox();
$combobox.combobox('selectByIndex', 0);
var item = $combobox.combobox('selectedItem');
equal(item.text, 'no whitespace', 'whitespace was removed');
});
});