package org.robotframework.javalib.library;
import org.jmock.Mock;
import org.jmock.MockObjectTestCase;
import org.robotframework.javalib.factory.KeywordFactory;
import org.robotframework.javalib.keyword.Keyword;
import org.robotframework.javalib.library.KeywordFactoryBasedLibrary;
public class KeywordFactoryBasedLibraryTest extends MockObjectTestCase {
private KeywordFactoryBasedLibrary<Keyword> library;
private Mock mockKeywordFactory;
private Mock mockKeyword;
private String keywordName = "Keyword Name";;
protected void setUp() throws Exception {
mockKeyword = mock(Keyword.class);
mockKeywordFactory = mock(KeywordFactory.class);
mockKeywordFactory.stubs().method("createKeyword")
.with(eq(keywordName))
.will(returnValue(mockKeyword.proxy()));
library = new KeywordFactoryBasedLibrary<Keyword>() {
protected KeywordFactory createKeywordFactory() {
return (KeywordFactory) mockKeywordFactory.proxy();
}
};
}
public void testUsesKeywordFactoryToCreateInstanceOfKeyword() throws Exception {
mockKeyword.stubs().method("execute");
mockKeywordFactory.reset();
mockKeywordFactory.expects(once()).method("createKeyword")
.with(eq(keywordName))
.will(returnValue(mockKeyword.proxy()));
library.runKeyword(keywordName, null);
}
public void testGetsKeywordNamesFromFactory() throws Exception {
mockKeywordFactory.expects(once()).method("getKeywordNames")
.will(returnValue(new String[0]));
library.getKeywordNames();
}
public void testExecutesKeyword() throws Exception {
Object[] args = new Object[0];
mockKeyword.stubs().method("execute")
.with(eq(args));
library.runKeyword(keywordName, args);
}
public void testExecutionPassesKeywordReturnValue() throws Exception {
String keywordReturnValue = "Return Value";
mockKeyword.stubs().method("execute")
.will(returnValue(keywordReturnValue));
assertEquals(keywordReturnValue, library.runKeyword(keywordName, null));
}
public void testRunningAKeywordCreatesKeywordFactory() throws Exception {
MockKeywordFactoryBasedLibrary mockKeywordFactoryBasedLibrary = new MockKeywordFactoryBasedLibrary();
mockKeywordFactoryBasedLibrary.runKeyword(null, null);
assertTrue(mockKeywordFactoryBasedLibrary.keywordFactoryWasCreated);
}
public void testGettingKeywordNamesCreatesKeywordFactory() throws Exception {
MockKeywordFactoryBasedLibrary mockKeywordFactoryBasedLibrary = new MockKeywordFactoryBasedLibrary();
mockKeywordFactoryBasedLibrary.getKeywordNames();
assertTrue(mockKeywordFactoryBasedLibrary.keywordFactoryWasCreated);
}
public void testKeywordFactoryIsOnlyCreatedOnce() throws Exception {
MockKeywordFactoryBasedLibrary mockKeywordFactoryBasedLibrary = new MockKeywordFactoryBasedLibrary();
mockKeywordFactoryBasedLibrary.getKeywordNames();
assertTrue(mockKeywordFactoryBasedLibrary.keywordFactoryWasCreated);
mockKeywordFactoryBasedLibrary.keywordFactoryWasCreated = false;
mockKeywordFactoryBasedLibrary.getKeywordNames();
assertFalse(mockKeywordFactoryBasedLibrary.keywordFactoryWasCreated);
mockKeywordFactoryBasedLibrary.keywordFactoryWasCreated = false;
mockKeywordFactoryBasedLibrary.runKeyword(null, null);
assertFalse(mockKeywordFactoryBasedLibrary.keywordFactoryWasCreated);
}
public void testDefaultClassLoaderIsThreadContextClassLoader() throws Exception {
assertEquals(Thread.currentThread().getContextClassLoader(), library.getClassLoader());
}
private class MockKeywordFactoryBasedLibrary extends KeywordFactoryBasedLibrary<Keyword> {
boolean keywordFactoryWasCreated;
protected KeywordFactory<Keyword> createKeywordFactory() {
keywordFactoryWasCreated = true;
return new KeywordFactory<Keyword>() {
public Keyword createKeyword(String keywordName) {
return new Keyword() {
public Object execute(Object[] arguments) {
return null;
}
};
}
public String[] getKeywordNames() {
return new String[0];
}
};
}
}
}