Title: [93163] trunk/Tools
Revision
93163
Author
[email protected]
Date
2011-08-16 15:07:41 -0700 (Tue, 16 Aug 2011)

Log Message

garden-o-matic frontend needs a friendly relative time description method.
https://bugs.webkit.org/show_bug.cgi?id=66324

Reviewed by Adam Barth.

* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added base.relativizeTime method.
* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added unit tests.
* BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Wired up Time widget to use it.

Modified Paths

Diff

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js (93162 => 93163)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js	2011-08-16 22:01:52 UTC (rev 93162)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js	2011-08-16 22:07:41 UTC (rev 93163)
@@ -300,4 +300,53 @@
     return extended;
 }
 
+function createRelativeTimeDescriptor(divisorInMilliseconds, unit)
+{
+    return function(delta) {
+        var deltaInUnits = delta / divisorInMilliseconds;
+        return (deltaInUnits).toFixed(0) + ' ' + unit + (deltaInUnits >= 2 ? 's' : '') + ' ago';
+    }
+}
+
+var kMinuteInMilliseconds = 60 * 1000;
+var kRelativeTimeSlots = [
+    {
+        maxMilliseconds: kMinuteInMilliseconds,
+        describe: function(delta) { return 'Just now'; }
+    },
+    {
+        maxMilliseconds: 60 * kMinuteInMilliseconds,
+        describe: createRelativeTimeDescriptor(kMinuteInMilliseconds, 'minute')
+    },
+    {
+        maxMilliseconds: 24 * 60 * kMinuteInMilliseconds,
+        describe: createRelativeTimeDescriptor(60 * kMinuteInMilliseconds, 'hour')
+    },
+    {
+        maxMilliseconds: Number.MAX_VALUE,
+        describe: createRelativeTimeDescriptor(24 * 60 * kMinuteInMilliseconds, 'day')
+    }
+];
+
+/*
+    Represent time as descriptive text, relative to now and gradually decreasing in precision:
+        delta < 1 minutes => Just Now
+        delta < 60 minutes => X minute[s] ago
+        delta < 24 hours => X hour[s] ago
+        delta < inf => X day[s] ago
+*/
+base.relativizeTime = function(time)
+{
+    var result;
+    var delta = new Date().getTime() - time;
+    kRelativeTimeSlots.some(function(slot) {
+        if (delta >= slot.maxMilliseconds)
+            return false;
+
+        result = slot.describe(delta);
+        return true;
+    });
+    return result;
+}
+
 })();

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js (93162 => 93163)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js	2011-08-16 22:01:52 UTC (rev 93162)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js	2011-08-16 22:07:41 UTC (rev 93163)
@@ -372,4 +372,29 @@
     document.body.removeChild(document.body.lastChild);
 });
 
+test("relativizeTime", 11, function() {
+    var time = new Date();
+    equals(base.relativizeTime(time), "Just now");
+    time.setMinutes(time.getMinutes() - 1);
+    equals(base.relativizeTime(time), "1 minute ago");
+    time.setMinutes(time.getMinutes() - 1);
+    equals(base.relativizeTime(time), "2 minutes ago");
+    time.setMinutes(time.getMinutes() - 1);
+    equals(base.relativizeTime(time), "3 minutes ago");
+    time.setMinutes(time.getMinutes() - 56);
+    equals(base.relativizeTime(time), "59 minutes ago");
+    time.setMinutes(time.getMinutes() - 1);
+    equals(base.relativizeTime(time), "1 hour ago");
+    time.setHours(time.getHours() - 1);
+    equals(base.relativizeTime(time), "2 hours ago");
+    time.setHours(time.getHours() - 21);
+    equals(base.relativizeTime(time), "23 hours ago");
+    time.setHours(time.getHours() - 1);
+    equals(base.relativizeTime(time), "1 day ago");
+    time.setDate(time.getDate() - 1);
+    equals(base.relativizeTime(time), "2 days ago");
+    time.setTime(0);
+    equals(base.relativizeTime(time), "15203 days ago");
+})
+
 })();

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js (93162 => 93163)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js	2011-08-16 22:01:52 UTC (rev 93162)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js	2011-08-16 22:07:41 UTC (rev 93163)
@@ -67,13 +67,11 @@
 var Time = base.extends('time', {
     init: function()
     {
-        this.updateTime("Just Now");
+        this.updateTime(new Date());
     },
     updateTime: function(time)
     {
-        // FIXME: Implement displaying actual time.
-        // FIXME: Implement relative time.
-        this.textContent = time;
+        this.textContent = base.relativizeTime(time);
     }
 });
 

