package com.canoo.webtest.engine;
import junit.framework.TestCase;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.taskdefs.Sleep;
import com.canoo.webtest.ant.WebtestTask;
import com.canoo.webtest.interfaces.IWebtestCustomizer;
import com.canoo.webtest.reporting.StepExecutionListener;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.util.WebConnectionWrapper;
/**
* @author Ardeshir Arfaian
*/
public class DefaultWebtestCustomizerTest extends TestCase {
private Project project;
private WebtestTask webTest;
private Configuration config;
private Context context;
public void setUp() {
project = new Project();
webTest = new WebtestTask();
webTest.setProject(project);
webTest.setName("TestWebTest");
config = new Configuration(webTest);
context = new Context(webTest);
config.setProject(project);
config.setContext(context);
}
public void testNoReference() {
final Context context = new Context(webTest);
config = new Configuration();
config.setProject(project);
config.setContext(context);
config.execute();
assertEquals(DefaultWebtestCustomizer.class, webTest.getWebtestCustomizer().getClass());
assertEquals(WebClient.class, context.getWebClient().getClass());
assertEquals(CSVTracingWebConnection.class, context.getWebClient().getWebConnection().getClass());
}
public void testCustomWebtestCustomizer() {
project.addReference("wt.webtestCustomizer", new IWebtestCustomizer() {
public StepExecutionListener createExecutionListener(WebtestTask wt) {
return new StepExecutionListener(wt.getConfig().getContext());
}
public WebClient customizeWebClient(WebClient wc) {
new WebConnectionWrapper(wc);
return wc;
}
});
webTest.setProject(project);
config.execute();
assertNotSame(DefaultWebtestCustomizer.class, webTest.getWebtestCustomizer().getClass());
assertEquals(WebClient.class, context.getWebClient().getClass());
assertEquals(CSVTracingWebConnection.class, context.getWebClient().getWebConnection().getClass());
}
public void testWrongTypeReference() {
boolean isCatched = false;
project.addReference("wt.webtestCustomizer", new Object());
try {
webTest.setProject(project);
} catch (BuildException be) {
isCatched = true;
}
assertTrue("Wrong reference didn't cause an exception", isCatched);
config.execute();
assertEquals(DefaultWebtestCustomizer.class, webTest.getWebtestCustomizer().getClass());
assertEquals(WebClient.class, context.getWebClient().getClass());
}
public void testAllMethodsInvoked() {
class DummyCustomizerImpl implements IWebtestCustomizer {
private boolean isCreateExecutionListenerInvoked = false;
private boolean isCustomizeWebClientInvoked = false;
public StepExecutionListener createExecutionListener(WebtestTask wt) {
isCreateExecutionListenerInvoked = true;
return new StepExecutionListener(wt.getConfig().getContext());
}
public WebClient customizeWebClient(WebClient wc) {
isCustomizeWebClientInvoked = true;
return wc;
}
};
DummyCustomizerImpl dummyCustomizer = new DummyCustomizerImpl();
project.addReference("wt.webtestCustomizer", dummyCustomizer);
webTest.setProject(project);
final Sleep dummyTask = new Sleep();
dummyTask.setMilliseconds(0);
dummyTask.setProject(project);
webTest.addTask(dummyTask);
Target target = new Target();
target.setProject(project);
webTest.setOwningTarget(target);
webTest.execute();
assertTrue(dummyCustomizer.isCreateExecutionListenerInvoked);
assertTrue(dummyCustomizer.isCustomizeWebClientInvoked);
}
public void testNullReference() {
project.addReference("wt.webtestCustomizer", null);
webTest.setProject(project);
config.execute();
assertEquals(DefaultWebtestCustomizer.class, webTest.getWebtestCustomizer().getClass());
assertEquals(WebClient.class, context.getWebClient().getClass());
}
}