/* * Copyright 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * 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; import junit.framework.Assert; import java.util.LinkedList; /** * 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 * instance returned is an instance of this class */ public static SpeedTracerLoggerTestMockNotifier enable() { SpeedTracerLoggerTestMockNotifier ret = new SpeedTracerLoggerTestMockNotifier(); DashboardNotifierFactory.setNotifier(ret); return ret; } /** * Keeps track of calls to {@code devModeEvent()}. */ private LinkedList<DevModeEvent> eventSeq = new LinkedList<DevModeEvent>(); private boolean started; @Override public void devModeEventBegin() { Assert.assertFalse("DashboardNotifier.devModeEventBegin() called more than once " + "before call DashboardNotifier.devModeEventEnd()", started); started = true; } @Override public void devModeEventEnd(DevModeSession session, String eventType, long startTimeNanos, long durationNanos) { Assert.assertTrue("DashboardNotifier.devModeEventEnd() without prior call to " + "DashboardNotifier.devModeEventBegin()", started); started = false; DevModeEvent e = new DevModeEvent(session, eventType, startTimeNanos, durationNanos); eventSeq.add(e); } @Override public void devModeSessionBegin(DevModeSession session) { // always raise exception here - this method shouldn't be invoked from // SpeedTracerLogger Assert.fail("SpeedTracerLogger should not be calling DashboardNotifier.devModeSessionBegin()"); } @Override public void devModeSessionEnd(DevModeSession session) { // always raise exception here - this method shouldn't be invoked from // SpeedTracerLogger Assert.fail("SpeedTracerLogger should not be calling DashboardNotifier.devModeSessionEnd()"); } /** * Returns the sequence of events posted to the notifier. Also validates that * the notifier is in a valid state (i.e. not between calls to beginning and * ending an event). * * @return the sequence of events posted to the notifier */ public LinkedList<DevModeEvent> getEventSequence() { Assert.assertFalse("DashboardNotifier.devModeEventBegin() called without matching " + "call to DashboardNotifier.devModeEventEnd()", started); return eventSeq; } }