/*******************************************************************************
* 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.test.recorder.ui;
import static com.windowtester.test.codegen.CodeGenFixture.fakeKeyEntry;
import static com.windowtester.test.codegen.CodeGenFixture.fakeSelectEvent;
import static com.windowtester.test.recorder.ui.FakeEvents.buttonSelect1;
import static com.windowtester.test.recorder.ui.FakeEvents.buttonSelect2;
import static com.windowtester.test.recorder.ui.FakeEvents.buttonSelect3;
import static com.windowtester.test.recorder.ui.FakeEvents.keyA;
import static com.windowtester.test.recorder.ui.FakeEvents.keyB;
import static com.windowtester.test.recorder.ui.FakeEvents.keyCR;
import static com.windowtester.test.recorder.ui.FakeEvents.keyTAB;
import junit.framework.TestCase;
import org.eclipse.swt.widgets.Button;
import com.windowtester.recorder.ui.EventSequenceOptimizer;
import com.windowtester.recorder.ui.events.EventParser;
import com.windowtester.runtime.swt.locator.ButtonLocator;
import com.windowtester.ui.core.model.IEventSequence;
import com.windowtester.ui.internal.corel.model.Event;
import com.windowtester.ui.internal.corel.model.EventSequence;
/**
* @author Phil Quitslund
*
* @see {@link ParsedEventSequenceTest}
*/
public class EventSequenceOptimizerTest extends TestCase {
private IEventSequence sequence = new EventSequence();;
public void testA() throws Exception {
addEvents(fakeKeyEntry('f'), fakeKeyEntry('o'), fakeKeyEntry('o'), fakeSelectEvent(Button.class, new ButtonLocator("OK")));
assertEquals(2, sequence.getEvents().length);
}
public void testB() throws Exception {
addEvents(buttonSelect1, fakeKeyEntry('f'), fakeKeyEntry('o'), fakeKeyEntry('o'), buttonSelect2);
assertEquals(3, sequence.getEvents().length);
assertEquals(buttonSelect1, sequence.getEvents()[0]);
assertEquals(buttonSelect2, sequence.getEvents()[2]);
}
public void testC() throws Exception {
addAndOptimize(sequence, fakeKeyEntry('h'));
addAndOptimize(sequence, fakeKeyEntry('o'));
addAndOptimize(sequence, buttonSelect1);
addAndOptimize(sequence, fakeKeyEntry('h'));
addAndOptimize(sequence, fakeKeyEntry('o'));
addAndOptimize(sequence, buttonSelect2);
addAndOptimize(sequence, fakeKeyEntry('h'));
addAndOptimize(sequence, fakeKeyEntry('o'));
addAndOptimize(sequence, buttonSelect3);
assertEquals(6, sequence.getEvents().length);
assertEquals(buttonSelect1, sequence.getEvents()[1]);
assertEquals(buttonSelect2, sequence.getEvents()[3]);
assertEquals(buttonSelect3, sequence.getEvents()[5]);
}
public void testTabs() throws Exception {
addEvents(keyA, keyTAB, keyB);
assertEquals(keyA, sequence.getEvents()[0]);
assertEquals(keyTAB, sequence.getEvents()[1]);
assertEquals(keyB, sequence.getEvents()[2]);
}
// public void testBackspaceClobbers() throws Exception {
// addEvents(keyA, keyBackSpace, keyB, buttonSelect1);
// assertEquals(keyB, sequence.getEvents()[0]);
// assertEquals(buttonSelect1, sequence.getEvents()[1]);
// }
//
// public void testBackspaceClobbers2() throws Exception {
// addEvents(keyA, keyB, keyBackSpace, keyBackSpace, keyC, buttonSelect1);
// assertEquals(keyC, sequence.getEvents()[0]);
// assertEquals(buttonSelect1, sequence.getEvents()[1]);
// }
public void testTerminators() throws Exception {
assertTerminates(keyTAB, keyCR);
}
private void assertTerminates(Event ...events) {
for (Event event : events) {
assertTrue(EventParser.isTextEventTerminator(event));
}
}
private void addEvents(Event ... events) {
for (Event event : events) {
sequence.add(event);
EventSequenceOptimizer.optimize(sequence);
}
}
private IEventSequence addAndOptimize(IEventSequence sequence, Event event) {
sequence.add(event);
EventSequenceOptimizer.optimize(sequence);
return sequence;
}
}