All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mockit.internal.expectations.Expectation Maven / Gradle / Ivy

/*
 * JMockit Expectations
 * Copyright (c) 2006-2009 Rogério Liesenfeld
 * All rights reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package mockit.internal.expectations;

import mockit.internal.util.*;

import org.objectweb.asm2.*;

public final class Expectation
{
   final RecordPhase recordPhase;
   final ExpectedInvocationWithMatchers expectedInvocation;
   final InvocationConstraints constraints;
   private InvocationResults results;

   Expectation(
      RecordPhase recordPhase, ExpectedInvocationWithMatchers expectedInvocation, boolean nonStrict)
   {
      this.recordPhase = recordPhase;
      this.expectedInvocation = expectedInvocation;
      constraints = new InvocationConstraints(nonStrict);
   }

   Expectation(Expectation other)
   {
      recordPhase = other.recordPhase;
      expectedInvocation = other.expectedInvocation;
      constraints = new InvocationConstraints(other.constraints);
      results = other.results;
   }

   public InvocationResults getResults()
   {
      if (results == null) {
         results = new InvocationResults(this);
      }

      return results;
   }

   Object produceResult(Object[] invocationArgs) throws Throwable
   {
      if (results == null) {
         return expectedInvocation.getDefaultValueForReturnType();
      }

      return results.produceResult(invocationArgs);
   }

   AssertionError verifyConstraints()
   {
      return constraints.verify(expectedInvocation);
   }

   AssertionError errorForNeverHappened()
   {
      int invocationCount = constraints.invocationCount;

      return invocationCount > 0 ?
         expectedInvocation.errorForUnexpectedInvocations(invocationCount) : null;
   }

   public boolean hasVoidReturnType()
   {
      return expectedInvocation.methodNameAndDesc.endsWith(")V");
   }

   public boolean hasReturnValueOfType(Class typeToBeReturned)
   {
      Type invocationReturnType = Type.getReturnType(expectedInvocation.methodNameAndDesc);
      Class invocationReturnClass = Utilities.getClassForType(invocationReturnType);

      return invocationReturnClass.isAssignableFrom(typeToBeReturned);
   }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy