package com.windowtester.test.recorder.ui; import junit.framework.TestCase; import com.windowtester.eclipse.ui.session.ISession; import com.windowtester.eclipse.ui.session.ISessionMonitor; import com.windowtester.eclipse.ui.views.RecorderConsolePresenter; import com.windowtester.recorder.ui.EventSequenceModel; import com.windowtester.recorder.ui.IEventSequenceModel; import com.windowtester.recorder.ui.IEventSequenceView; import com.windowtester.recorder.ui.IRecorderConsoleActionHandler; import com.windowtester.recorder.ui.IRecorderPanelModel; import com.windowtester.recorder.ui.IRecorderPanelView; import com.windowtester.recorder.ui.RecorderConsoleActionAdapter; import com.windowtester.recorder.ui.RecorderPanelModel; import com.windowtester.ui.core.model.ISemanticEvent; /******************************************************************************* * 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 *******************************************************************************/ public class RecorderConsolePresenterTest extends TestCase { static class StubPanelView implements IRecorderPanelView { public void addHandler(IRecorderConsoleActionHandler listener) {} public void setDeleteEnabled(boolean isEnabled) {} public void setPauseEnabled(boolean isEnabled) {} public void setRecordEnabled(boolean isEnabled) {} public void setCodegenEnabled(boolean isEnabled) {} public void clickDelete() {} public void clickPause() {} public void clickRecord() {} public void clickRestart() {} public void clickCodegen() {} public void clickAddHook() {} public void clearSessionState() {} public void clickSpyMode() {} public void removeHandler(IRecorderConsoleActionHandler handler) {} } static class StubSequenceView implements IEventSequenceView { public void clickCodegen() {} public void setCodegenEnabled(boolean enabled) {} public void refresh() {} } public void testRecordClickCausesJustOneViewUpdate() { IRecorderPanelModel model = new RecorderPanelModel(); final int[] setCount = new int[1]; IRecorderPanelView view = new StubPanelView() { @Override public void setPauseEnabled(boolean isEnabled) { setCount[0]++; } }; presenter(model, view); model.sessionStarted(); assertEquals(1, setCount[0]); model.clickRecord(); assertEquals(2, setCount[0]); } public void testSessionStartCausesViewUpdate() { IRecorderPanelModel model = new RecorderPanelModel(); final int[] setCount = new int[1]; IRecorderPanelView view = new StubPanelView() { @Override public void setPauseEnabled(boolean isEnabled) { setCount[0]++; } }; presenter(model, view); model.sessionStarted(); assertEquals(1, setCount[0]); } public void testSessionEndCausesViewUpdate() { IRecorderPanelModel model = new RecorderPanelModel(); final int[] setCount = new int[1]; IRecorderPanelView view = new StubPanelView() { @Override public void setPauseEnabled(boolean isEnabled) { setCount[0]++; } }; presenter(model, view); model.sessionStarted(); int current = setCount[0]; model.sessionEnded(); assertEquals(current+1, setCount[0]); } public void testSessionStartCausesSequenceClear() { IRecorderPanelModel panelModel = new RecorderPanelModel(); IRecorderPanelView panelView = new StubPanelView(); IEventSequenceModel eventModel = new EventSequenceModel(); IEventSequenceView eventView = new StubSequenceView(); RecorderConsolePresenter presenter = presenter(panelModel, panelView, eventModel, eventView); presenter.sessionStarted(); eventModel.add(new ISemanticEvent(){}); presenter.sessionEnded(); presenter.sessionStarted(); assertEquals(0, eventModel.getEvents().length); } //tested here because presenter sets up listeners... public void testCodegenDisabledIfSeqEmpty() { IRecorderPanelModel panelModel = new RecorderPanelModel(); IRecorderPanelView panelView = new StubPanelView(); IEventSequenceModel eventModel = new EventSequenceModel(); IEventSequenceView eventView = new StubSequenceView(); presenter(panelModel, panelView, eventModel, eventView); assertFalse(panelModel.isCodegenEnabled()); } public void testCodegenEnabledIfSeqNotEmpty() { IRecorderPanelModel panelModel = new RecorderPanelModel(); IRecorderPanelView panelView = new StubPanelView(); IEventSequenceModel eventModel = new EventSequenceModel(); IEventSequenceView eventView = new StubSequenceView(); presenter(panelModel, panelView, eventModel, eventView); eventModel.add(new ISemanticEvent(){}); assertTrue(panelModel.isCodegenEnabled()); } public void testDeleteDisabledIfSelectionEmpty() { IRecorderPanelModel panelModel = new RecorderPanelModel(); IRecorderPanelView panelView = new StubPanelView(); IEventSequenceModel eventModel = new EventSequenceModel(); IEventSequenceView eventView = new StubSequenceView(); presenter(panelModel, panelView, eventModel, eventView); //ISemanticEvent event = new ISemanticEvent(){}; //eventModel.add(event); assertFalse(panelModel.isDeleteEnabled()); } public void testDeleteEnabledIfSelectionNotEmpty() { IRecorderPanelModel panelModel = new RecorderPanelModel(); IRecorderPanelView panelView = new StubPanelView(); IEventSequenceModel eventModel = new EventSequenceModel(); IEventSequenceView eventView = new StubSequenceView(); presenter(panelModel, panelView, eventModel, eventView); ISemanticEvent event = new ISemanticEvent(){}; eventModel.add(event); eventModel.select(new ISemanticEvent[]{event}); assertTrue(panelModel.isDeleteEnabled()); } private RecorderConsolePresenter presenter(IRecorderPanelModel model, IRecorderPanelView view) { return presenter(model, view, new EventSequenceModel(), new StubSequenceView()); } private RecorderConsolePresenter presenter(IRecorderPanelModel model, IRecorderPanelView view, IEventSequenceModel eventSequenceModel, IEventSequenceView eventSequenceView) { return new RecorderConsolePresenter(model, view, eventSequenceModel, eventSequenceView) { @Override protected ISessionMonitor getSessionMonitor() { return new ISessionMonitor() { public void addListener(ISessionListener listener) { //no-op } public ISession getCurrent() { return null; } public boolean inSession() { return false; } public void removeListener(ISessionListener listener) { //no-op } public void sessionEnded(ISession session) { //no-op } public void sessionStarted(ISession session) { //no-op } }; } @Override public IRecorderConsoleActionHandler getCodegenHandler() { return new RecorderConsoleActionAdapter(); } }; } }