package org.mockito.internal.framework;
import org.junit.After;
import org.junit.Test;
import org.mockito.ArgumentMatchers;
import org.mockito.MockSettings;
import org.mockito.StateMaster;
import org.mockito.listeners.MockCreationListener;
import org.mockito.listeners.MockitoListener;
import org.mockito.mock.MockCreationSettings;
import org.mockitoutil.TestBase;
import java.util.List;
import java.util.Set;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
public class DefaultMockitoFrameworkTest extends TestBase {
private DefaultMockitoFramework framework = new DefaultMockitoFramework();
@After public void clearListeners() {
new StateMaster().clearMockitoListeners();
}
@Test(expected = IllegalArgumentException.class)
public void prevents_adding_null_listener() {
framework.addListener(null);
}
@Test(expected = IllegalArgumentException.class)
public void prevents_removing_null_listener() {
framework.removeListener(null);
}
@Test
public void ok_to_remove_unknown_listener() {
//it is safe to remove listener that was not added before
framework.removeListener(new MockitoListener() {});
}
@Test
public void ok_to_remove_listener_multiple_times() {
MockitoListener listener = new MockitoListener() {};
//when
framework.addListener(listener);
//then it is ok to:
framework.removeListener(listener);
framework.removeListener(listener);
}
@Test
public void adds_creation_listener() {
//given creation listener is added
MockCreationListener listener = mock(MockCreationListener.class);
framework.addListener(listener);
//when
MockSettings settings = withSettings().name("my list");
List mock = mock(List.class, settings);
Set mock2 = mock(Set.class);
//then
verify(listener).onMockCreated(eq(mock), any(MockCreationSettings.class));
verify(listener).onMockCreated(eq(mock2), any(MockCreationSettings.class));
verifyNoMoreInteractions(listener);
}
@Test
public void removes_creation_listener() {
//given creation listener is added
MockCreationListener listener = mock(MockCreationListener.class);
framework.addListener(listener);
//and hooked up correctly
mock(List.class);
verify(listener).onMockCreated(ArgumentMatchers.any(), any(MockCreationSettings.class));
//when
framework.removeListener(listener);
mock(Set.class);
//then
verifyNoMoreInteractions(listener);
}
}