]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Fix #3985 code review changes
authorPetr Potekhin <PotekhinPA@gmail.com>
Thu, 20 Jul 2017 20:27:50 +0000 (23:27 +0300)
committerIskren Chernev <iskren.chernev@gmail.com>
Mon, 7 Aug 2017 01:09:46 +0000 (04:09 +0300)
src/lib/create/from-string.js
src/test/locale/ru.js
src/test/moment/create.js

index 6f7af0cc205beb69e2285293544d920fb65c7800..d7081e0854eb20ea1fb06b7031a23e7dc2ee1d6e 100644 (file)
@@ -100,23 +100,29 @@ export function configFromISO(config) {
 var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;
 
 function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
-    var result = {
-        year: yearStr.length === 2 ? untrucateYear(parse10(yearStr)) : parse10(yearStr),
-        month: defaultLocaleMonthsShort.indexOf(monthStr),
-        day: parse10(dayStr),
-        hour: parse10(hourStr),
-        minute: parse10(minuteStr)
-    };
+    var result = [
+        untruncateYear(yearStr),
+        defaultLocaleMonthsShort.indexOf(monthStr),
+        parseInt(dayStr, 10),
+        parseInt(hourStr, 10),
+        parseInt(minuteStr, 10)
+    ];
 
     if (secondStr) {
-        result.second = parse10(secondStr);
+        result.push(parseInt(secondStr, 10));
     }
 
     return result;
 }
 