Modified: trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js (93162 => 93163)


--- trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js	2011-08-16 22:01:52 UTC (rev 93162)
+++ trunk/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications_unittests.js	2011-08-16 22:07:41 UTC (rev 93163)
@@ -63,15 +63,15 @@
 test('ui.notifications.TestFailures', 7, function() {
     var testFailures = new ui.notifications.TestFailures();
     equal(testFailures.tagName, 'LI');
-    equal(testFailures.innerHTML, '<time>Just Now</time><div class="what"><div class="problem"><ul class="effects"></ul><ul class="causes"></ul></div></div>');
+    equal(testFailures.innerHTML, '<time>Just now</time><div class="what"><div class="problem"><ul class="effects"></ul><ul class="causes"></ul></div></div>');
     testFailures.addFailureAnalysis({testName: 'test'});
-    equal(testFailures.innerHTML, '<time>Just Now</time><div class="what"><div class="problem"><ul class="effects"><li>test</li></ul><ul class="causes"></ul></div></div>');
+    equal(testFailures.innerHTML, '<time>Just now</time><div class="what"><div class="problem"><ul class="effects"><li>test</li></ul><ul class="causes"></ul></div></div>');
     ok(testFailures.containsFailureAnalysis({testName: 'test'}));
     ok(!testFailures.containsFailureAnalysis({testName: 'foo'}));
     testFailures.addFailureAnalysis({testName: 'test'});
-    equal(testFailures.innerHTML, '<time>Just Now</time><div class="what"><div class="problem"><ul class="effects"><li>test</li></ul><ul class="causes"></ul></div></div>');
+    equal(testFailures.innerHTML, '<time>Just now</time><div class="what"><div class="problem"><ul class="effects"><li>test</li></ul><ul class="causes"></ul></div></div>');
     testFailures.addCommitData({revision: 1, title: "title", author: "author", reviewer: "reviewer"});
-    equal(testFailures.innerHTML, '<time>Just Now</time><div class="what"><div class="problem"><ul class="effects"><li>test</li></ul><ul class="causes"><li><div class="description"><a href="" author (reviewer)</div><ul class="actions"><li><button>Roll out</button></li></ul></li></ul></div></div>');
+    equal(testFailures.innerHTML, '<time>Just now</time><div class="what"><div class="problem"><ul class="effects"><li>test</li></ul><ul class="causes"><li><div class="description"><a href="" author (reviewer)</div><ul class="actions"><li><button>Roll out</button></li></ul></li></ul></div></div>');
 });
 
 }());

Modified: trunk/Tools/ChangeLog (93162 => 93163)


--- trunk/Tools/ChangeLog	2011-08-16 22:01:52 UTC (rev 93162)
+++ trunk/Tools/ChangeLog	2011-08-16 22:07:41 UTC (rev 93163)
@@ -1,5 +1,16 @@
 2011-08-16  Dimitri Glazkov  <[email protected]>
 
+        garden-o-matic frontend needs a friendly relative time description method.
+        https://bugs.webkit.org/show_bug.cgi?id=66324
+
+        Reviewed by Adam Barth.
+
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base.js: Added base.relativizeTime method.
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/base_unittests.js: Added unit tests.
+        * BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/ui/notifications.js: Wired up Time widget to use it.
+
+2011-08-16  Dimitri Glazkov  <[email protected]>
+
         Summary view should not add multiple entries for the same test failure.
         https://bugs.webkit.org/show_bug.cgi?id=66318
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to