package com.windowtester.test.codegen;
import java.util.Arrays;
import java.util.Collection;
import junit.framework.TestCase;
import com.windowtester.codegen.ExecutionProfile;
import com.windowtester.codegen.SourceStringBuilder;
import com.windowtester.codegen.TestCaseGenerator;
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.eventstream.EventStream;
import com.windowtester.codegen.generator.CodegenSettings;
import com.windowtester.codegen.generator.NewAPICodeBlockBuilder;
import com.windowtester.codegen.generator.PluggableCodeGenerator;
import com.windowtester.codegen.generator.ICodegenAdvisor.Advice;
import com.windowtester.codegen.generator.setup.SetupHandlerSet;
import com.windowtester.codegen.swt.SWTV2TestCaseBuilder;
import com.windowtester.internal.runtime.util.StringUtils;
import com.windowtester.recorder.event.user.SemanticWidgetSelectionEvent;
import com.windowtester.recorder.event.user.UISemanticEvent;
/*******************************************************************************
* 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 abstract class BaseSWTAPICodeBlockCodegenTest extends TestCase {
public static EventStream stream(UISemanticEvent ... events) {
return new EventStream(Arrays.asList(events));
}
private NewAPICodeBlockBuilder builder;
private SWTV2TestCaseBuilder testBuilder;
private final TestCaseGenerator generator = new PluggableCodeGenerator(getTestCaseBuilder(), getBuilder(), getCodegenSettings()) {
/* (non-Javadoc)
* @see com.windowtester.codegen.generator.PluggableCodeGenerator#getAdvice(com.windowtester.recorder.event.user.SemanticWidgetSelectionEvent)
*/
@Override
protected Advice getAdvice(SemanticWidgetSelectionEvent event) {
return new Advice() {
/* (non-Javadoc)
* @see com.windowtester.codegen.generator.ICodegenAdvisor.Advice#isOverriden()
*/
@Override
public boolean isOverriden() {
return false;
}
};
}
};
public static final String NEW_LINE = StringUtils.NEW_LINE;
protected NewAPICodeBlockBuilder getBuilder() {
if (builder == null) {
builder = new NewAPICodeBlockBuilder(getTestCaseBuilder());
}
return builder;
}
protected SWTV2TestCaseBuilder getTestCaseBuilder() {
if (testBuilder == null)
testBuilder = createTestBuilder();
return testBuilder;
}
protected SWTV2TestCaseBuilder createTestBuilder() {
return new SWTV2TestCaseBuilder("MockTest", "mock", null, null, getExecType()).withSettings(getCodegenSettings());
}
protected int getExecType() {
return ExecutionProfile.RCP_EXEC_TYPE;
}
protected void assertImportsContain(Class<?> cls) {
assertTrue(getTestCaseBuilder().getImports().contains(new ImportUnit(cls.getName())));
}
protected void assertImportsDoNotContain(Class<?> cls) {
assertFalse(getTestCaseBuilder().getImports().contains(new ImportUnit(cls.getName())));
}
protected void assertEquals(String expected, CodeBlock block) {
assertEquals(expected, block.toString().trim());
}
public MethodUnit getSetupMethod() {
return getMethod("setUp");
}
public MethodUnit getTestMethod() {
return getMethod("testMock");
}
@SuppressWarnings("unchecked")
public MethodUnit getMethod(String name) {
Collection<MethodUnit> methods = getTestCaseBuilder().getMethods();
for (MethodUnit m : methods) {
System.out.println(m.getName());
if (name.equals(m.getName()))
return m;
}
return null;
}
CodegenSettings getCodegenSettings() {
return CodegenSettings.forStatics(usingStatics()).withHandlers(getHandlers());
}
protected boolean usingStatics() {
return true;
}
protected SetupHandlerSet getHandlers() {
return new SetupHandlerSet();
}
protected String generate(UISemanticEvent ... events) {
return generator.generate(stream(events));
}
@SuppressWarnings("unchecked")
protected void assertImportsContainAsString(String importString) {
Collection<ImportUnit> imports = getTestCaseBuilder().getImports();
for (ImportUnit imprt : imports) {
SourceStringBuilder strBuilder = new SourceStringBuilder(getTestCaseBuilder());
StringBuffer sb = new StringBuffer();
strBuilder.addImport(sb, imprt);
if (importString.equals(sb.toString()))
return;
}
fail("Import String: <" + importString + "> not found in: " + Arrays.toString(imports.toArray()));
}
@SuppressWarnings("unchecked")
protected void assertImportsDoNotContainAsString(String importString) {
Collection<ImportUnit> imports = getTestCaseBuilder().getImports();
for (ImportUnit imprt : imports) {
SourceStringBuilder strBuilder = new SourceStringBuilder(getTestCaseBuilder());
StringBuffer sb = new StringBuffer();
strBuilder.addImport(sb, imprt);
if (importString.equals(sb.toString()))
fail("Import String <" + importString +"> should not be found but was");
}
}
}