-function untrucateYear(year) {
-    return year > 60 ? 1900 + year : 2000 + year;
+function untruncateYear(yearStr) {
+    var year = parseInt(yearStr, 10);
+    if (year <= 49) {
+        return 2000 + year;
+    } else if (year <= 999) {
+        return 1900 + year;
+    }
+    return year;
 }
 
 function preprocessRFC2822(s) {
@@ -125,8 +131,8 @@ function preprocessRFC2822(s) {
 }
 
 function signedOffset(offHourStr, offMinuteStr) {
-    var offHour = parse10(offHourStr) || 0,
-        offMin = parse10(offMinuteStr) || 0,
+    var offHour = parseInt(offHourStr, 10) || 0,
+        offMin = parseInt(offMinuteStr, 10) || 0,
         offMinSigned = offHour < 0 ? -offMin : offMin;
     return offHour * 60 + offMinSigned;
 }
@@ -135,7 +141,7 @@ function checkWeekday(weekdayStr, parsedInput, config) {
     if (weekdayStr) {
         // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
         var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
-            weekdayActual = new Date(parsedInput.year, parsedInput.month, parsedInput.day).getDay();
+            weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
         if (weekdayProvided !== weekdayActual) {
             getParsingFlags(config).weekdayMismatch = true;
             config._isValid = false;
@@ -157,10 +163,6 @@ var obsOffsets = {
     PST: 8 * 60
 };
 
-function parse10(inty) {
-    return parseInt(inty, 10);
-}
-
 function calculateOffset(obsOffset, milOffset, offHourStr, offMinuteStr) {
     if (obsOffset) {
         return obsOffsets[obsOffset];
@@ -178,7 +180,7 @@ export function configFromRFC2822(config) {
             return;
         }
 
-        config._a = [parsedArray.year, parsedArray.month, parsedArray.day, parsedArray.hour, parsedArray.minute, parsedArray.second];
+        config._a = parsedArray;
         config._tzm = calculateOffset(match[8], match[9], match[10], match[11]);
 
         configFromArray(config);
index 0ea1d74ff324bf09a7c465f93119f4bc74400273..8568853a7874202540d90af1c08bb17efec735f0 100644 (file)
@@ -352,36 +352,3 @@ test('weeks year starting monday formatted', function (assert) {
     assert.equal(moment([2012,  0,  8]).format('w ww wo'), '1 01 1-я', 'Jan  8 2012 should be week 1');
     assert.equal(moment([2012,  0,  9]).format('w ww wo'), '2 02 2-я', 'Jan  9 2012 should be week 2');
 });
-
-test('parsing RFC 2822', function (assert) {
-    var testCases = {
-        'clean RFC2822 datetime with all options': 'Tue, 01 Nov 2016 01:23:45 UT',
-        'clean RFC2822 datetime without comma': 'Tue 01 Nov 2016 02:23:45 GMT',
-        'clean RFC2822 datetime without seconds': 'Tue, 01 Nov 2016 03:23 +0000',
-        'clean RFC2822 datetime without century': 'Tue, 01 Nov 16 04:23:45 Z',
-        'clean RFC2822 datetime without day': '01 Nov 2016 05:23:45 z',
-        'clean RFC2822 datetime with single-digit day-of-month': 'Tue, 1 Nov 2016 06:23:45 GMT',
-        'RFC2822 datetime with CFWSs': '(Init Comment) Tue,\n 1 Nov              2016 (Split\n Comment)  07:23:45 +0000 (GMT)'
-    };
-    var testCase;
-
-    for (testCase in testCases) {
-        var testResult = moment(testCases[testCase], moment.RFC_2822, true);
-        assert.ok(testResult.isValid(), testResult);
-        assert.ok(testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
-    }
-});
-
-test('non RFC 2822 strings', function (assert) {
-    var testCases = {
-        'RFC2822 datetime with all options but invalid day delimiter': 'Tue. 01 Nov 2016 01:23:45 GMT',
-        'RFC2822 datetime with mismatching Day (week v date)': 'Mon, 01 Nov 2016 01:23:45 GMT'
-    };
-    var testCase;
-
-    for (testCase in testCases) {
-        var testResult = moment(testCases[testCase], moment.RFC_2822, true);
-        assert.ok(!testResult.isValid(), testResult);
-        assert.ok(!testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
-    }
-});
index 4b8a277bc409a424b87009c7e8ed208f7e2d6fc3..9ad565131f297df2fa30410b589a54c4a8fbc963 100644 (file)
@@ -489,6 +489,51 @@ test('non RFC 2822 strings', function (assert) {
     }
 });
 
+test('parsing RFC 2822 in a different locale', function (assert) {
+    var testCases = {
+        'clean RFC2822 datetime with all options': 'Tue, 01 Nov 2016 01:23:45 UT',
+        'clean RFC2822 datetime without comma': 'Tue 01 Nov 2016 02:23:45 GMT',
+        'clean RFC2822 datetime without seconds': 'Tue, 01 Nov 2016 03:23 +0000',
+        'clean RFC2822 datetime without century': 'Tue, 01 Nov 16 04:23:45 Z',
+        'clean RFC2822 datetime without day': '01 Nov 2016 05:23:45 z',
+        'clean RFC2822 datetime with single-digit day-of-month': 'Tue, 1 Nov 2016 06:23:45 GMT',
+        'RFC2822 datetime with CFWSs': '(Init Comment) Tue,\n 1 Nov              2016 (Split\n Comment)  07:23:45 +0000 (GMT)'
+    };
+    var testCase;
+
+    try {
+        moment.locale('ru');
+        for (testCase in testCases) {
+            var testResult = moment(testCases[testCase], moment.RFC_2822, true);
+            assert.ok(testResult.isValid(), testResult);
+            assert.ok(testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
+        }
+    }
+    finally {
+        moment.locale('en');
+    }
+});
+
+test('non RFC 2822 strings in a different locale', function (assert) {
+    var testCases = {
+        'RFC2822 datetime with all options but invalid day delimiter': 'Tue. 01 Nov 2016 01:23:45 GMT',
+        'RFC2822 datetime with mismatching Day (week v date)': 'Mon, 01 Nov 2016 01:23:45 GMT'
+    };
+    var testCase;
+
+    try {
+        moment.locale('ru');
+        for (testCase in testCases) {
+            var testResult = moment(testCases[testCase], moment.RFC_2822, true);
+            assert.ok(!testResult.isValid(), testResult);
+            assert.ok(!testResult.parsingFlags().rfc2822, testResult + ' - rfc2822 parsingFlag');
+        }
+    }
+    finally {
+        moment.locale('en');
+    }
+});
+
 test('parsing iso', function (assert) {
     var offset = moment([2011, 9, 8]).utcOffset(),
     pad = function (input) {