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

mockit.coverage.lines.BranchCoverageData Maven / Gradle / Ivy

/*
 * Copyright (c) 2006-2013 Rogério Liesenfeld
 * This file is subject to the terms of the MIT license (see LICENSE.txt).
 */
package mockit.coverage.lines;

import org.jetbrains.annotations.*;

import mockit.coverage.*;
import mockit.external.asm4.*;

/**
 * Coverage data gathered for a branch inside a line of source code.
 */
public final class BranchCoverageData extends LineSegmentData
{
   private static final long serialVersionUID = 1003335601845442606L;

   // Static data:
   @NotNull public final transient Label jumpSource;
   @NotNull public final transient Label jumpTarget;

   // Runtime data (and static if any execution count is -1, meaning lack of the jump target):
   private int jumpExecutionCount;

   BranchCoverageData(@NotNull Label jumpSource, @NotNull Label jumpTarget)
   {
      this.jumpSource = jumpSource;
      this.jumpTarget = jumpTarget;
      jumpExecutionCount = -1;
      executionCount = -1;
   }

   public void setHasJumpTarget() { jumpExecutionCount = 0; }
   public void setHasNoJumpTarget() { executionCount = 0; }

   void registerJumpExecution(@Nullable CallPoint callPoint)
   {
      assert jumpExecutionCount >= 0 : "Illegal registerJumpExecution";
      jumpExecutionCount++;
      addCallPointIfAny(callPoint);
   }

   void registerNoJumpExecution(@Nullable CallPoint callPoint)
   {
      assert executionCount >= 0 : "Illegal registerNoJumpExecution";
      executionCount++;
      addCallPointIfAny(callPoint);
   }

   @Override
   public boolean isCovered()
   {
      return super.isCovered() || jumpExecutionCount > 0;
   }

   @Override
   public int getExecutionCount()
   {
      return executionCount > 0 ? executionCount : jumpExecutionCount > 0 ? jumpExecutionCount : 0;
   }

   void addCountsFromPreviousTestRun(@NotNull BranchCoverageData previousData)
   {
      addExecutionCountAndCallPointsFromPreviousTestRun(previousData);
      jumpExecutionCount += previousData.jumpExecutionCount;
   }

   @Override
   void reset()
   {
      super.reset();
      jumpExecutionCount = 0;
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy