/*******************************************************************************
* 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.codegen.swing;
import java.awt.event.KeyEvent;
import com.windowtester.codegen.ExecutionProfile;
import com.windowtester.codegen.TestCaseBuilder;
import com.windowtester.codegen.assembly.block.CodeBlock;
import com.windowtester.codegen.assembly.unit.ImportUnit;
import com.windowtester.codegen.assembly.unit.MethodUnit;
import com.windowtester.codegen.assembly.unit.Modifier;
import com.windowtester.recorder.event.user.SemanticKeyDownEvent;
import com.windowtester.runtime.IUIContext;
import com.windowtester.runtime.swing.UITestCaseSwing;
/**
* Test case builder for Swing applications
*/
public class SwingTestCaseBuilder extends TestCaseBuilder {
private static final String TESTCASE_BASE_CLASS = "UITestCaseSwing";
private static final String[] DEFAULT_IMPORTS = new String[] {
UITestCaseSwing.class.getName(),
IUIContext.class.getName()
};
private final String _mainSwingType;
private final String[] _progArgs;
public SwingTestCaseBuilder(String name, String pkg, ExecutionProfile profile) {
this(name, pkg, profile.getMainSwtClassName(), profile.getProgramArgs());
}
public SwingTestCaseBuilder(String name, String pkg, String mainSwingType, String [] progArgs) {
super(name, pkg);
_mainSwingType = mainSwingType;
_progArgs = progArgs;
setExtends(TESTCASE_BASE_CLASS);
}
/*
* Override SWT defaults.
*
* @see com.windowtester.codegen.TestCaseBuilder#addBoilerPlateImports()
*/
protected void addBoilerPlateImports() {
for (int i = 0; i < DEFAULT_IMPORTS.length; i++) {
addImport(new ImportUnit(DEFAULT_IMPORTS[i]));
}
}
/**
* Get the boiler plate test constructor.
*
* @see com.windowtester.codegen.TestCaseBuilder#getConsMethod()
*/
protected MethodUnit getConsMethod() {
MethodUnit m = new MethodUnit(getName());
StringBuffer com = new StringBuffer();
com.append("/**").append(NEW_LINE).append("* Create an Instance").append(NEW_LINE).
append(" */");
m.setComment(com.toString());
m.setConstructor(true);
m.addModifier(Modifier.PUBLIC);
//m.addParameter(new Parameter("String", "testName"));
StringBuffer sb = new StringBuffer();
sb.append("super(").append(_mainSwingType).append(".class");
if (_progArgs != null && _progArgs.length != 0)
sb.append(", "). append(stringify(_progArgs));
sb.append(");").append(NEW_LINE);
CodeBlock block = new CodeBlock(sb.toString());
m.setBody(block);
return m;
}
/*
* @see com.windowtester.codegen.TestCaseBuilder#getUIContextTypeName()
*/
public String getUIContextTypeName() {
return "IUIContext";
}
/*
* @see com.windowtester.codegen.ISourceTypeBuilder#getExtends()
*/
public String getExtends() {
return "UITestCaseSwing";
}
/**
* @see com.windowtester.codegen.TestCaseBuilder#getUIContextGetterName()
*/
public String getUIContextGetterName() {
return "getUI()";
}
/* (non-Javadoc)
* @see com.windowtester.codegen.ITestCaseBuilder#parseControlKey(com.windowtester.recorder.event.user.SemanticKeyDownEvent)
*/
public String parseControlKey(SemanticKeyDownEvent kde) {
String key = kde.getKey();
if (isTab(key))
return "KeyEvent.VK_TAB"; //"SWT.TAB";
if (isEnter(key))
return "KeyEvent.VK_ENTER"; //"SWT.CR";
switch(kde.getKeyCode()) {
case KeyEvent.VK_RIGHT :
return "KeyEvent.VK_RIGHT";
case KeyEvent.VK_LEFT :
return "KeyEvent.VK_LEFT";
case KeyEvent.VK_UP :
return "KeyEvent.VK_UP";
case KeyEvent.VK_DOWN :
return "KeyEvent.VK_DOWN";
default :
return null;
}
}
/* (non-Javadoc)
* @see com.windowtester.codegen.TestCaseBuilder#getControlKey()
*/
public String getControlKey() {
return "KeyEvent.VK_CONTROL";
}
private static String stringify(String[] progArgs) {
StringBuffer sb = new StringBuffer();
sb.append("new String[]{");
for (int i = 0; i < progArgs.length; i++) {
//ignore ","s
if (progArgs[i].trim().equals(","))
continue;
//ignore empty args
if (progArgs[i].trim().equals(""))
continue;
sb.append("\"").append(progArgs[i]).append("\"");
if (i+1 < progArgs.length)
sb.append(", ");
}
sb.append("}");
return sb.toString();
}
}