private static Function<MutationResult, List<String>> resultToMutatorName() { return a -> { try { final String mutatorName = MutatorUtil.loadMutator(a.getDetails().getMutator()).getName(); return Collections.singletonList(mutatorName); } catch (final Exception e) { throw new RuntimeException("Cannot convert to mutator: " + a.getDetails().getMutator(), e); } }; }
private static Function<MutationDetails, LineMutatorPair> toLineMutatorPair() { return a -> new LineMutatorPair(a.getLineNumber(), a.getMutator()); }
@Override public boolean test(MutationDetails a) { if (!MUTATOR_ID.equals(a.getMutator())) { return false; } final MethodTree method = NullReturnsFilter.this.currentClass.methods().stream() .filter(MethodMatchers.forLocation(a.getId().getLocation())) .findFirst() .get(); final int mutatedInstruction = a.getInstructionIndex(); return returnsNull(method, mutatedInstruction); }
private Predicate<MutationDetails> isEquivalent(Mutater m) { return a -> { if (!MUTATOR_IDS.contains(a.getMutator())) { return false; } final MethodTree method = PrimitiveEquivalentFilter.this.currentClass.methods().stream() .filter(MethodMatchers.forLocation(a.getId().getLocation())) .findFirst() .get(); return ZERO_CONSTANTS.contains(method.realInstructionBefore(a.getInstructionIndex()).getOpcode()); }; }
@Override public boolean test(MutationDetails a) { if (!MUTATOR_IDS.contains(a.getMutator())) { return false; } final int instruction = a.getInstructionIndex(); final MethodTree method = HardCodedTrueEquivalentFilter.this.currentClass.methods().stream() .filter(MethodMatchers.forLocation(a.getId().getLocation())) .findFirst().get(); return primitiveTrue(instruction, method) || boxedTrue(instruction, method); }
@Override public boolean test(MutationDetails a) { if (!MUTATOR_IDS.contains(a.getMutator())) { return false; } final MethodTree method = EmptyReturnsFilter.this.currentClass.methods().stream() .filter(MethodMatchers.forLocation(a.getId().getLocation())) .findFirst() .get(); final int mutatedInstruction = a.getInstructionIndex(); return returnsZeroValue(method, mutatedInstruction) || returnsEmptyString(method, mutatedInstruction) || returns(method, mutatedInstruction, "java/util/Optional","empty") || returns(method, mutatedInstruction, "java/util/Collections","emptyList") || returns(method, mutatedInstruction, "java/util/Collections","emptySet") || returns(method, mutatedInstruction, "java/util/List","of") || returns(method, mutatedInstruction, "java/util/Set","of"); }
@Override public void handleMutationResult(final ClassMutationResults metaData) { try { for (final MutationResult mutation : metaData.getMutations()) { this.out.write(makeCsv(mutation.getDetails().getFilename(), mutation .getDetails().getClassName().asJavaName(), mutation.getDetails() .getMutator(), mutation.getDetails().getMethod(), mutation .getDetails().getLineNumber(), mutation.getStatus(), createKillingTestDesc(mutation.getKillingTest())) + System.getProperty("line.separator")); } } catch (final IOException ex) { throw Unchecked.translateCheckedException(ex); } }
private Collection<String> getMutators(Collection<MutationResult> mutations) { return mutations.stream().map(mutation -> mutation.getDetails().getMutator()).collect(Collectors.toList()); }
private String makeMutationNode(final MutationResult mutation) { final MutationDetails details = mutation.getDetails(); return makeNode(clean(details.getFilename()), sourceFile) + makeNode(clean(details.getClassName().asJavaName()), mutatedClass) + makeNode(clean(details.getMethod().name()), mutatedMethod) + makeNode(clean(details.getId().getLocation().getMethodDesc()), methodDescription) + makeNode("" + details.getLineNumber(), lineNumber) + makeNode(clean(details.getMutator()), mutator) + makeNode("" + details.getFirstIndex(), index) + makeNode("" + details.getBlock(), block) + makeNodeWhenConditionSatisfied(!fullMutationMatrix, createKillingTestDesc(mutation.getKillingTest()), killingTest) + makeNodeWhenConditionSatisfied(fullMutationMatrix, createTestDesc(mutation.getKillingTests()), killingTests) + makeNodeWhenConditionSatisfied(fullMutationMatrix, createTestDesc(mutation.getSucceedingTests()), succeedingTests) + makeNode(clean(details.getDescription()), description); }
private void writeMutationDetails(MutationResult mutation) { try { report.beginObject(); report.writeAttribute("status", mutation.getStatus().name()); report.writeAttribute("mutator", mutation.getDetails().getMutator()); report.writeAttribute("tests-run", mutation.getNumberOfTestsRun()); report.writeAttribute("detected-by", mutation.getKillingTest().orElse("")); report.beginListAttribute("tests"); for (TestInfo test : mutation.getDetails().getTestsInOrder()) report.write(test.getName()); report.endList(); report.endObject(); } catch (IOException exc) { throw Unchecked.translateCheckedException(exc); } }
private String makeMutationNode(MutationResult mutation) { MutationDetails details = mutation.getDetails(); return makeNode(clean(details.getFilename()), Tag.sourceFile) + makeNode(clean(details.getClassName().asJavaName()), Tag.mutatedClass) + makeNode(clean(details.getMethod().name()), Tag.mutatedMethod) + makeNode(clean(details.getId().getLocation().getMethodDesc()), Tag.methodDescription) + makeNode("" + details.getLineNumber(), Tag.lineNumber) + makeNode(clean(details.getMutator()), Tag.mutator) + makeNode("" + details.getFirstIndex(), Tag.index) + makeNode(createKillingTestDesc(mutation.getKillingTest()), Tag.killingTest) + makeTestInfoNode(details) + makeNode(clean(details.getDescription()), Tag.description); }
text( method.getUndetectedMutations().stream().map( mutation -> { String mutator = mutation.getDetails().getMutator(); if(mutator.equals("empty")) //TODO: Improve hard coded array verification return "an empty array";
report.writeAttribute("detected", status.isDetected()); report.writeAttribute("status", status.name()); report.writeAttribute("mutator", details.getMutator());