package com.windowtester.test.recorder.ui;
import junit.framework.TestCase;
import com.windowtester.recorder.ui.EventSequenceModel;
import com.windowtester.recorder.ui.IEventSequenceModel;
import com.windowtester.recorder.ui.IRecorderPanelModel;
import com.windowtester.recorder.ui.RecorderPanelModel;
import com.windowtester.recorder.ui.RecorderUI;
import com.windowtester.recorder.ui.IRecorderPanelModel.IChangeListener;
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 RecorderPanelModelTest extends TestCase {
public void testInitialState() {
IRecorderPanelModel model = getPanelModel();
assertInitialState(model);
}
private void assertInitialState(IRecorderPanelModel model) {
assertOutOfSession(model);
assertRecordDisabled(model);
assertPauseDisabled(model);
assertRestartDisabled(model);
assertHookDisabled(model);
}
public void testInitialStateRestoredAfterSessionEnd() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
model.sessionEnded();
assertInitialState(model);
}
public void testSessionStartAndStop() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
assertInSession(model);
model.sessionEnded();
assertOutOfSession(model);
}
public void testSecondSession() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
assertInSession(model);
model.sessionEnded();
assertOutOfSession(model);
model.sessionStarted();
assertInSession(model);
}
public void testRecordButtonEnablement() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
assertRecordEnabled(model);
model.clickRecord();
assertRecordDisabled(model);
assertPauseEnabled(model);
assertRestartEnabled(model);
}
public void testHookButtonEnablement() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
assertHookEnabled(model);
model.sessionEnded();
assertHookDisabled(model);
}
public void testPauseButtonEnablement() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
model.clickRecord();
model.clickPause();
assertPauseDisabled(model);
assertRecordEnabled(model);
}
public void testRestartButtonEnabledOnlyWhenEventsRecorded() {
IEventSequenceModel seqModel = new EventSequenceModel();
IRecorderPanelModel model = new RecorderPanelModel(seqModel);
model.sessionStarted();
assertRestartDisabled(model);
seqModel.add(new ISemanticEvent(){});
assertRestartEnabled(model);
}
public void testNoModelChangesFiredWhenPauseClickedAndSessionIsIdle() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
ChangeListener cl = addChangeListener(model);
model.clickPause();
assertFalse(cl.wasChanged());
}
public void testModelChangesFiredWhenRecordClickedAndSessionIsIdle() {
IRecorderPanelModel model = getPanelModel();
model.sessionStarted();
ChangeListener cl = addChangeListener(model);
model.clickRecord();
assertTrue(cl.wasChanged());
}
class ChangeListener implements IChangeListener {
int _changeCount;
public void panelChanged() {
_changeCount++;
}
int count() {
return _changeCount;
}
boolean wasChanged() {
return count() > 0;
}
void reset() {
_changeCount = 0;
}
}
private ChangeListener addChangeListener(IRecorderPanelModel model) {
ChangeListener listener = new ChangeListener();
model.addListener(listener);
return listener;
}
private void assertRecordDisabled(IRecorderPanelModel model) {
assertFalse(model.isRecordEnabled());
}
private void assertRestartEnabled(IRecorderPanelModel model) {
assertTrue(model.isRestartEnabled());
}
private void assertRestartDisabled(IRecorderPanelModel model) {
assertFalse(model.isRestartEnabled());
}
private void assertPauseDisabled(IRecorderPanelModel model) {
assertFalse(model.isPauseEnabled());
}
private void assertPauseEnabled(IRecorderPanelModel model) {
assertTrue(model.isPauseEnabled());
}
private void assertRecordEnabled(IRecorderPanelModel model) {
assertTrue(model.isRecordEnabled());
}
private IRecorderPanelModel getPanelModel() {
return RecorderUI.getPanelModel();
}
private void assertOutOfSession(IRecorderPanelModel model) {
assertFalse(model.inSession());
}
private void assertInSession(IRecorderPanelModel model) {
assertTrue(model.inSession());
}
private void assertHookEnabled(IRecorderPanelModel model) {
assertTrue(model.isHookEnabled());
}
private void assertHookDisabled(IRecorderPanelModel model) {
assertFalse(model.isHookEnabled());
}
}