package org.robotframework.javalib.library;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jmock.Mock;
import org.jmock.MockObjectTestCase;
import org.robotframework.javalib.annotation.RobotKeyword;
import org.robotframework.javalib.annotation.RobotKeywords;
import org.robotframework.javalib.beans.annotation.IBeanLoader;
import org.robotframework.javalib.beans.common.IClassFilter;
import org.robotframework.javalib.util.ArrayUtil;
public class AnnotationLibraryLoadingBeansTest extends MockObjectTestCase {
private AnnotationLibrary annotationLibrary = new AnnotationLibrary();
public void testLoadsKeywordClassesWithBeanLoader() throws Exception {
injectBeanDefinitionsToAnnotationLibrary();
String[] expectedKeywordNames = new String[] { "someKeyword", "anotherKeyword" };
ArrayUtil.assertArraysContainSame(expectedKeywordNames, annotationLibrary.getKeywordNames());
}
private void injectBeanDefinitionsToAnnotationLibrary() {
Mock beanLoader = mock(IBeanLoader.class);
IClassFilter classFilter = (IClassFilter) mock(IClassFilter.class).proxy();
IBeanLoader proxy = (IBeanLoader) beanLoader.proxy();
List<IBeanLoader> beanLoaders = new ArrayList<IBeanLoader>();
beanLoaders.add(proxy);
annotationLibrary.beanLoaders = beanLoaders;
annotationLibrary.classFilter = classFilter;
beanLoader.expects(once()).method("loadBeanDefinitions")
.with(eq(classFilter))
.will(returnValue(createKeywordBeans()));
}
private Map createKeywordBeans() {
return new HashMap() {{
put("keywordsBean1", new SomeKeywords());
put("keywordsBean2", new AnotherKeywords());
}};
}
@RobotKeywords
private static class SomeKeywords {
@RobotKeyword
public void someKeyword() { }
}
@RobotKeywords
private static class AnotherKeywords {
@RobotKeyword
public void anotherKeyword() { }
}
}