package fitnesse.slim.instructions;
import fitnesse.slim.NameTranslator;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.AdditionalAnswers.returnsFirstArg;
import static org.mockito.Mockito.*;
public class CallInstructionTest {
private static final String ID = "id_1";
private static final String RESULT = "result";
private InstructionExecutor executor;
private NameTranslator nameTranslator;
@Before
public void setUp() throws Exception {
executor = mock(InstructionExecutor.class);
nameTranslator = mock(NameTranslator.class);
when(executor.call(anyString(), anyString(), anyVararg())).thenReturn(RESULT);
when(nameTranslator.translate(anyString())).thenAnswer(returnsFirstArg());
}
@Test
public void shouldTranslateMethodNameOnCreation() {
new CallInstruction(ID, "instance", "method", new Object[]{"arg1", "arg2"},
nameTranslator);
verify(nameTranslator, times(1)).translate("method");
}
@Test
public void shouldDelegateExecutionToExecutor() throws Exception {
CallInstruction instruction = new CallInstruction(ID, "instance", "method", new Object[]{"arg1", "arg2"},
nameTranslator);
instruction.execute(executor);
verify(executor, times(1)).call("instance", "method", "arg1", "arg2");
}
@Test
public void shouldFormatReturnValues() {
CallInstruction instruction = new CallInstruction(ID, "instance", "method", new Object[]{"arg1", "arg2"},
nameTranslator);
InstructionResult result = instruction.execute(executor);
assertEquals(ID, result.getId());
assertTrue(result.hasResult());
assertFalse(result.hasError());
assertEquals(RESULT, result.getResult());
}
}