Revision: 10176
Author:   [email protected]
Date:     Wed May 11 07:35:17 2011
Log: Minor refactoring of "dashboard" interfaces in GWT. I'd made these changes this week in another branch (while initial changes were still in review) to make the
implementation and some of its tests (which are easier to write when method
parameters are interfaces that can easily be mocked vs. classes) a little
cleaner.

Made package-private member of DevModeSession public for testing purposes. Changed DashboardNotifier.devModeEvent() signature to allow easier unit testing due to quirks in SpeedTracerLogger.Event.

Review at http://gwt-code-reviews.appspot.com/1439801

Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=10176

Modified:
 /trunk/dev/core/src/com/google/gwt/dev/shell/DevModeSession.java
/trunk/dev/core/src/com/google/gwt/dev/util/log/dashboard/DashboardNotifier.java /trunk/dev/core/src/com/google/gwt/dev/util/log/dashboard/NoOpDashboardNotifier.java /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java
 /trunk/dev/core/test/com/google/gwt/dev/shell/DevModeSessionTestUtil.java
/trunk/dev/core/test/com/google/gwt/dev/util/log/dashboard/DashboardNotifierFactoryTest.java /trunk/dev/core/test/com/google/gwt/dev/util/log/dashboard/SpeedTracerLoggerTestMockNotifier.java /trunk/dev/core/test/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLoggerTest.java

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/shell/DevModeSession.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/shell/DevModeSession.java Wed May 11 07:35:17 2011
@@ -47,13 +47,14 @@
   private String userAgent;

   /**
-   * Creates a new instance.
+ * Creates a new instance. It is public only for unit test purposes and is
+   * not meant to be used outside of this package.
    *
    * @param moduleName the name of the GWT module for this session
    * @param userAgent the User agent field provided by the browser for this
    *          session
    */
-  DevModeSession(String moduleName, String userAgent) {
+  public DevModeSession(String moduleName, String userAgent) {
     this.moduleName = moduleName;
     this.userAgent = userAgent;
   }
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/util/log/dashboard/DashboardNotifier.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/util/log/dashboard/DashboardNotifier.java Wed May 11 07:35:17 2011
@@ -17,7 +17,6 @@
 package com.google.gwt.dev.util.log.dashboard;

 import com.google.gwt.dev.shell.DevModeSession;
-import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;

 /**
  * Sends information to a dashboard service. The dashboard service collects
@@ -34,7 +33,8 @@
   /**
    * Records a top-level event to the dashboard.
    */
-  void devModeEvent(DevModeSession session, Event event);
+ void devModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+      long durationNanos);

   /**
    * Records a new module/session.
=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/util/log/dashboard/NoOpDashboardNotifier.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/util/log/dashboard/NoOpDashboardNotifier.java Wed May 11 07:35:17 2011
@@ -13,20 +13,19 @@
* License for the specific language governing permissions and limitations under
  * the License.
  */
-
 package com.google.gwt.dev.util.log.dashboard;

 import com.google.gwt.dev.shell.DevModeSession;
-import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;

 /**
- * Implements the <code>DashboardNotifier</code> interface but does not actually
+ * Implements the {@code DashboardNotifier} interface but does not actually
  * do anything.
  */
 public class NoOpDashboardNotifier implements DashboardNotifier {

   @Override
-  public void devModeEvent(DevModeSession sesion, Event event) {
+ public void devModeEvent(DevModeSession sesion, String eventType, long startTimeNanos,
+      long durationNanos) {
     // do nothing
   }

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLogger.java Wed May 11 07:35:17 2011
@@ -860,7 +860,8 @@
       }

DashboardNotifierFactory.getNotifier().devModeEvent(currentEvent.getDevModeSession(),
-          currentEvent);
+ currentEvent.getType().getName(), currentEvent.getElapsedStartTimeNanos(),
+          currentEvent.getElapsedDurationNanos());
     }
   }

=======================================
--- /trunk/dev/core/test/com/google/gwt/dev/shell/DevModeSessionTestUtil.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/test/com/google/gwt/dev/shell/DevModeSessionTestUtil.java Wed May 11 07:35:17 2011
@@ -3,8 +3,9 @@
 package com.google.gwt.dev.shell;

 /**
- * Provides public method for accessing package-private members of
- * <code>DevModeSession</code> for testing.
+ * Provides public method for convenience in unit tests. Allows access of
+ * package-private member
+ * {@link DevModeSession#setSessionForCurrentThread(DevModeSession)}.
  *
  * @author [email protected] (Joshua Humphries)
  */
=======================================
--- /trunk/dev/core/test/com/google/gwt/dev/util/log/dashboard/DashboardNotifierFactoryTest.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/test/com/google/gwt/dev/util/log/dashboard/DashboardNotifierFactoryTest.java Wed May 11 07:35:17 2011
@@ -16,7 +16,6 @@
 package com.google.gwt.dev.util.log.dashboard;

 import com.google.gwt.dev.shell.DevModeSession;
-import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;

 import junit.framework.TestCase;

