private void save(UnitTestClassReport report, InputFile inputFile, SensorContext context) { int testsCount = report.getTests() - report.getSkipped(); saveMeasure(context, inputFile, CoreMetrics.SKIPPED_TESTS, report.getSkipped()); saveMeasure(context, inputFile, CoreMetrics.TESTS, testsCount); saveMeasure(context, inputFile, CoreMetrics.TEST_ERRORS, report.getErrors()); saveMeasure(context, inputFile, CoreMetrics.TEST_FAILURES, report.getFailures()); saveMeasure(context, inputFile, CoreMetrics.TEST_EXECUTION_TIME, report.getDurationMilliseconds()); saveResults(inputFile, report); }
private Map<InputFile, UnitTestClassReport> mapToInputFile(Map<String, UnitTestClassReport> indexByClassname) { Map<InputFile, UnitTestClassReport> result = new HashMap<>(); indexByClassname.forEach((className, index) -> { InputFile resource = getUnitTestResource(className, index); if (resource != null) { UnitTestClassReport report = result.computeIfAbsent(resource, r -> new UnitTestClassReport()); // in case of repeated/parameterized tests (JUnit 5.x) we may end up with tests having the same name index.getResults().forEach(report::add); } else { LOGGER.debug("Resource not found: {}", className); } }); return result; }
public UnitTestClassReport add(UnitTestClassReport other) { for (UnitTestResult otherResult : other.getResults()) { add(otherResult); } return this; }
private void save(UnitTestIndex index, SensorContext context) { long negativeTimeTestNumber = 0; for (Map.Entry<String, UnitTestClassReport> entry : index.getIndexByClassname().entrySet()) { UnitTestClassReport report = entry.getValue(); if (report.getTests() > 0) { negativeTimeTestNumber += report.getNegativeTimeTestNumber(); Resource resource = getUnitTestResource(entry.getKey()); if (resource != null) { save(report, resource, context); } else { LOGGER.warn("Resource not found: {}", entry.getKey()); } } } if (negativeTimeTestNumber > 0) { LOGGER.warn("There is {} test(s) reported with negative time by surefire, total duration may not be accurate.", negativeTimeTestNumber); } }
public UnitTestClassReport merge(String classname, String intoClassname) { UnitTestClassReport from = indexByClassname.get(classname); if (from!=null) { UnitTestClassReport to = index(intoClassname); to.add(from); indexByClassname.remove(classname); return to; } return null; }
private void save(UnitTestIndex index, SensorContext context) { for (Map.Entry<String, UnitTestClassReport> entry : index.getIndexByClassname().entrySet()) { UnitTestClassReport report = entry.getValue(); if (report.getTests() > 0) { Resource resource = getUnitTestResource(entry.getKey()); if (resource != null) { save(entry.getValue(), resource, context); } else { LOGGER.warn("Resource not found: {}", entry.getKey()); } } } }
@CheckForNull private InputFile getUnitTestResource(String className, UnitTestClassReport unitTestClassReport) { InputFile resource = javaResourceLocator.findResourceByClassName(className); if (resource == null) { // fall back on testSuite class name (repeated and parameterized tests from JUnit 5.0 are using test name as classname) // Should be fixed with JUnit 5.1, see: https://github.com/junit-team/junit5/issues/1182 return unitTestClassReport.getResults().stream() .map(r -> javaResourceLocator.findResourceByClassName(r.getTestSuiteClassName())) .filter(Objects::nonNull) .findFirst() .orElse(null); } return resource; }
public UnitTestClassReport index(String classname) { return indexByClassname.computeIfAbsent(classname, name -> new UnitTestClassReport()); }
public UnitTestClassReport add(UnitTestResult result) { initResults(); results.add(result); if (result.getStatus().equals(UnitTestResult.STATUS_SKIPPED)) { skipped += 1; } else if (result.getStatus().equals(UnitTestResult.STATUS_FAILURE)) { failures += 1; } else if (result.getStatus().equals(UnitTestResult.STATUS_ERROR)) { errors += 1; } tests += 1; durationMilliseconds += result.getDurationMilliseconds(); return this; }
protected void saveResults(SensorContext context, Resource resource, UnitTestClassReport report) { context.saveMeasure(resource, new Measure(CoreMetrics.TEST_DATA, report.toXml())); }
private void save(UnitTestIndex index, SensorContext context) { long negativeTimeTestNumber = 0; Map<InputFile, UnitTestClassReport> indexByInputFile = mapToInputFile(index.getIndexByClassname()); for (Map.Entry<InputFile, UnitTestClassReport> entry : indexByInputFile.entrySet()) { UnitTestClassReport report = entry.getValue(); if (report.getTests() > 0) { negativeTimeTestNumber += report.getNegativeTimeTestNumber(); save(report, entry.getKey(), context); } } if (negativeTimeTestNumber > 0) { LOGGER.warn("There is {} test(s) reported with negative time by surefire, total duration may not be accurate.", negativeTimeTestNumber); } }
public UnitTestClassReport merge(String classname, String intoClassname) { UnitTestClassReport from = indexByClassname.get(classname); if (from!=null) { UnitTestClassReport to = index(intoClassname); to.add(from); indexByClassname.remove(classname); return to; } return null; }
private void save(UnitTestIndex index, SensorContext context) { for (Map.Entry<String, UnitTestClassReport> entry : index.getIndexByClassname().entrySet()) { UnitTestClassReport report = entry.getValue(); if (report.getTests() > 0) { InputFile resource = getUnitTestResource(entry.getKey()); if (resource != null) { save(entry.getValue(), resource, context); } else { LOGGER.warn("Resource not found: {}", entry.getKey()); } } } }
@CheckForNull private InputFile getUnitTestResource(String className, UnitTestClassReport unitTestClassReport) { InputFile resource = javaResourceLocator.findResourceByClassName(className); if (resource == null) { // fall back on testSuite class name (repeated and parameterized tests from JUnit 5.0 are using test name as classname) // Should be fixed with JUnit 5.1, see: https://github.com/junit-team/junit5/issues/1182 return unitTestClassReport.getResults().stream() .map(r -> javaResourceLocator.findResourceByClassName(r.getTestSuiteClassName())) .filter(Objects::nonNull) .findFirst() .orElse(null); } return resource; }
public UnitTestClassReport index(String classname) { return indexByClassname.computeIfAbsent(classname, name -> new UnitTestClassReport()); }
public UnitTestClassReport add(UnitTestResult result) { initResults(); results.add(result); if (result.getStatus().equals(UnitTestResult.STATUS_SKIPPED)) { skipped += 1; } else if (result.getStatus().equals(UnitTestResult.STATUS_FAILURE)) { failures += 1; } else if (result.getStatus().equals(UnitTestResult.STATUS_ERROR)) { errors += 1; } tests += 1; durationMilliseconds += result.getDurationMilliseconds(); return this; }
protected void saveResults(SensorContext context, InputFile inputFile, UnitTestClassReport report) { context.saveMeasure(inputFile, new Measure(CoreMetrics.TEST_DATA, report.toXml())); }
private void save(UnitTestClassReport report, InputFile inputFile, SensorContext context) { int testsCount = report.getTests() - report.getSkipped(); saveMeasure(context, inputFile, CoreMetrics.SKIPPED_TESTS, report.getSkipped()); saveMeasure(context, inputFile, CoreMetrics.TESTS, testsCount); saveMeasure(context, inputFile, CoreMetrics.TEST_ERRORS, report.getErrors()); saveMeasure(context, inputFile, CoreMetrics.TEST_FAILURES, report.getFailures()); saveMeasure(context, inputFile, CoreMetrics.TEST_EXECUTION_TIME, report.getDurationMilliseconds()); saveResults(inputFile, report); }
public UnitTestClassReport add(UnitTestClassReport other) { for (UnitTestResult otherResult : other.getResults()) { add(otherResult); } return this; }
private void save(UnitTestIndex index, SensorContext context) { long negativeTimeTestNumber = 0; Map<InputFile, UnitTestClassReport> indexByInputFile = mapToInputFile(index.getIndexByClassname()); for (Map.Entry<InputFile, UnitTestClassReport> entry : indexByInputFile.entrySet()) { UnitTestClassReport report = entry.getValue(); if (report.getTests() > 0) { negativeTimeTestNumber += report.getNegativeTimeTestNumber(); save(report, entry.getKey(), context); } } if (negativeTimeTestNumber > 0) { LOGGER.warn("There is {} test(s) reported with negative time by surefire, total duration may not be accurate.", negativeTimeTestNumber); } }