package org.robotframework.javalib.library; import org.jmock.MockObjectTestCase; import org.robotframework.javalib.beans.annotation.KeywordBeanLoader; import java.lang.reflect.Field; public class AnnotationLibraryTest extends MockObjectTestCase { private AnnotationLibrary annotationLibrary; private String keywordPattern = "somePattern"; private KeywordBeanLoader beanLoaderAtInitialization; private KeywordBeanLoader beanLoaderAfterSettingKeywordPattern; protected void setUp() throws Exception { annotationLibrary = new AnnotationLibrary(); beanLoaderAtInitialization = extractBeanLoaderFromAnnotationLibrary(); annotationLibrary.addKeywordPattern(keywordPattern); beanLoaderAfterSettingKeywordPattern = extractBeanLoaderFromAnnotationLibrary(); } public void testThrowsExceptionIfKeywordPatternIsNotSet() throws Exception { try { new AnnotationLibrary().getKeywordNames(); fail("Expected IllegalStateException to be thrown."); } catch (IllegalStateException e) { assertEquals("Keyword pattern must be set before calling getKeywordNames.", e.getMessage()); } } public void testCreatesNewBeanLoaderWhenKeywordPatternSet() throws Exception { assertNotSame(beanLoaderAtInitialization, beanLoaderAfterSettingKeywordPattern); } public void testSetsKeywordPatternToBeanLoader() throws Exception { String extractedKeywordPattern = extractKeywordPatternFrom(beanLoaderAfterSettingKeywordPattern); assertEquals(keywordPattern, extractedKeywordPattern); } private String extractKeywordPatternFrom(KeywordBeanLoader beanLoader) throws IllegalAccessException { for (Field f: fields(beanLoader)) { if (f.getName().equals("keywordPattern")) { f.setAccessible(true); return (String) f.get(beanLoader); } } return null; } private Field[] fields(KeywordBeanLoader beanLoader) { return beanLoader.getClass().getDeclaredFields(); } private KeywordBeanLoader extractBeanLoaderFromAnnotationLibrary() { try { return (KeywordBeanLoader) annotationLibrary.beanLoaders.get(0); } catch (IndexOutOfBoundsException e){ return null; } } }