package org.robotframework.javalib.keyword; import org.robotframework.javalib.keyword.PreparableKeyword; import junit.framework.TestCase; public class PreparableKeywordTest extends TestCase { private MockPreparableKeyword preparableKeyword; protected void setUp() throws Exception { preparableKeyword = new MockPreparableKeyword(); } public void testKeywordIsPreparedBeforeExecution() throws Exception { Object[] args = new Object[] { "Argument1" }; preparableKeyword.execute(args); assertPrepareWasCalledWith(args); assertOperateWasCalledWith(args); } public void testSequenceIsPrepareOperateFinish() throws Exception { preparableKeyword.execute(null); assertEquals(0, preparableKeyword.prepareCallSequenceNumber); assertEquals(1, preparableKeyword.operateCallSequenceNumber); assertEquals(2, preparableKeyword.finishCallSequenceNumber); } public void testReturnsResultFromOperate() throws Exception { String returnValue = "Return Value"; preparableKeyword.operateReturnValue = returnValue; assertEquals(returnValue, preparableKeyword.execute(null)); } private void assertOperateWasCalledWith(Object[] args) { assertTrue(preparableKeyword.operateWasCalled); assertEquals(args, preparableKeyword.operateArguments); } private void assertPrepareWasCalledWith(Object[] args) { assertTrue(preparableKeyword.prepareWasCalled); assertEquals(args, preparableKeyword.prepareArguments); } private class MockPreparableKeyword extends PreparableKeyword { boolean prepareWasCalled; boolean operateWasCalled; Object[] prepareArguments; Object[] operateArguments; int callCount; int prepareCallSequenceNumber; int operateCallSequenceNumber; int finishCallSequenceNumber; Object operateReturnValue; protected void prepare(Object[] arguments) { prepareArguments = arguments; prepareWasCalled = true; prepareCallSequenceNumber = callCount; callCount++; } protected Object operate(Object[] arguments) { operateArguments = arguments; operateWasCalled = true; operateCallSequenceNumber = callCount; callCount++; return operateReturnValue; } protected void finish(Object[] arguments) { finishCallSequenceNumber = callCount; callCount++; } } }