diff --git a/src/inputs/typeahead.js b/src/inputs/typeahead.js
index 1e5c5d4..69e5edf 100644
--- a/src/inputs/typeahead.js
+++ b/src/inputs/typeahead.js
@@ -89,8 +89,8 @@ $(function(){
},
/*
- if in sourceData values <> texts, put typeahead in "objects" mode:
- user must pick some value from list
+ if in sourceData values <> texts, typeahead in "objects" mode:
+ user must pick some value from list, otherwise `null` returned.
if all values == texts put typeahead in "strings" mode:
anything what entered is submited.
*/
diff --git a/test/main.js b/test/main.js
index 0863c1c..f0ecdc5 100644
--- a/test/main.js
+++ b/test/main.js
@@ -31,7 +31,11 @@ require(["loader", jqurl], function(loader) {
switch(params.f) {
case 'bootstrap':
- custom = ['test/unit/datefield', 'test/unit/date', 'test/unit/wysihtml5'];
+ custom = ['test/unit/datefield',
+ 'test/unit/date',
+ 'test/unit/wysihtml5',
+ 'test/unit/typeahead'
+ ];
break;
default:
diff --git a/test/unit/typeahead.js b/test/unit/typeahead.js
new file mode 100644
index 0000000..260e940
--- /dev/null
+++ b/test/unit/typeahead.js
@@ -0,0 +1,122 @@
+$(function () {
+
+ module("typeahead", {
+ setup: function(){
+ sfx = $('#qunit-fixture'),
+ fx = $('#async-fixture');
+ $.support.transition = false;
+ }
+ });
+
+ asyncTest("should load correct value and save new entered text (source as objects)", function () {
+ var v = 2,
+ e = $('').appendTo(fx).editable({
+ source: groups,
+ typeahead: {
+ items: 5
+ }
+ }),
+ newText = 'adm';
+
+
+ equal(e.text(), groups[v], 'autotext ok');
+ equal(e.data().editable.value, v, 'initial value ok');
+
+ e.click();
+ var p = tip(e),
+ $input = p.find('input[type=text]');
+
+ ok(p.is(':visible'), 'popup visible');
+ ok($input.length, 'input exists');
+ equal($input.val(), groups[v], 'input contain correct text');
+ equal($input.data('value'), v, 'input contain correct data-value');
+ ok($input.typeahead, 'typeahead applied to input');
+
+ $input.val(newText).keyup();
+ ok(p.find('.typeahead.dropdown-menu').is(':visible'), 'dropdown visible');
+
+ //select `Admin`
+ v = 5;
+ p.find('.typeahead.dropdown-menu').find('.active').click();
+
+ equal($input.val(), groups[v], 'input contain correct text');
+ p.find('form').submit();
+
+ setTimeout(function() {
+ ok(!p.is(':visible'), 'popup closed');
+ equal(e.data('editable').value, v, 'new text saved to value');
+ equal(e.text(), groups[v], 'new text shown');
+
+ e.click();
+ p = tip(e),
+ $input = p.find('input[type=text]');
+
+ $input.val('not_matched_text').keyup();
+ ok(!p.find('.typeahead.dropdown-menu').is(':visible'), 'dropdown not visible');
+
+ p.find('form').submit();
+ setTimeout(function() {
+ equal(e.data('editable').value, null, 'null saved to value');
+ equal(e.text(), e.data().editable.options.emptytext, 'emptytext shown');
+
+ e.remove();
+ start();
+ }, timeout);
+ }, timeout);
+ });
+
+
+ asyncTest("should load correct value and save new entered text (source as strings)", function () {
+ var v = 'a',
+ e = $('').appendTo(fx).editable({
+ source: ['a', 'ab', 'c']
+ });
+
+
+ equal(e.text(), v, 'autotext ok');
+ equal(e.data().editable.value, v, 'initial value ok');
+
+ e.click();
+ var p = tip(e),
+ $input = p.find('input[type=text]');
+
+ ok(p.is(':visible'), 'popup visible');
+ ok($input.length, 'input exists');
+ equal($input.val(), v, 'input contain correct text');
+ equal($input.data('value'), undefined, 'input not contain data-value');
+ ok($input.typeahead, 'typeahead applied to input');
+
+ $input.val('b').keyup();
+ ok(p.find('.typeahead.dropdown-menu').is(':visible'), 'dropdown visible');
+
+ //select `ab`
+ v = 'ab';
+ p.find('.typeahead.dropdown-menu').find('.active').click();
+
+ equal($input.val(), v, 'input contain correct text');
+ p.find('form').submit();
+
+ setTimeout(function() {
+ ok(!p.is(':visible'), 'popup closed');
+ equal(e.data('editable').value, v, 'new text saved to value');
+ equal(e.text(), v, 'new text shown');
+
+ e.click();
+ p = tip(e),
+ $input = p.find('input[type=text]');
+
+ v = 'not_matched_text';
+ $input.val(v).keyup();
+ ok(!p.find('.typeahead.dropdown-menu').is(':visible'), 'dropdown not visible');
+
+ p.find('form').submit();
+ setTimeout(function() {
+ equal(e.data('editable').value, v, 'new text saved to value');
+ equal(e.text(), v, 'new text shown');
+ e.remove();
+ start();
+ }, timeout);
+ }, timeout);
+ });
+
+});
\ No newline at end of file