/*
 * Copyright (c) 2007 Mockito contributors
 * This program is made available under the terms of the MIT License.
 */
package org.mockito.internal.verification.api;

import org.mockito.internal.invocation.InvocationMatcher;
import org.mockito.invocation.Invocation;
import org.mockito.invocation.MatchableInvocation;

import java.util.List;

/**
 * Data needed to perform verification of interactions.
 * This interface is considered public even though it lives in private package.
 * In the next major version of Mockito, this class will be moved to public space.
 */
public interface VerificationData {

    /**
     * All invocations recorded on the mock object that is being verified.
     * Does not include invocations recorded on other mock objects.
     */
    List<Invocation> getAllInvocations();

    /**
     * The target or wanted invocation.
     * Below example illustrates what is the 'target' invocation:
     * <pre class="code"><code class="java">
     *   mock.foo();   // <- invocation 1
     *   mock.bar();   // <- invocation 2
     *
     *   verify(mock).bar();  // <- target invocation
     * </code></pre>
     *
     * Target invocation can contain argument matchers therefore the returned type is {@link MatchableInvocation}
     * and not {@link Invocation}.
     *
     * @since 2.2.12
     */
    MatchableInvocation getTarget();

    /**
     * @deprecated - This internal method leaks internal class <code>InvocationMatcher</code>.
     * Please use {@link org.mockito.internal.verification.api.VerificationData#getTarget()} instead.
     *
     * Deprecated since 2.2.12
     */
    @Deprecated
    InvocationMatcher getWanted();
}
