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