/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockitousage.bugs;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockitoutil.TestBase;
import java.io.Serializable;
import static junit.framework.TestCase.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
//see issue 101
public class BridgeMethodsHitAgainTest extends TestBase {
public interface Factory {}
public interface ExtendedFactory extends Factory {}
public interface SomeInterface {
Factory factory();
}
public interface SomeSubInterface extends SomeInterface {
ExtendedFactory factory();
}
public interface Base<T extends Serializable> {
int test(T value);
}
public interface Extended extends Base<String> {
@Override
int test(String value);
}
@Mock SomeSubInterface someSubInterface;
@Mock ExtendedFactory extendedFactory;
@Test
public void basicCheck() {
Mockito.when((someSubInterface).factory()).thenReturn(extendedFactory);
SomeInterface si = someSubInterface;
assertTrue(si.factory() != null);
}
@Test
public void checkWithExtraCast() {
Mockito.when(((SomeInterface) someSubInterface).factory()).thenReturn(extendedFactory);
SomeInterface si = someSubInterface;
assertTrue(si.factory() != null);
}
@Test
public void testBridgeInvocationIsRecordedForInterceptedMethod() {
Extended ext = mock(Extended.class);
ext.test("123");
verify(ext).test("123");
((Base<String>) ext).test("456");
verify(ext).test("456");
}
}