aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java')
-rw-r--r--tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java112
1 files changed, 78 insertions, 34 deletions
diff --git a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java
index 2984d7b274..b490765383 100644
--- a/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java
+++ b/tools/test/LcovMerger/java/com/google/devtools/lcovmerger/Main.java
@@ -14,7 +14,8 @@
package com.google.devtools.lcovmerger;
-import static com.google.devtools.lcovmerger.LcovConstants.TRACEFILE_EXTENSION;
+import static com.google.devtools.lcovmerger.Constants.GCOV_EXTENSION;
+import static com.google.devtools.lcovmerger.Constants.TRACEFILE_EXTENSION;
import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.annotations.VisibleForTesting;
@@ -28,6 +29,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -51,65 +53,107 @@ public class Main {
System.exit(1);
}
+ List<File> filesInCoverageDir =
+ flags.containsKey("coverage_dir")
+ ? getCoverageFilesInDir(flags.get("coverage_dir"))
+ : Collections.emptyList();
+ Coverage coverage =
+ Coverage.merge(
+ parseFiles(getTracefiles(flags, filesInCoverageDir), LcovParser::parse),
+ parseFiles(getGcovInfoFiles(filesInCoverageDir), GcovParser::parse));
+
+ if (coverage.isEmpty()) {
+ logger.log(Level.SEVERE, "There was no coverage found.");
+ System.exit(1);
+ }
+
+ int exitStatus = 0;
+ String outputFile = flags.get("output_file");
+ try {
+ LcovPrinter.print(new FileOutputStream(new File(outputFile)), coverage);
+ } catch (IOException e) {
+ logger.log(
+ Level.SEVERE,
+ "Could not write to output file " + outputFile + " due to " + e.getMessage());
+ exitStatus = 1;
+ }
+ System.exit(exitStatus);
+ }
+
+ private static List<File> getGcovInfoFiles(List<File> filesInCoverageDir) {
+ List<File> gcovFiles = getFilesWithExtension(filesInCoverageDir, GCOV_EXTENSION);
+ if (gcovFiles.isEmpty()) {
+ logger.log(Level.SEVERE, "No gcov info file found.");
+ } else {
+ logger.log(Level.INFO, "Found " + gcovFiles.size() + " gcov info files.");
+ }
+ return gcovFiles;
+ }
+
+ private static List<File> getTracefiles(
+ Map<String, String> flags, List<File> filesInCoverageDir) {
List<File> lcovTracefiles = new ArrayList<>();
if (flags.containsKey("coverage_dir")) {
- logger.log(Level.SEVERE, "Retrieving tracefiles from coverage_dir.");
- lcovTracefiles = getLcovTracefilesFromDir(flags.get("coverage_dir"));
+ lcovTracefiles = getFilesWithExtension(filesInCoverageDir, TRACEFILE_EXTENSION);
} else if (flags.containsKey("reports_file")) {
- logger.log(Level.SEVERE, "Retrieving tracefiles from reports_file.");
- lcovTracefiles = getLcovTracefilesFromFile(flags.get("reports_file"));
+ lcovTracefiles = getTracefilesFromFile(flags.get("reports_file"));
}
if (lcovTracefiles.isEmpty()) {
logger.log(Level.SEVERE, "No lcov file found.");
- System.exit(1);
+ } else {
+ logger.log(Level.INFO, "Found " + lcovTracefiles.size() + " tracefiles.");
}
- logger.log(Level.SEVERE, "Found " + lcovTracefiles.size() + " tracefiles.");
+ return lcovTracefiles;
+ }
+
+ private static Coverage parseFiles(List<File> files, Parser parser) {
Coverage coverage = new Coverage();
- for (File tracefile : lcovTracefiles) {
+ for (File file : files) {
try {
- logger.log(Level.SEVERE, "Parsing tracefile " + tracefile.toString());
- List<SourceFileCoverage> sourceFilesCoverage =
- LcovParser.parse(new FileInputStream(tracefile));
+ logger.log(Level.SEVERE, "Parsing file " + file.toString());
+ List<SourceFileCoverage> sourceFilesCoverage = parser.parse(new FileInputStream(file));
for (SourceFileCoverage sourceFileCoverage : sourceFilesCoverage) {
coverage.add(sourceFileCoverage);
}
} catch (IOException e) {
- logger.log(Level.SEVERE, "Tracefile " + tracefile.getAbsolutePath() + " was deleted");
+ logger.log(
+ Level.SEVERE,
+ "File " + file.getAbsolutePath() + " could not be parsed due to: " + e.getMessage());
System.exit(1);
}
}
- int exitStatus = 0;
- String outputFile = flags.get("output_file");
- try {
- File coverageFile = new File(outputFile);
- LcovPrinter.print(new FileOutputStream(coverageFile), coverage);
- } catch (IOException e) {
- logger.log(Level.SEVERE,
- "Could not write to output file " + outputFile + " due to " + e.getMessage());
- exitStatus = 1;
- }
- System.exit(exitStatus);
+ return coverage;
}
/**
- * Returns a list of all the files with a “.dat” extension found recursively under the given
- * directory.
+ * Returns a list of all the files with the given extension found recursively under the given dir.
*/
@VisibleForTesting
- static List<File> getLcovTracefilesFromDir(String coverageDir) {
- List<File> datFiles = new ArrayList<>();
- try (Stream<Path> stream = Files.walk(Paths.get(coverageDir))) {
- datFiles = stream.filter(p -> p.toString().endsWith(TRACEFILE_EXTENSION))
- .map(path -> path.toFile())
- .collect(Collectors.toList());
+ static List<File> getCoverageFilesInDir(String dir) {
+ List<File> files = new ArrayList<>();
+ try (Stream<Path> stream = Files.walk(Paths.get(dir))) {
+ files =
+ stream
+ .filter(
+ p ->
+ p.toString().endsWith(TRACEFILE_EXTENSION)
+ || p.toString().endsWith(GCOV_EXTENSION))
+ .map(path -> path.toFile())
+ .collect(Collectors.toList());
} catch (IOException ex) {
- logger.log(Level.SEVERE, "Error reading folder " + coverageDir + ": " + ex.getMessage());
+ logger.log(Level.SEVERE, "Error reading folder " + dir + ": " + ex.getMessage());
}
+ return files;
+ }
- return datFiles;
+ static List<File> getFilesWithExtension(List<File> files, String extension) {
+ return files
+ .stream()
+ .filter(file -> file.toString().endsWith(extension))
+ .collect(Collectors.toList());
}
- static List<File> getLcovTracefilesFromFile(String reportsFile) {
+ static List<File> getTracefilesFromFile(String reportsFile) {
List<File> datFiles = new ArrayList<>();
try (FileInputStream inputStream = new FileInputStream(reportsFile)) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, UTF_8);