Package org.mockito.internal.handler

Source Code of org.mockito.internal.handler.MockHandlerImplTest

/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/

package org.mockito.internal.handler;

import org.junit.Test;
import org.mockito.exceptions.base.MockitoException;
import org.mockito.exceptions.misusing.InvalidUseOfMatchersException;
import org.mockito.internal.creation.MockSettingsImpl;
import org.mockito.internal.invocation.InvocationBuilder;
import org.mockito.internal.invocation.InvocationImpl;
import org.mockito.internal.invocation.InvocationMatcher;
import org.mockito.internal.invocation.MatchersBinder;
import org.mockito.internal.progress.ArgumentMatcherStorage;
import org.mockito.internal.stubbing.InvocationContainerImpl;
import org.mockito.internal.stubbing.StubbedInvocationMatcher;
import org.mockito.internal.verification.VerificationModeFactory;
import org.mockito.invocation.Invocation;
import org.mockito.listeners.InvocationListener;
import org.mockito.listeners.MethodInvocationReport;
import org.mockitoutil.TestBase;

import java.util.Arrays;

import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;

@SuppressWarnings({ "unchecked", "serial" })
public class MockHandlerImplTest extends TestBase {

  private StubbedInvocationMatcher stubbedInvocationMatcher = mock(StubbedInvocationMatcher.class);
  private Invocation invocation = mock(InvocationImpl.class);


  @Test
  public void shouldRemoveVerificationModeEvenWhenInvalidMatchers() throws Throwable {
    // given
    Invocation invocation = new InvocationBuilder().toInvocation();
    @SuppressWarnings("rawtypes")
        MockHandlerImpl<?> handler = new MockHandlerImpl(new MockSettingsImpl());
    handler.mockingProgress.verificationStarted(VerificationModeFactory.atLeastOnce());
    handler.matchersBinder = new MatchersBinder() {
      public InvocationMatcher bindMatchers(ArgumentMatcherStorage argumentMatcherStorage, Invocation invocation) {
        throw new InvalidUseOfMatchersException();
      }
    };

    try {
      // when
      handler.handle(invocation);

      // then
      fail();
    } catch (InvalidUseOfMatchersException e) {
    }

    assertNull(handler.mockingProgress.pullVerificationMode());
  }




  @Test(expected = MockitoException.class)
  public void shouldThrowMockitoExceptionWhenInvocationHandlerThrowsAnything() throws Throwable {
    // given
    InvocationListener throwingListener = mock(InvocationListener.class);
    doThrow(new Throwable()).when(throwingListener).reportInvocation(any(MethodInvocationReport.class));
    MockHandlerImpl<?> handler = createCorrectlyStubbedHandler(throwingListener);

    // when
    handler.handle(invocation);
  }



  private MockHandlerImpl<?> createCorrectlyStubbedHandler(InvocationListener throwingListener) {
    MockHandlerImpl<?> handler = createHandlerWithListeners(throwingListener);
    stubOrdinaryInvocationWithGivenReturnValue(handler);
    return handler;
  }

  private void stubOrdinaryInvocationWithGivenReturnValue(MockHandlerImpl<?> handler) {
    stubOrdinaryInvocationWithInvocationMatcher(handler, stubbedInvocationMatcher);
  }



  private void stubOrdinaryInvocationWithInvocationMatcher(MockHandlerImpl<?> handler, StubbedInvocationMatcher value) {
    handler.invocationContainerImpl = mock(InvocationContainerImpl.class);
    given(handler.invocationContainerImpl.findAnswerFor(any(InvocationImpl.class))).willReturn(value);
  }




  private MockHandlerImpl<?> createHandlerWithListeners(InvocationListener... listener) {
    @SuppressWarnings("rawtypes")
        MockHandlerImpl<?> handler = new MockHandlerImpl(mock(MockSettingsImpl.class));
    handler.matchersBinder = mock(MatchersBinder.class);
    given(handler.getMockSettings().getInvocationListeners()).willReturn(Arrays.asList(listener));
    return handler;
  }
}
TOP

Related Classes of org.mockito.internal.handler.MockHandlerImplTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.