1 /*
2  * Copyright (c) 2007 Mockito contributors
3  * This program is made available under the terms of the MIT License.
4  */
5 
6 package org.mockitousage.bugs.varargs;
7 
8 import org.junit.Test;
9 import org.mockito.Mock;
10 import org.mockitoutil.TestBase;
11 
12 import static org.junit.Assert.assertEquals;
13 import static org.mockito.Mockito.anyObject;
14 import static org.mockito.Mockito.anyString;
15 import static org.mockito.Mockito.anyVararg;
16 import static org.mockito.Mockito.eq;
17 import static org.mockito.Mockito.never;
18 import static org.mockito.Mockito.verify;
19 import static org.mockito.Mockito.when;
20 
21 //see issue 62
22 public class VarargsNotPlayingWithAnyObjectTest extends TestBase {
23 
24     interface VarargMethod {
run(String... args)25         Object run(String... args);
26     }
27 
28     @Mock VarargMethod mock;
29 
30     @Test
shouldMatchAnyVararg()31     public void shouldMatchAnyVararg() {
32         mock.run("a", "b");
33 
34         verify(mock).run(anyString(), anyString());
35         verify(mock).run((String) anyObject(), (String) anyObject());
36 
37         verify(mock).run((String[]) anyVararg());
38 
39         verify(mock, never()).run();
40         verify(mock, never()).run(anyString(), eq("f"));
41     }
42 
43     @Test
shouldAllowUsingAnyObjectForVarArgs()44     public void shouldAllowUsingAnyObjectForVarArgs() {
45         mock.run("a", "b");
46         verify(mock).run((String[]) anyObject());
47     }
48 
49     @Test
shouldStubUsingAnyVarargs()50     public void shouldStubUsingAnyVarargs() {
51         when(mock.run((String[]) anyVararg())).thenReturn("foo");
52 
53         assertEquals("foo", mock.run("a", "b"));
54     }
55 }
56