From 4f1e03f1147b9a50566df064db72522a130f8135 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Thu, 4 Jun 2015 12:32:36 -0700 Subject: [PATCH] fix(dateparser): add type and validity check - Add type and validity check to ensure proper date object is created - Make code style uniform in scripts - Add warning if the string is not a valid date Closes #3701 Closes #3759 Closes #3933 Fixes #3609 Fixes #3713 Fixes #3736 Fixes #3875 Fixes #3937 Fixes #3976 --- src/dateparser/dateparser.js | 7 +++++-- src/dateparser/test/dateparser.spec.js | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/dateparser/dateparser.js b/src/dateparser/dateparser.js index eb323623b6..9a44c3bb47 100644 --- a/src/dateparser/dateparser.js +++ b/src/dateparser/dateparser.js @@ -1,6 +1,6 @@ angular.module('ui.bootstrap.dateparser', []) -.service('dateParser', ['$locale', 'orderByFilter', function($locale, orderByFilter) { +.service('dateParser', ['$log', '$locale', 'orderByFilter', function($log, $locale, orderByFilter) { // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js var SPECIAL_CHARACTERS_REGEXP = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; @@ -125,7 +125,7 @@ angular.module('ui.bootstrap.dateparser', []) if ( results && results.length ) { var fields, dt; - if (baseDate) { + if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) { fields = { year: baseDate.getFullYear(), month: baseDate.getMonth(), @@ -136,6 +136,9 @@ angular.module('ui.bootstrap.dateparser', []) milliseconds: baseDate.getMilliseconds() }; } else { + if (baseDate) { + $log.warn('dateparser:', 'baseDate is not a valid date'); + } fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 }; } diff --git a/src/dateparser/test/dateparser.spec.js b/src/dateparser/test/dateparser.spec.js index 7ed6bb0e58..37c2bc972a 100644 --- a/src/dateparser/test/dateparser.spec.js +++ b/src/dateparser/test/dateparser.spec.js @@ -162,6 +162,14 @@ describe('date parser', function () { expect(dateParser.parse('31-04-2013', 'dd-MM-yyyy')).toBeUndefined(); expect(dateParser.parse('November 31, 2013', 'MMMM d, yyyy')).toBeUndefined(); }); + + it('should work when base date is a string', function() { + expect(dateParser.parse('01-02-2034', 'dd-MM-yyyy', '05-06-2078')).toEqual(new Date(2034, 1, 1)); + }); + + it('should work when base date is an invalid date', function() { + expect(dateParser.parse('30-12-2015', 'dd-MM-yyyy', new Date('foo'))).toEqual(new Date(2015, 11, 30)); + }); }); it('should not parse non-string inputs', function() {