package jp.vmi.selenium.selenese.inject;
import java.util.Arrays;
import org.aopalliance.intercept.MethodInterceptor;
import com.google.inject.AbstractModule;
import com.google.inject.matcher.Matchers;
/**
* Bind interceptors for test-suite/test-case execution.
*
* If you want to add your custom interceptors, you extends this class
* and override get***Interceptors() which return your interceptors.
*/
public class BindModule extends AbstractModule {
@Override
protected void configure() {
bindInterceptor(Matchers.any(), Matchers.annotatedWith(DoCommand.class), getDoCommandInterceptors());
bindInterceptor(Matchers.any(), Matchers.annotatedWith(ExecuteTestCase.class), getExecuteTestCaseInterceptors());
bindInterceptor(Matchers.any(), Matchers.annotatedWith(ExecuteTestSuite.class), getExecuteTestSuiteInterceptors());
}
/**
* Prepend custom interceptors to original interceptors.
*
* @param <T> subclass of {@link MethodInterceptor}.
* @param originItcs array of original interceptors.
* @param customItcs custom interceptors.
* @return modified array of interceptors.
*/
@SafeVarargs
protected static <T extends MethodInterceptor> T[] prependInterceptors(T[] originItcs, T... customItcs) {
if (customItcs.length == 0)
return originItcs;
T[] newItcs = Arrays.copyOf(customItcs, customItcs.length + originItcs.length);
System.arraycopy(originItcs, 0, newItcs, customItcs.length, originItcs.length);
return newItcs;
}
/**
* Append custom interceptors to original interceptors.
*
* @param <T> subclass of {@link MethodInterceptor}.
* @param originItcs array of original interceptors.
* @param customItcs custom interceptors.
* @return modified array of interceptors.
*/
@SafeVarargs
protected static <T extends MethodInterceptor> T[] appendInterceptors(T[] originItcs, T... customItcs) {
if (customItcs.length == 0)
return originItcs;
T[] newItcs = Arrays.copyOf(originItcs, originItcs.length + customItcs.length);
System.arraycopy(customItcs, 0, newItcs, originItcs.length, customItcs.length);
return newItcs;
}
/**
* Get DoCommand interceptors.
*
* @return DoCommand interceptors.
*/
protected AbstractDoCommandInterceptor[] getDoCommandInterceptors() {
return new AbstractDoCommandInterceptor[] {
new MaxTimeInterruptInterceptor(), /* 1st */
new CommandLogInterceptor(), /* 2nd */
new HighlightInterceptor(), /* 3rd */
new ScreenshotInterceptor() /* 4th */
};
}
/**
* Get ExecuteTestCase interceptors.
*
* @return ExecuteTestCase interceptors.
*/
protected AbstractExecuteTestCaseInterceptor[] getExecuteTestCaseInterceptors() {
return new AbstractExecuteTestCaseInterceptor[] {
new ExecuteTestCaseInterceptor()
};
}
/**
* Get ExecuteTestSuite interceptors.
*
* @return ExecuteTestSuite interceptors.
*/
protected AbstractExecuteTestSuiteInterceptor[] getExecuteTestSuiteInterceptors() {
return new AbstractExecuteTestSuiteInterceptor[] {
new ExecuteTestSuiteInterceptor()
};
}
}