Skip to content

Commit

Permalink
Fixes mockito#583 fix bug when trying to capture null vararg
Browse files Browse the repository at this point in the history
  • Loading branch information
lukasz-szewc committed Aug 28, 2016
1 parent d32a754 commit 672b254
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
Expand Up @@ -141,13 +141,21 @@ private void captureVarargsPart(Invocation invocation) {
for (ArgumentMatcher m : uniqueMatcherSet(indexOfVararg)) {
if (m instanceof CapturesArguments) {
Object rawArgument = invocation.getRawArguments()[indexOfVararg];
for (int i = 0; i < Array.getLength(rawArgument); i++) {
((CapturesArguments) m).captureFrom(Array.get(rawArgument, i));
for (int i = 0; i < getLength(rawArgument); i++) {
((CapturesArguments) m).captureFrom(getArgument(rawArgument, i));
}
}
}
}

private int getLength(Object rawArgument) {
return rawArgument == null ? 1 : Array.getLength(rawArgument);
}

private Object getArgument(Object rawArgument, int i) {
return rawArgument == null ? null : Array.get(rawArgument, i);
}

private int regularArgumentsSize(Invocation invocation) {
return invocation.getMethod().isVarArgs() ?
invocation.getRawArguments().length - 1 // ignores vararg holder array
Expand Down
Expand Up @@ -315,4 +315,17 @@ public void captures_correctly_when_captor_used_on_pure_vararg_method() throws E
verify(mock).varargs(eq(42), argumentCaptor.capture());
Assertions.assertThat(argumentCaptor.getValue()).contains("capturedValue");
}

@Test
public void should_capture_null_vararg() {
// given
ArgumentCaptor<String> argumentCaptor = ArgumentCaptor.forClass(String.class);

// when
mock.varargs(null);

// then
verify(mock).varargs(argumentCaptor.capture());
Assertions.assertThat(argumentCaptor.getValue()).isNull();
}
}

0 comments on commit 672b254

Please sign in to comment.