You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by on...@apache.org on 2014/04/10 15:58:27 UTC

[3/3] git commit: AMBARI-5421. Some unit test fail depending on timezone. (onechiporenko)

AMBARI-5421. Some unit test fail depending on timezone. (onechiporenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f71d6b92
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f71d6b92
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f71d6b92

Branch: refs/heads/trunk
Commit: f71d6b92366854fca0b90d6fdbd2c6bbfeeb4092
Parents: 526a16b
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Thu Apr 10 16:51:07 2014 +0300
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Thu Apr 10 16:57:11 2014 +0300

----------------------------------------------------------------------
 ambari-web/app/assets/licenses/NOTICE.txt       |    4 +-
 ambari-web/app/utils/date.js                    |  132 +-
 .../dashboard/widgets/uptime_text_widget.js     |   31 +-
 ambari-web/config.coffee                        |    1 +
 ambari-web/test/utils/date_test.js              |   42 +-
 ambari-web/vendor/scripts/moment.js             | 7768 ++++++++++++++++++
 6 files changed, 7894 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f71d6b92/ambari-web/app/assets/licenses/NOTICE.txt
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/licenses/NOTICE.txt b/ambari-web/app/assets/licenses/NOTICE.txt
index d2aa8f8..9be0e09 100644
--- a/ambari-web/app/assets/licenses/NOTICE.txt
+++ b/ambari-web/app/assets/licenses/NOTICE.txt
@@ -40,4 +40,6 @@ This product includes Timeago (http://timeago.yarp.com/ - MIT License)
 Copyright (c) 2008-2012, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
 
 This product includes Spin.js (http://fgnass.github.com/spin.js/ - MIT license)
-Copyright (c) 2011 Felix Gnass [fgnass at neteye dot de]
\ No newline at end of file
+Copyright (c) 2011 Felix Gnass [fgnass at neteye dot de]
+
+This product includes Moment.js (https://github.com/moment/moment/ - MIT license)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/f71d6b92/ambari-web/app/utils/date.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/date.js b/ambari-web/app/utils/date.js
index 5434588..37d8959 100644
--- a/ambari-web/app/utils/date.js
+++ b/ambari-web/app/utils/date.js
@@ -20,53 +20,85 @@ var validator = require('utils/validator');
 var App = require('app');
 
 module.exports = {
-  dateMonths:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
-  dateDays:['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
-  dateFormatZeroFirst:function (time) {
+
+  /**
+   * List of monthes short names
+   * @type {string[]}
+   */
+  dateMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+
+  /**
+   * List of days short names
+   * @type {string[]}
+   */
+  dateDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+
+  /**
+   * Add leading zero
+   *
+   * @param {string} time
+   * @returns {string}
+   * @method dateFormatZeroFirst
+   */
+  dateFormatZeroFirst: function (time) {
     if (time < 10) return '0' + time;
     return time;
   },
+
   /**
    * Convert timestamp to date-string 'DAY_OF_THE_WEEK, MONTH DAY, YEAR HOURS:MINUTES'
-   * @param timestamp
-   * @return string date
+   *
+   * @param {number} timestamp
+   * @param {bool} showSeconds should seconds be added to result string
+   * @param {bool} showMilliseconds should miliseconds be added to result string (if <code>showSeconds</code> is false, milliseconds wouldn't be added)
+   * @return {*} date
+   * @method dateFormat
    */
-  dateFormat:function (timestamp, showSeconds, showMilliseconds) {
-    if (!validator.isValidInt(timestamp)) return timestamp;
-    var date = new Date(timestamp);
-    var months = this.dateMonths;
-    var days = this.dateDays;
-    var formattedDate = days[date.getDay()] + ', ' + months[date.getMonth()] + ' ' + this.dateFormatZeroFirst(date.getDate()) + ', ' + date.getFullYear() + ' ' + this.dateFormatZeroFirst(date.getHours()) + ':' + this.dateFormatZeroFirst(date.getMinutes());
+  dateFormat: function (timestamp, showSeconds, showMilliseconds) {
+    if (!validator.isValidInt(timestamp)) {
+      return timestamp;
+    }
+    var format = 'ddd, MMM DD, YYYY HH:mm';
     if (showSeconds) {
-      formattedDate += ':' + this.dateFormatZeroFirst(date.getSeconds());
+      format += ':ss';
       if (showMilliseconds) {
-        formattedDate += '.' + this.dateFormatZeroFirst(date.getMilliseconds());
-      };
-    };
-    return formattedDate;
+        format += ':SSS';
+      }
+    }
+    return moment((new Date(timestamp)).toISOString().replace('Z', '')).format(format);
   },
+
   /**
    * Convert timestamp to date-string 'DAY_OF_THE_WEEK MONTH DAY YEAR'
-   * @param timestamp
-   * @return {*}
+   *
+   * @param {string} timestamp
+   * @return {string}
+   * @method dateFormatShort
    */
-  dateFormatShort: function(timestamp) {
-    if (!validator.isValidInt(timestamp)) return timestamp;
-
-    var date = new Date(timestamp);
-    var today = new Date();
-    if (date.toDateString() === today.toDateString()) {
-      return 'Today ' + date.toLocaleTimeString();
+  dateFormatShort: function (timestamp) {
+    if (!validator.isValidInt(timestamp)) {
+      return timestamp;
+    }
+    var format = 'ddd MMM DD YYYY';
+    var date = moment((new Date(timestamp)).toISOString().replace('Z', '')).format(format);
+    var today = moment((new Date()).toISOString().replace('Z', '')).format(format);
+    if (date === today) {
+      return 'Today ' + (new Date(timestamp)).toLocaleTimeString();
     }
-    return date.toDateString();
+    return date;
   },
+
   /**
    * Convert starTimestamp to 'DAY_OF_THE_WEEK, MONTH DAY, YEAR HOURS:MINUTES', except for the case: year equals 1969
-   * @param startTimestamp
-   * @return string startTimeSummary
+   *
+   * @param {string} startTimestamp
+   * @return {string} startTimeSummary
+   * @method startTime
    */
   startTime: function (startTimestamp) {
-    if (!validator.isValidInt(startTimestamp)) return '';
+    if (!validator.isValidInt(startTimestamp)) {
+      return '';
+    }
     var startDate = new Date(startTimestamp);
     var months = this.dateMonths;
     var days = this.dateDays;
@@ -75,21 +107,25 @@ module.exports = {
       return 'Not started';
     }
     var startTimeSummary = '';
-    if (new Date(startTimestamp).setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0) ) { //today
+    if (new Date(startTimestamp).setHours(0, 0, 0, 0) == new Date().setHours(0, 0, 0, 0)) { //today
       startTimeSummary = 'Today ' + this.dateFormatZeroFirst(startDate.getHours()) + ':' + this.dateFormatZeroFirst(startDate.getMinutes());
     } else {
-      startTimeSummary =  days[startDate.getDay()] + ' ' + months[startDate.getMonth()] + ' ' + this.dateFormatZeroFirst(startDate.getDate()) + ' ' + startDate.getFullYear() + ' '
+      startTimeSummary = days[startDate.getDay()] + ' ' + months[startDate.getMonth()] + ' ' +
+        this.dateFormatZeroFirst(startDate.getDate()) + ' ' + startDate.getFullYear() + ' '
         + this.dateFormatZeroFirst(startDate.getHours()) + ':' + this.dateFormatZeroFirst(startDate.getMinutes());
     }
     return startTimeSummary;
   },
+
   /**
    * Provides the duration between the given start and end timestamp. If start time
    * not valid, duration will be ''. If end time is not valid, duration will
    * be till now, showing 'Lasted for xxx secs'.
-   * @param startTimestamp
-   * @param endTimestamp
-   * @return string durationSummary
+   *
+   * @param {string} startTimestamp
+   * @param {string} endTimestamp
+   * @return {string} durationSummary
+   * @method durationSummary
    */
   durationSummary: function (startTimestamp, endTimestamp) {
     // generate duration
@@ -105,8 +141,8 @@ module.exports = {
       return '' + this.timingFormat(endTimestamp - startTimestamp, 1); //lasted for xx secs
     } else {
       // still running, duration till now
-      var time =  (App.dateTime() - startTimestamp) < 0? 0 : (App.dateTime() - startTimestamp) ;
-      durationSummary = '' + this.timingFormat( time , 1);
+      var time = (App.dateTime() - startTimestamp) < 0 ? 0 : (App.dateTime() - startTimestamp);
+      durationSummary = '' + this.timingFormat(time, 1);
     }
     return durationSummary;
   },
@@ -123,14 +159,20 @@ module.exports = {
    * 999999 ms = 999.99 secs
    * 1000000 ms = 16.66 mins
    * 3500000 secs = 58.33 mins
-   * @param time
-   * @param zeroValid for the case to show 0 when time is 0, not null
-   * @return string formatted date
+   *
+   * @param {number} time
+   * @param {bool} zeroValid for the case to show 0 when time is 0, not null
+   * @return {string|null} formatted date
+   * @method timingFormat
    */
-  timingFormat:function (time, /* optional */ zeroValid) {
-    var intTime  = parseInt(time);
-    if (zeroValid && intTime == 0) return 0 + ' secs';
-    if (!intTime) return null;
+  timingFormat: function (time, /* optional */ zeroValid) {
+    var intTime = parseInt(time);
+    if (zeroValid && intTime == 0) {
+      return 0 + ' secs';
+    }
+    if (!intTime) {
+      return null;
+    }
     var timeStr = intTime.toString();
     var lengthOfNumber = timeStr.length;
     var oneMinMs = 60000;
@@ -153,6 +195,7 @@ module.exports = {
       return time + ' days';
     }
   },
+
   /**
    * Provides the duration between the given start and end time. If start time
    * is not given, duration will be 0. If end time is not given, duration will
@@ -161,8 +204,9 @@ module.exports = {
    * @param {Number} startTime Start time from epoch
    * @param {Number} endTime End time from epoch
    * @return {Number} duration
+   * @method duration
    */
-  duration : function(startTime, endTime) {
+  duration: function (startTime, endTime) {
     var duration = 0;
     if (startTime && startTime > 0) {
       if (!endTime || endTime < 1) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/f71d6b92/ambari-web/app/views/main/dashboard/widgets/uptime_text_widget.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard/widgets/uptime_text_widget.js b/ambari-web/app/views/main/dashboard/widgets/uptime_text_widget.js
index e583522..3d9ed34 100644
--- a/ambari-web/app/views/main/dashboard/widgets/uptime_text_widget.js
+++ b/ambari-web/app/views/main/dashboard/widgets/uptime_text_widget.js
@@ -54,25 +54,8 @@ App.UptimeTextDashboardWidgetView = App.TextDashboardWidgetView.extend({
   }.property('data'),
 
   timeConverter: function (timestamp) {
-    var origin = new Date(timestamp);
-    origin = origin.toString();
-    var result = [];
-    var start = origin.indexOf('GMT');
-    if (start == -1) { // ie
-      var arr = origin.split(" ");
-      result.pushObject(arr[0] + " " + arr[1] + " " + arr[2] + " " + arr[3]);
-      var second = '';
-      for (var i = 4; i < arr.length; i++) {
-        second = second + " " + arr[i];
-      }
-      result.pushObject(second);
-    }
-    else { // other browsers
-      var end = origin.indexOf(" ", start);
-      result.pushObject(origin.slice(0, start-10));
-      result.pushObject(origin.slice(start-9));
-    }
-    return result;
+    var m = moment((new Date(timestamp)).toISOString().replace('Z', ''));
+    return [m.format('ddd MMM DD YYYY'), m.format('HH:mm:ss')];
   },
 
   /**
@@ -84,17 +67,17 @@ App.UptimeTextDashboardWidgetView = App.TextDashboardWidgetView.extend({
    * }
    * </code>
    */
-  didInsertElement: function() {
+  didInsertElement: function () {
     this._super();
     this.addObserver('model.' + this.get('modelField'), this, this.calc);
   },
 
-  calc: function() {
+  calc: function () {
     this.set('data', this.calcData());
     this.set('content', this.calcContent());
   },
 
-  uptimeProcessing: function(uptime) {
+  uptimeProcessing: function (uptime) {
     var uptimeString = this.timeConverter(uptime);
     var diff = App.dateTime() - uptime;
     if (diff < 0) {
@@ -137,14 +120,14 @@ App.UptimeTextDashboardWidgetView = App.TextDashboardWidgetView.extend({
         return parseFloat(formatted.split(" ")[0]);
       }
     }
-    this.set('hiddenInfo', [this.get('component'),'Not Running']);
+    this.set('hiddenInfo', [this.get('component'), 'Not Running']);
     return null;
   },
 
   calcContent: function () {
     var data = this.get('data');
     if (data) {
-      return data.toFixed(1) + ' '+ this.get('timeUnit');
+      return data.toFixed(1) + ' ' + this.get('timeUnit');
     }
     else {
       return Em.I18n.t('services.service.summary.notAvailable');

http://git-wip-us.apache.org/repos/asf/ambari/blob/f71d6b92/ambari-web/config.coffee
----------------------------------------------------------------------
diff --git a/ambari-web/config.coffee b/ambari-web/config.coffee
index f03cc33..5ba91d3 100644
--- a/ambari-web/config.coffee
+++ b/ambari-web/config.coffee
@@ -52,6 +52,7 @@ exports.config =
           'vendor/scripts/jquery.ui.custom-effects.js',
           'vendor/scripts/jquery.timeago.js',
           'vendor/scripts/jquery.ajax-retry.js',
+          'vendor/scripts/moment.js',
           'vendor/scripts/workflow_visualization.js',
           'vendor/scripts/rickshaw.js',
           'vendor/scripts/spin.js',

http://git-wip-us.apache.org/repos/asf/ambari/blob/f71d6b92/ambari-web/test/utils/date_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/date_test.js b/ambari-web/test/utils/date_test.js
index d9b7d61..fad8ccf 100644
--- a/ambari-web/test/utils/date_test.js
+++ b/ambari-web/test/utils/date_test.js
@@ -25,9 +25,9 @@ var date = require('utils/date');
 describe('date', function () {
 
   var correct_tests = Em.A([
-    {t: 1349752195000, e: 'Tue, Oct 09, 2012 06:09', e2: 'Tue Oct 09 2012'},
-    {t: 1367752195000, e: 'Sun, May 05, 2013 14:09', e2: 'Sun May 05 2013'},
-    {t: 1369952195000, e: 'Fri, May 31, 2013 01:16', e2: 'Fri May 31 2013'}
+    {t: 1349752195000, e: 'Tue, Oct 09, 2012 03:09', e2: 'Tue Oct 09 2012'},
+    {t: 1367752195000, e: 'Sun, May 05, 2013 11:09', e2: 'Sun May 05 2013'},
+    {t: 1369952195000, e: 'Thu, May 30, 2013 22:16', e2: 'Thu May 30 2013'}
   ]);
 
   var incorrect_tests = Em.A([
@@ -41,22 +41,28 @@ describe('date', function () {
   ]);
 
   describe('#dateFormat', function() {
-    it('Correct timestamps', function(){
+    describe('Correct timestamps', function(){
       correct_tests.forEach(function(test) {
-        expect(date.dateFormat(test.t)).to.equal(test.e);
+        it(test.t, function() {
+          expect(date.dateFormat(test.t)).to.equal(test.e);
+        });
       });
     });
-    it('Incorrect timestamps', function() {
+    describe('Incorrect timestamps', function() {
       incorrect_tests.forEach(function(test) {
-        expect(date.dateFormat(test.t)).to.equal(test.t);
+        it(test.t, function() {
+          expect(date.dateFormat(test.t)).to.equal(test.t);
+        });
       });
     });
   });
 
   describe('#dateFormatShort', function() {
-    it('Correct timestamps', function(){
+    describe('Correct timestamps', function() {
       correct_tests.forEach(function(test) {
-        expect(date.dateFormatShort(test.t)).to.equal(test.e2);
+        it(test.t, function() {
+          expect(date.dateFormatShort(test.t)).to.equal(test.e2);
+        });
       });
     });
     it('Today timestamp', function() {
@@ -64,9 +70,11 @@ describe('date', function () {
       var then = new Date(now.getFullYear(),now.getMonth(),now.getDate(),0,0,0);
       expect(date.dateFormatShort(then.getTime() + 10*3600*1000)).to.equal('Today 10:00:00');
     });
-    it('Incorrect timestamps', function() {
+    describe('Incorrect timestamps', function() {
       incorrect_tests.forEach(function(test) {
-        expect(date.dateFormatShort(test.t)).to.equal(test.t);
+        it(test.t, function() {
+          expect(date.dateFormatShort(test.t)).to.equal(test.t);
+        });
       });
     });
   });
@@ -89,15 +97,19 @@ describe('date', function () {
       {i: '35000000000', e:'405.09 days'}
     ]);
 
-    it('Correct data', function(){
+    describe('Correct data', function(){
       tests.forEach(function(test) {
-        expect(date.timingFormat(test.i)).to.equal(test.e);
+        it(test.t, function() {
+          expect(date.timingFormat(test.i)).to.equal(test.e);
+        });
       });
     });
 
-    it('Incorrect data', function(){
+    describe('Incorrect data', function(){
       incorrect_tests.forEach(function(test) {
-        expect(date.timingFormat(test.t)).to.equal(null);
+        it(test.t, function() {
+          expect(date.timingFormat(test.t)).to.equal(null);
+        });
       });
     });