/* * Copyright 2011 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.speedtracer; 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 junit.framework.TestCase; import java.util.LinkedList; import java.util.Properties; /** * Flaky test for the SpeedTracerLogger class. * * Needs to run in its own test suite because of * https://code.google.com/p/google-web-toolkit/issues/detail?id=8081. */ public class SpeedTracerLoggerDashboardEnabledTest extends TestCase { public void testSpeedTracerWhenOnlyDashboardEnabled() { // backup system properties before making changes to them Properties props = (Properties) System.getProperties().clone(); try { // no logging to file! System.clearProperty("gwt.speedtracerlog"); // we don't capture GC events in dashboard, so setting this will allow us // to confirm that they *don't* show up in dashboard notices System.setProperty("gwt.speedtracer.logGcTime", "yes"); // now enable the mock dashboard notifier SpeedTracerLoggerTestMockNotifier notifier = SpeedTracerLoggerTestMockNotifier.enable(); // create "sessions" DevModeSession session1 = DevModeSessionTestUtil.createSession("test1", "test", true); DevModeSession session2 = DevModeSessionTestUtil.createSession("test2", "test", false); // expected values (used in final assertions below) LinkedList<DevModeEvent> expectedEvents = new LinkedList<DevModeEvent>(); LinkedList<DevModeSession> expectedSessions = new LinkedList<DevModeSession>(); Event evt1, evt2; // test events with no session specified evt1 = SpeedTracerLogger.start(DevModeEventType.MODULE_INIT, "k1", "v1", "k2", "v2"); // also test that child events aren't posted (only top-level events) evt2 = SpeedTracerLogger.start(DevModeEventType.CLASS_BYTES_REWRITE); evt2.end(); evt1.end(); // expect only first event expectedEvents.add(new DevModeEvent(evt1)); expectedSessions.add(session1); // event should get "default" session // now with session specified evt1 = SpeedTracerLogger.start(session2, DevModeEventType.JAVA_TO_JS_CALL, "k1", "v1"); // also test that child events aren't posted (only top-level events) evt2 = SpeedTracerLogger.start(DevModeEventType.CREATE_UI); evt2.end(); evt1.end(); // expect only first event expectedEvents.add(new DevModeEvent(evt1)); expectedSessions.add(session2); evt1 = SpeedTracerLogger.start(session1, DevModeEventType.JS_TO_JAVA_CALL, "k1", "v1"); evt1.end(); expectedEvents.add(new DevModeEvent(evt1)); expectedSessions.add(session1); // Finally, assert that the events and corresponding sessions sent to the // notifier are exactly as expected assertEquals("Events posted to dashboard do not match expected events!", expectedEvents, notifier.getEventSequence()); // Collect sessions associated with each event LinkedList<DevModeSession> actualSessions = new LinkedList<DevModeSession>(); for (DevModeEvent event : notifier.getEventSequence()) { actualSessions.add(event.getDevModeSession()); } // and confirm the sessions are correct assertEquals("Events posted to dashboard are associated with incorrect sessions!", expectedSessions, actualSessions); } finally { // restore system properties System.setProperties(props); } } }