From 9492610a9af97ec345dcec868dd78807bb1d0d3c Mon Sep 17 00:00:00 2001 From: vitalets <noginsk@rambler.ru> Date: Fri, 4 Jan 2013 17:37:22 +0400 Subject: [PATCH] datefield test ready --- src/inputs/date/date.js | 6 +- src/inputs/date/datefield.js | 19 ++++-- test/main.js | 17 +++++- test/unit/date.js | 10 +++- test/unit/datefield.js | 109 +++++++++++++++++++++++++++++++++++ 5 files changed, 148 insertions(+), 13 deletions(-) create mode 100644 test/unit/datefield.js diff --git a/src/inputs/date/date.js b/src/inputs/date/date.js index d9e0684..4d6d8b3 100644 --- a/src/inputs/date/date.js +++ b/src/inputs/date/date.js @@ -26,13 +26,13 @@ $(function(){ var Date = function (options) { this.init('date', options, Date.defaults); - this.initPicker(); + this.initPicker(options, Date.defaults); }; $.fn.editableutils.inherit(Date, $.fn.editabletypes.abstractinput); $.extend(Date.prototype, { - initPicker: function() { + initPicker: function(options, defaults) { //'format' is set directly from settings or data-* attributes //by default viewformat equals to format @@ -42,7 +42,7 @@ $(function(){ //overriding datepicker config (as by default jQuery extend() is not recursive) //since 1.4 datepicker internally uses viewformat instead of format. Format is for submit only - this.options.datepicker = $.extend({}, Date.defaults.datepicker, this.options.datepicker, { + this.options.datepicker = $.extend({}, defaults.datepicker, options.datepicker, { format: this.options.viewformat }); diff --git a/src/inputs/date/datefield.js b/src/inputs/date/datefield.js index 7177ffa..55737d7 100644 --- a/src/inputs/date/datefield.js +++ b/src/inputs/date/datefield.js @@ -7,7 +7,7 @@ Automatically shown in inline mode. var DateField = function (options) { this.init('datefield', options, DateField.defaults); - this.initPicker(); + this.initPicker(options, DateField.defaults); }; $.fn.editableutils.inherit(DateField, $.fn.editabletypes.date); @@ -28,12 +28,14 @@ Automatically shown in inline mode. this.$input.datepicker(this.options.datepicker); //need to disable original event handlers - this.$field.off('focus keyup keydown'); + this.$field.off('focus keydown'); - //shadow update value of datepicker + //update value of datepicker this.$field.keyup($.proxy(function(){ - this.$input.data('datepicker').date = this.input2value(); + this.$input.removeData('date'); + this.$input.datepicker('update'); }, this)); + }, value2str: function(value) { @@ -76,7 +78,14 @@ Automatically shown in inline mode. @default '' **/ inputclass: '', - datepicker: {autoclose: true}, + + datepicker: { + weekStart: 0, + startView: 0, + autoclose: true, + keyboardNavigation: false + }, + clear: false }); diff --git a/test/main.js b/test/main.js index f9e3e00..667c8e3 100644 --- a/test/main.js +++ b/test/main.js @@ -27,16 +27,27 @@ require(["loader", jqurl], function(loader) { }); function addTests(config) { + var date; + + switch(params.f) { + case 'bootstrap': + date = ['test/unit/datefield', 'test/unit/date']; + break; + + default: + date = ['test/unit/dateui']; + } + var tests = [ 'test/mocks', 'test/unit/common', 'test/unit/text', 'test/unit/textarea', 'test/unit/select', - 'test/unit/checklist', - (params.f === 'bootstrap') ? 'test/unit/date' : 'test/unit/dateui', - 'test/unit/api' + 'test/unit/checklist' ]; + tests = tests.concat(date); + tests.push('test/unit/api'); for(var i=0; i<tests.length-1; i++) { config.shim[tests[i+1]] = [tests[i]]; diff --git a/test/unit/date.js b/test/unit/date.js index aaf5830..f4c6929 100644 --- a/test/unit/date.js +++ b/test/unit/date.js @@ -1,13 +1,19 @@ $(function () { - var dpg, f = 'dd.mm.yyyy'; + var dpg, f = 'dd.mm.yyyy', mode; module("date", { setup: function(){ fx = $('#async-fixture'); dpg = $.fn.datepicker.DPGlobal; $.support.transition = false; - } + mode = $.fn.editable.defaults.mode; + $.fn.editable.defaults.mode = 'popup'; + }, + teardown: function() { + //restore mode + $.fn.editable.defaults.mode = mode; + } }); function frmt(date, format) { diff --git a/test/unit/datefield.js b/test/unit/datefield.js new file mode 100644 index 0000000..14f548b --- /dev/null +++ b/test/unit/datefield.js @@ -0,0 +1,109 @@ +$(function () { + + var dpg, f = 'dd.mm.yyyy', mode; + + module("datefield", { + setup: function(){ + fx = $('#async-fixture'); + dpg = $.fn.datepicker.DPGlobal; + $.support.transition = false; + + mode = $.fn.editable.defaults.mode; + $.fn.editable.defaults.mode = 'inline'; + }, + teardown: function() { + //restore mode + $.fn.editable.defaults.mode = mode; + } + }); + + function frmt(date, format) { + return dpg.formatDate(date, dpg.parseFormat(format), 'en'); + } + + asyncTest("container should contain input with value and save new entered date", function () { + + var d = '15.05.1984', + e = $('<a href="#" data-type="date" data-pk="1" data-url="post-date.php">'+d+'</a>').appendTo(fx).editable({ + format: f, + viewformat: f, + datepicker: { + weekStart: 1 + } + }), + nextD = '16.05.1984', + finalD = '17.05.1984'; + + $.mockjax({ + url: 'post-date.php', + response: function(settings) { + equal(settings.data.value, finalD, 'submitted value correct'); + } + }); + + equal(frmt(e.data('editable').value, 'dd.mm.yyyy'), d, 'value correct'); + + e.click(); + var p = tip(e); + ok(p.find('input').is(':visible'), 'input exists'); + + equal(p.find('input').val(), d, 'date set correct'); + + //open picker + p.find('span').click(); + var picker = p.find('span').parent().data().datepicker.picker; + + ok(picker.is(':visible'), 'picker shown'); + ok(picker.find('td.day.active').is(':visible'), 'active day is visible'); + equal(picker.find('td.day.active').text(), 15, 'day shown correct'); + equal(picker.find('th.dow').eq(0).text(), 'Mo', 'weekStart correct'); + + //set new day by picker + picker.find('td.day.active').next().click(); + ok(!picker.is(':visible'), 'picker closed'); + + equal(p.find('input').val(), nextD, 'next day set correct'); + + p.find('input').val(finalD).trigger('keyup'); + + equal(picker.find('td.day.active').text(), 17, 'picker active date updated'); + + //submit + p.find('form').submit(); + + setTimeout(function() { + ok(!p.is(':visible'), 'popover closed'); + ok(!picker.is(':visible'), 'picker closed'); + equal(frmt(e.data('editable').value, f), finalD, 'new date saved to value'); + equal(e.text(), finalD, 'new text shown'); + e.remove(); + start(); + }, timeout); + + }); + + + test("viewformat, init by text", function () { + + var dview = '15/05/1984', + d = '1984-05-15', + e = $('<a href="#" data-type="date" data-pk="1" data-url="post-date1.php">'+dview+'</a>').appendTo('#qunit-fixture').editable({ + format: 'yyyy-mm-dd', + viewformat: 'dd/mm/yyyy' + }), + nextD = '1984-05-16', + nextDview = '16/05/1984'; + + equal(frmt(e.data('editable').value, 'yyyy-mm-dd'), d, 'value correct'); + }); + + test("viewformat, init by value", function () { + var dview = '15/05/1984', + d = '1984-05-15', + e = $('<a href="#" data-type="date" data-pk="1" data-format="yyyy-mm-dd" data-viewformat="dd/mm/yyyy" data-value="'+d+'"></a>').appendTo('#qunit-fixture').editable(); + + equal(frmt(e.data('editable').value, 'yyyy-mm-dd'), d, 'value correct'); + equal(e.text(), dview, 'text correct'); + }); + +}); \ No newline at end of file