/******************************************************************************* * Copyright (c) 2012 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Google, Inc. - initial API and implementation *******************************************************************************/ package com.windowtester.swt.event.recorder; import org.eclipse.swt.widgets.Display; import com.windowtester.recorder.IEventFilter; import com.windowtester.recorder.IEventRecorder; import com.windowtester.recorder.event.ISemanticEventListener; import com.windowtester.recorder.event.IUISemanticEvent; import com.windowtester.recorder.event.meta.RecorderErrorEvent; import com.windowtester.recorder.event.meta.RecorderTraceEvent; import com.windowtester.swt.event.model.SWTSemanticEventFactory; import com.windowtester.swt.event.model.factory.SWTSemanticEventFactoryImplV2; import com.windowtester.internal.debug.TraceHandler; /** * The main GUI test recorder. */ public class GuiTestRecorder implements IEventRecorder { /** A reference to an event watcher instance */ private SWTSemanticEventRecorder _recorder; /** A console reporting event listener (for debugging purposes) */ private ISemanticEventListener _consoleReportingListener = new ConsoleReportingListener(); /** The watched display */ private Display _display; /** * Create an instance. * @param display */ public GuiTestRecorder(Display display, int apiVersion) { _display = display; _recorder = initRecorder(apiVersion); _recorder.addListener(_consoleReportingListener); } /** * Create a recorder for the given api version. */ private SWTSemanticEventRecorder initRecorder(int apiVersion) { SWTSemanticEventRecorder recorder = new SWTSemanticEventRecorder(_display); if (apiVersion == 2) { SWTSemanticEventFactory.setStrategy(new SWTSemanticEventFactoryImplV2()); } return recorder; } /* (non-Javadoc) * @see com.windowtester.event.recorder.ISWTEventRecorder#start() */ public void start() { _recorder.start(); } /** * @see com.windowtester.recorder.IEventRecorder#pause() */ public void pause() { _recorder.pause(); } /** * @see com.windowtester.recorder.IEventRecorder#addHook(java.lang.String) */ public void addHook(String hookName) { _recorder.addHook(hookName); } /* (non-Javadoc) * @see com.windowtester.event.model.IEventRecorder#restart() */ public void restart() { _recorder.restart(); } /* (non-Javadoc) * @see com.windowtester.event.recorder.ISWTEventRecorder#stop() */ public void stop() { _recorder.stop(); } /* (non-Javadoc) * @see com.windowtester.event.model.IEventRecorder#write() */ public void write() { _recorder.write(); } /** * @see com.windowtester.recorder.IEventRecorder#terminate() */ public void terminate() { _recorder.terminate(); } /* (non-Javadoc) * @see com.windowtester.event.model.IEventRecorder#record(com.windowtester.swt.event.model.UISemanticEvent) */ public void record(IUISemanticEvent semanticEvent) { _recorder.record(semanticEvent); } /* (non-Javadoc) * @see com.windowtester.event.model.IEventRecorder#trace(com.windowtester.swt.event.model.RecorderTraceEvent) */ public void trace(RecorderTraceEvent event) { _recorder.trace(event); } /* (non-Javadoc) * @see com.windowtester.event.model.IEventRecorder#reportError(com.windowtester.swt.event.model.RecorderErrorEvent) */ public void reportError(RecorderErrorEvent event) { _recorder.reportError(event); } /* (non-Javadoc) * @see com.windowtester.event.model.IEventRecorder#addListener(com.windowtester.swt.event.model.ISemanticEventListener) */ public void addListener(ISemanticEventListener listener) { _recorder.addListener(listener); } /* (non-Javadoc) * @see com.windowtester.event.model.IEventRecorder#removeListener(com.windowtester.swt.event.model.ISemanticEventListener) */ public void removeListener(ISemanticEventListener listener) { _recorder.removeListener(listener); //_recorder.removeListener(_socketStreamingListener); //PQ: why are we removing here? } /* (non-Javadoc) * @see com.windowtester.recorder.IEventRecorder#toggleSpyMode() */ public void toggleSpyMode() { _recorder.toggleSpyMode(); } /** * A listener that reports recorded events to the console. (Useful for debugging.) * */ static class ConsoleReportingListener implements ISemanticEventListener { /** A describer used for stateful event descrptions */ //private EventDescriber _describer = new EventDescriber(); /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notify(com.windowtester.swt.event.model.IUISemanticEvent) */ public void notify(IUISemanticEvent event) { // String description = _describer.describe(event); // if (description != null) // System.out.println(description); String msg = event == null ? "null event" : event.toString(); TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, msg); } /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyStart() */ public void notifyStart() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS,"recording started"); } /** * @see com.windowtester.recorder.event.ISemanticEventListener#notifyAssertionHookAdded(java.lang.String) */ public void notifyAssertionHookAdded(String hookName) { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "hook added: " + hookName); } /* * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyPause() */ public void notifyPause() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "recording paused"); } /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyStop() */ public void notifyStop() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "recording stopped"); } /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyWrite() */ public void notifyWrite() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "recording written"); } /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyDispose() */ public void notifyDispose() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "display disposed"); } /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyRestart() */ public void notifyRestart() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "recording restarted"); } /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyError(com.windowtester.swt.event.model.RecorderErrorEvent) */ public void notifyError(RecorderErrorEvent event) { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "an internal error occured: " + event); } /* (non-Javadoc) * @see com.windowtester.swt.event.model.ISemanticEventListener#notifyTrace(com.windowtester.swt.event.model.RecorderTraceEvent) */ public void notifyTrace(RecorderTraceEvent event) { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "a trace event was sent: " + event); } public void notifyControllerStart(int port) { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "controller started on port " + port); } public void notifyDisplayNotFound() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "display disposed"); } public void notifySpyModeToggle() { TraceHandler.trace(IEventRecorderPluginTraceOptions.RECORDER_EVENTS, "spy mode toggled"); } } /** * @see com.windowtester.recorder.IEventRecorder#addEventFilter(com.windowtester.recorder.IEventFilter) */ public void addEventFilter(IEventFilter filter) { _recorder.addEventFilter(filter); } /** * @see com.windowtester.recorder.IEventRecorder#removeEventFilter(com.windowtester.recorder.IEventFilter) */ public void removeEventFilter(IEventFilter filter) { _recorder.removeEventFilter(filter); } /* (non-Javadoc) * @see com.windowtester.recorder.IEventRecorder#isRecording() */ public boolean isRecording() { return _recorder.isRecording(); } }