private void addBranchToMap(Branch b) { logger.info("Adding to map the branch {}", b); String className = b.getClassName(); String methodName = b.getMethodName(); if (!branchMap.containsKey(className)) branchMap.put(className, new HashMap<String, List<Branch>>()); if (!branchMap.get(className).containsKey(methodName)) branchMap.get(className).put(methodName, new ArrayList<Branch>()); branchMap.get(className).get(methodName).add(b); }
public BranchInfo(Branch branch, boolean truthValue) { this.className = branch.getClassName(); this.methodName = branch.getMethodName(); this.lineNo = branch.getInstruction().getLineNumber(); this.truthValue = truthValue; }
if (!branch.getMethodName().equals(methodName) || !branch.getClassName().equals(className)) throw new IllegalArgumentException(
/** * Create a fitness function for branch coverage aimed at executing the * Branch identified by b as defined by branchExpressionValue. * * @param b * a {@link org.evosuite.coverage.branch.Branch} object. * @param branchExpressionValue * a boolean. * @return a {@link org.evosuite.coverage.branch.BranchCoverageTestFitness} * object. */ public static OnlyBranchCoverageTestFitness createOnlyBranchCoverageTestFitness( Branch b, boolean branchExpressionValue) { return new OnlyBranchCoverageTestFitness(new BranchCoverageGoal(b, branchExpressionValue, b.getClassName(), b.getMethodName())); }
/** * Create a fitness function for branch coverage aimed at executing the * Branch identified by b as defined by branchExpressionValue. * * @param b * a {@link org.evosuite.coverage.branch.Branch} object. * @param branchExpressionValue * a boolean. * @return a {@link org.evosuite.coverage.branch.BranchCoverageTestFitness} * object. */ public static BranchCoverageTestFitness createBranchCoverageTestFitness( Branch b, boolean branchExpressionValue) { return new BranchCoverageTestFitness(new BranchCoverageGoal(b, branchExpressionValue, b.getClassName(), b.getMethodName())); }
private static ControlFlowDistance getNonRootDistance(ExecutionResult result, Branch branch, boolean value) { if (branch == null) throw new IllegalStateException( "expect this method only to be called if this goal does not try to cover the root branch"); String className = branch.getClassName(); String methodName = branch.getMethodName(); ControlFlowDistance r = new ControlFlowDistance(); r.setApproachLevel(branch.getInstruction().getActualCFG().getDiameter() + 1); // Minimal distance between target node and path for (MethodCall call : result.getTrace().getMethodCalls()) { if (call.className.equals(className) && call.methodName.equals(methodName)) { ControlFlowDistance d2; Set<Branch> handled = new HashSet<Branch>(); // result.intermediateDistances = new HashMap<Branch,ControlFlowDistance>(); d2 = getNonRootDistance(result, call, branch, value, className, methodName, handled); if (d2.compareTo(r) < 0) { r = d2; } } } return r; }
"expect distance for a root branch to always have value set to true"); if (branch != null) { if (!branch.getMethodName().equals(methodName) || !branch.getClassName().equals(className)) throw new IllegalArgumentException(
continue; BranchInfo info = new BranchInfo(branch.getClassName(), branch.getMethodName(), branch.getInstruction().getLineNumber(), false); branchCoverage.add(info); continue; BranchInfo info = new BranchInfo(branch.getClassName(), branch.getMethodName(), branch.getInstruction().getLineNumber(), true); branchCoverage.add(info);
BranchCoverageGoal goal = new BranchCoverageGoal(newB, true, newB.getClassName(), newB.getMethodName()); BranchCoverageTestFitness newFitness = new BranchCoverageTestFitness(goal); graph.addEdge((FitnessFunction<T>) newFitness, fitness); BranchCoverageGoal goal2 = new BranchCoverageGoal(newB, false, newB.getClassName(), newB.getMethodName()); BranchCoverageTestFitness newfitness2 = new BranchCoverageTestFitness(goal2); graph.addEdge((FitnessFunction<T>) newfitness2, fitness);
/** {@inheritDoc} */ @Override public List<TryCatchCoverageTestFitness> getCoverageGoals() { List<TryCatchCoverageTestFitness> goals = new ArrayList<>(); // logger.info("Getting branches"); for (String className : BranchPool.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).knownClasses()) { final MethodNameMatcher matcher = new MethodNameMatcher(); // Branches for (String methodName : BranchPool.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).knownMethods(className)) { if (!matcher.methodMatches(methodName)) { logger.info("Method " + methodName + " does not match criteria. "); continue; } for (Branch b : BranchPool.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).retrieveBranchesInMethod(className, methodName)) { if(b.isInstrumented()) { goals.add(new TryCatchCoverageTestFitness(new BranchCoverageGoal(b, true, b.getClassName(), b.getMethodName()))); if(!b.ignoreFalseBranch()) { goals.add(new TryCatchCoverageTestFitness(new BranchCoverageGoal(b, false, b.getClassName(), b.getMethodName()))); } } } } } return goals; }
@Ignore @Test public void testLesserThan() { final Integer branchId = 4; final String methodName = "lesserThan_IF_CMPGE"; ExecutionTrace execTrace = execute(methodName, 5, 5); Assert.assertEquals(methodName + signature, BranchPool.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).getBranch(branchId).getMethodName()); Assert.assertEquals(0.0, execTrace.getTrueDistance(branchId), 1.0); Assert.assertEquals(0.0, execTrace.getFalseDistance(branchId), 0.0); execTrace = execute(methodName, 5, 6); Assert.assertEquals(0.0, execTrace.getTrueDistance(branchId), 0.0); Assert.assertEquals(0.0, execTrace.getFalseDistance(branchId), 1.0); }
@Ignore @Test public void testGreaterThan() { final Integer branchId = 2; final String methodName = "greaterThan_IF_CMPLE"; ExecutionTrace execTrace = execute(methodName, 5, 5); Assert.assertEquals(methodName + signature, BranchPool.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).getBranch(branchId).getMethodName()); Assert.assertEquals(1.0, execTrace.getTrueDistance(branchId), DELTA); Assert.assertEquals(0.0, execTrace.getFalseDistance(branchId), DELTA); execTrace = execute(methodName, 6, 5); Assert.assertEquals(0.0, execTrace.getTrueDistance(branchId), DELTA); Assert.assertEquals(1.0, execTrace.getFalseDistance(branchId), DELTA); }
@Ignore @Test public void testGreaterEqual() { final Integer branchId = 1; final String methodName = "greaterEqual_IF_CMPLT"; ExecutionTrace execTrace = execute(methodName, 5, 5); Assert.assertEquals(methodName + signature, BranchPool.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).getBranch(branchId).getMethodName()); Assert.assertEquals(0.0, execTrace.getTrueDistance(branchId), DELTA); Assert.assertEquals(1.0, execTrace.getFalseDistance(branchId), DELTA); execTrace = execute(methodName, 5, 6); Assert.assertEquals(1.0, execTrace.getTrueDistance(branchId), DELTA); Assert.assertEquals(0.0, execTrace.getFalseDistance(branchId), DELTA); }
@Ignore @Test public void testLesserEqual() { final Integer branchId = 3; final String methodName = "lesserEqual_IF_CMPGT"; ExecutionTrace execTrace = execute(methodName, 5, 5); Assert.assertEquals(methodName + signature, BranchPool.getInstance(TestGenerationContext.getInstance().getClassLoaderForSUT()).getBranch(branchId).getMethodName()); Assert.assertEquals(0.0, execTrace.getTrueDistance(branchId), DELTA); Assert.assertEquals(1.0, execTrace.getFalseDistance(branchId), DELTA); execTrace = execute(methodName, 6, 5); Assert.assertEquals(1.0, execTrace.getTrueDistance(branchId), DELTA); Assert.assertEquals(0.0, execTrace.getFalseDistance(branchId), DELTA); execTrace = execute(methodName, 5, 6); Assert.assertEquals(0.0, execTrace.getTrueDistance(branchId), DELTA); Assert.assertEquals(2.0, execTrace.getFalseDistance(branchId), DELTA); }