@@ -29,7 +28,8 @@
     // create test notifier instance
     DashboardNotifier obj = new DashboardNotifier() {
       @Override
-      public void devModeEvent(DevModeSession session, Event event) {
+ public void devModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+          long durationNanos) {
         // no need to do anything
       }

=======================================
--- /trunk/dev/core/test/com/google/gwt/dev/util/log/dashboard/SpeedTracerLoggerTestMockNotifier.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/test/com/google/gwt/dev/util/log/dashboard/SpeedTracerLoggerTestMockNotifier.java Wed May 11 07:35:17 2011
@@ -23,9 +23,60 @@
 import java.util.LinkedList;

 /**
- * Mock object for testing SpeedTracerLogger
+ * Mock object for testing integration of {@code SpeedTracerLogger} and
+ * {@code DashboardNotifier}.
  */
public class SpeedTracerLoggerTestMockNotifier implements DashboardNotifier {
+
+  /**
+   * Represents the parameters passed to {@code devModeEvent()}.
+   */
+  public static class DevModeEvent {
+    private DevModeSession session;
+    private String eventType;
+    private long startTimeNanos;
+    private long durationNanos;
+
+ public DevModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+        long durationNanos) {
+      this.session = session;
+      this.eventType = eventType;
+      this.startTimeNanos = startTimeNanos;
+      this.durationNanos = durationNanos;
+    }
+
+    public DevModeEvent(Event e) {
+      this.session = e.getDevModeSession();
+      this.eventType = e.getType().getName();
+      this.startTimeNanos = e.getElapsedStartTimeNanos();
+      this.durationNanos = e.getElapsedDurationNanos();
+    }
+
+    public DevModeSession getDevModeSession() {
+      return session;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+      if (o != null && o instanceof DevModeEvent) {
+        DevModeEvent e = (DevModeEvent) o;
+        return session.equals(e.session) && eventType.equals(e.eventType)
+ && startTimeNanos == e.startTimeNanos && durationNanos == e.durationNanos;
+      }
+      return false;
+    }
+
+    @Override
+    public int hashCode() {
+      int hash = 37;
+      hash = hash*19 + session.hashCode();
+      hash = hash*19 + eventType.hashCode();
+      hash = hash*19 + Long.valueOf(startTimeNanos).hashCode();
+      hash = hash*19 + Long.valueOf(durationNanos).hashCode();
+      return hash;
+    }
+  }
+
   /**
* Activates this mock object. After calling this, the notifier factory will
    * be setup so that dashboard notifications are enabled and the notifier
@@ -38,13 +89,15 @@
   }

   /**
-   * This keeps track of events
+   * Keeps track of calls to {@code devModeEvent()}.
    */
-  private LinkedList<Event> eventSeq = new LinkedList<Event>();
+ private LinkedList<DevModeEvent> eventSeq = new LinkedList<DevModeEvent>();

   @Override
-  public void devModeEvent(DevModeSession session, Event event) {
-    eventSeq.add(event);
+ public void devModeEvent(DevModeSession session, String eventType, long startTimeNanos,
+      long durationNanos) {
+ DevModeEvent e = new DevModeEvent(session, eventType, startTimeNanos, durationNanos);
+    eventSeq.add(e);
   }

   @Override
@@ -55,7 +108,7 @@
         false);
   }

-  public LinkedList<Event> getEventSequence() {
+  public LinkedList<DevModeEvent> getEventSequence() {
     return eventSeq;
   }
 }
=======================================
--- /trunk/dev/core/test/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLoggerTest.java Fri May 6 10:22:03 2011 +++ /trunk/dev/core/test/com/google/gwt/dev/util/log/speedtracer/SpeedTracerLoggerTest.java Wed May 11 07:35:17 2011
@@ -21,6 +21,7 @@
 import com.google.gwt.dev.shell.DevModeSession;
 import com.google.gwt.dev.shell.DevModeSessionTestUtil;
import com.google.gwt.dev.util.log.dashboard.SpeedTracerLoggerTestMockNotifier; +import com.google.gwt.dev.util.log.dashboard.SpeedTracerLoggerTestMockNotifier.DevModeEvent;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Event;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.EventType;
 import com.google.gwt.dev.util.log.speedtracer.SpeedTracerLogger.Format;
@@ -288,7 +289,7 @@
DevModeSession session2 = DevModeSessionTestUtil.createSession("test2", "test", false);

       // expected values (used in final assertions below)
-      LinkedList<Event> expectedEvents = new LinkedList<Event>();
+ LinkedList<DevModeEvent> expectedEvents = new LinkedList<DevModeEvent>(); LinkedList<DevModeSession> expectedSessions = new LinkedList<DevModeSession>();

       Event evt1, evt2;
@@ -300,7 +301,7 @@
       evt2.end();
       evt1.end();
       // expect only first event
-      expectedEvents.add(evt1);
+      expectedEvents.add(new DevModeEvent(evt1));
       expectedSessions.add(session1); // event should get "default" session

       // now with session specified
@@ -310,12 +311,12 @@
       evt2.end();
       evt1.end();
       // expect only first event
-      expectedEvents.add(evt1);
+      expectedEvents.add(new DevModeEvent(evt1));
       expectedSessions.add(session2);

evt1 = SpeedTracerLogger.start(session1, DevModeEventType.JS_TO_JAVA_CALL, "k1", "v1");
       evt1.end();
-      expectedEvents.add(evt1);
+      expectedEvents.add(new DevModeEvent(evt1));
       expectedSessions.add(session1);

// Finally, assert that the events and corresponding sessions sent to the
@@ -325,7 +326,7 @@

       // Collect sessions associated with each event
LinkedList<DevModeSession> actualSessions = new LinkedList<DevModeSession>();
-      for (Event event : notifier.getEventSequence()) {
+      for (DevModeEvent event : notifier.getEventSequence()) {
         actualSessions.add(event.getDevModeSession());
       }

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to