From c4bea5d82b6a2a3d976e00584e6d0babc3479677 Mon Sep 17 00:00:00 2001 From: Damyan Petev Date: Wed, 26 Sep 2018 14:55:44 +0300 Subject: [PATCH 1/2] fix(date-picker): prevent parsing invalid date produced with IME input --- src/js/modules/infragistics.ui.editors.js | 4 +-- tests/unit/editors/Bugs/bugs-test.js | 33 ++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/js/modules/infragistics.ui.editors.js b/src/js/modules/infragistics.ui.editors.js index 4e634ceba..63634146e 100644 --- a/src/js/modules/infragistics.ui.editors.js +++ b/src/js/modules/infragistics.ui.editors.js @@ -8396,8 +8396,8 @@ dateObj = this._getDateOffset(dateObj); } - // TODO update all the fields - if (dateObj) { + // D.P. 26th Sep 2018 #1695 Uncaught TypeError w/ IME numbers, don't parse invalid date: + if (dateObj && dateObj.getTime() === dateObj.getTime()) { if (this._dateIndices.yy !== undefined) { year = this._getDateField("FullYear", dateObj).toString(); if (this._dateIndices.fourDigitYear) { diff --git a/tests/unit/editors/Bugs/bugs-test.js b/tests/unit/editors/Bugs/bugs-test.js index 1c749cc47..6c9cb87d8 100644 --- a/tests/unit/editors/Bugs/bugs-test.js +++ b/tests/unit/editors/Bugs/bugs-test.js @@ -1701,4 +1701,35 @@ QUnit.test('Bug 256852: textChanged not fired on Safari on MacOS (Grid filtering $editor.remove(); done(); }); -}); \ No newline at end of file +}); +QUnit.test('Bug 1695 Uncaught TypeError is thrown when IME is enabled and a number is typed', function (assert) { + assert.expect(4); + var done = assert.async(), + $editor = this.util.appendToFixture(this.inputTag).igDatePicker({ + regional: "ja", + dataMode:"editModeText" + }), + textChangedArgs = []; + $editor.trigger("focus"); + $editor.on("igdatepickertextchanged", function (evt, args) { + textChangedArgs.push(args); + }); + $editor[0].setSelectionRange(0, 0); + $.ig.TestUtil.keyDownChar(50, $editor); + $editor.trigger(jQuery.Event("compositionstart")); + $editor.trigger(jQuery.Event("compositionupdate")); + $editor.val("2" + $editor.val()); + $.ig.TestUtil.keyUpChar(50, $editor); + assert.ok(true, "Text change processing did not throw."); + assert.equal(textChangedArgs.length, 1, "textChanged should be triggered"); + assert.equal(textChangedArgs.pop().text, "2____/__/__", "textChanged arg should be correct"); + $editor[0].setSelectionRange(1, 1); + $editor.trigger(jQuery.Event("compositionend")); + $.ig.TestUtil.wait(0) //composition handlers + .then(function () { + assert.equal($editor.val(), "2___/__/__", "IME value not converted and applied to mask."); + $editor.off("igdatepickertextchanged"); + $editor.remove(); + done(); + }); +}); // Bug 1695 From 793e13e0a77532cc692356bbe30d1cb2a8effd8c Mon Sep 17 00:00:00 2001 From: Damyan Petev Date: Wed, 26 Sep 2018 14:58:36 +0300 Subject: [PATCH 2/2] fix(numeric-editors): fix IME number conversion --- src/js/modules/infragistics.ui.editors.js | 2 +- .../numericEditor/numericEditor-test.js | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/js/modules/infragistics.ui.editors.js b/src/js/modules/infragistics.ui.editors.js index 63634146e..9fb68f04c 100644 --- a/src/js/modules/infragistics.ui.editors.js +++ b/src/js/modules/infragistics.ui.editors.js @@ -5031,7 +5031,7 @@ // In case of IME input digits we need to convert // value = $.ig.util.replaceJpToEnNumbers(value); - value = $.ig.util.IMEtoNumberString(value, $.ig.util.IMEtoENNumbersMapping); + value = $.ig.util.IMEtoNumberString(value, $.ig.util.IMEtoENNumbersMapping()); // D.P. 27th Oct 2015 Bug 208296: Don't replace group separator on actual numbers as it can be '.' value = value.toString().replace(new RegExp($.ig.util.escapeRegExp(groupSeparator), "g"), ""); // TODO VERIFY Remove group separator cause parseInt("1,000") returns 1? diff --git a/tests/unit/editors/numericEditor/numericEditor-test.js b/tests/unit/editors/numericEditor/numericEditor-test.js index 5b6cb4371..9cbc1425b 100644 --- a/tests/unit/editors/numericEditor/numericEditor-test.js +++ b/tests/unit/editors/numericEditor/numericEditor-test.js @@ -2791,3 +2791,25 @@ QUnit.test('Numeric Editor Scrollbar maintains scroll position after animation', done(); }); }); +QUnit.test('IME input numbers', function (assert) { + assert.expect(2); + var done = assert.async(), + $editor = this.util.appendToFixture(this.inputTag).igNumericEditor(); + $editor.trigger("focus"); + $editor[0].setSelectionRange(0, 0); + $.ig.TestUtil.keyDownChar(50, $editor); + $editor.trigger(jQuery.Event("compositionstart")); + $editor.trigger(jQuery.Event("compositionupdate")); + $editor.val("2"); + $.ig.TestUtil.keyUpChar(50, $editor); + $editor[0].setSelectionRange(1, 1); + $editor.trigger(jQuery.Event("compositionend")); + $.ig.TestUtil.wait(0) //composition handlers + .then(function () { + $editor.trigger("blur"); + assert.equal($editor.val(), "2", "IME text not converted and applied to mask."); + assert.strictEqual($editor.igNumericEditor("value"), 2, "Value after IME not correct"); + $editor.remove(); + done(); + }); +}); // IME input numbers