Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java')
-rw-r--r--plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java692
1 files changed, 346 insertions, 346 deletions
diff --git a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java
index e35dbf10f00..8d4423b5e46 100644
--- a/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java
+++ b/plugins/org.eclipse.osee.coverage/src/org/eclipse/osee/coverage/vcast/VectorCastAdaCoverageImporter.java
@@ -1,346 +1,346 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osee.coverage.vcast;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.osee.coverage.ICoverageImporter;
-import org.eclipse.osee.coverage.internal.Activator;
-import org.eclipse.osee.coverage.model.CoverageImport;
-import org.eclipse.osee.coverage.model.CoverageItem;
-import org.eclipse.osee.coverage.model.CoverageOptionManager;
-import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
-import org.eclipse.osee.coverage.model.CoverageUnit;
-import org.eclipse.osee.coverage.model.SimpleCoverageUnitFileContentsProvider;
-import org.eclipse.osee.coverage.vcast.VcpResultsFile.ResultsValue;
-import org.eclipse.osee.coverage.vcast.VcpSourceFile.SourceValue;
-import org.eclipse.osee.framework.core.exception.OseeCoreException;
-import org.eclipse.osee.framework.jdk.core.type.Pair;
-import org.eclipse.osee.framework.jdk.core.util.Lib;
-import org.eclipse.osee.framework.jdk.core.util.Strings;
-import org.eclipse.osee.framework.jdk.core.util.io.MatchFilter;
-import org.eclipse.osee.framework.logging.OseeLog;
-
-/**
- * @author Donald G. Dunne
- */
-public class VectorCastAdaCoverageImporter implements ICoverageImporter {
-
- private CoverageImport coverageImport;
- private final IVectorCastCoverageImportProvider vectorCastCoverageImportProvider;
- Pattern sourceLinePattern = Pattern.compile("^[0-9]+ [0-9]+(.*?)$");
-
- public VectorCastAdaCoverageImporter(IVectorCastCoverageImportProvider vectorCastCoverageImportProvider) {
- this.vectorCastCoverageImportProvider = vectorCastCoverageImportProvider;
- }
-
- @Override
- public CoverageImport run(IProgressMonitor progressMonitor) {
- coverageImport = new CoverageImport("VectorCast Import");
- coverageImport.setCoverageUnitFileContentsProvider(new SimpleCoverageUnitFileContentsProvider());
-
- if (!Strings.isValid(vectorCastCoverageImportProvider.getVCastDirectory())) {
- coverageImport.getLog().logError("VectorCast directory must be specified");
- return coverageImport;
- }
-
- File file = new File(vectorCastCoverageImportProvider.getVCastDirectory());
- if (!file.exists()) {
- coverageImport.getLog().logError(
- String.format("VectorCast directory doesn't exist [%s]",
- vectorCastCoverageImportProvider.getVCastDirectory()));
- return coverageImport;
- }
-
- coverageImport.setImportDirectory(vectorCastCoverageImportProvider.getVCastDirectory());
- // Add config files to import record
- try {
- coverageImport.addImportRecordFile(new File(
- vectorCastCoverageImportProvider.getVCastDirectory() + "\\CCAST_.CFG"));
- } catch (Exception ex) {
- coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
- }
- try {
- coverageImport.addImportRecordFile(new File(
- vectorCastCoverageImportProvider.getVCastDirectory() + "\\vcast\\build_info.xml"));
- } catch (Exception ex) {
- coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
- }
-
- VCastVcp vCastVcp = null;
- try {
- vCastVcp = new VCastVcp(vectorCastCoverageImportProvider.getVCastDirectory());
- } catch (Exception ex) {
- coverageImport.getLog().logError("Exception reading vcast.vcp file: " + ex.getLocalizedMessage());
- return coverageImport;
- }
- try {
- coverageImport.addImportRecordFile(vCastVcp.getFile());
- } catch (Exception ex) {
- coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
- }
- coverageImport.setLocation(vectorCastCoverageImportProvider.getVCastDirectory());
-
- // Create file and subprogram Coverage Units and execution line Coverage Items
- Map<String, CoverageUnit> fileNumToCoverageUnit = new HashMap<String, CoverageUnit>();
- Map<String, CoverageUnit> coverageNameToCoverageUnit = new HashMap<String, CoverageUnit>();
- Map<CoverageUnit, CoverageDataSubProgram> methodCoverageUnitToCoverageDataSubProgram =
- new HashMap<CoverageUnit, CoverageDataSubProgram>();
- List<VcpSourceFile> vcpSourceFiles = vCastVcp.sourceFiles;
- if (progressMonitor != null) {
- progressMonitor.beginTask("Importing Source File Data", vcpSourceFiles.size());
- }
- int x = 1;
- for (VcpSourceFile vcpSourceFile : vCastVcp.sourceFiles) {
- String str =
- String.format("Processing VcpSourceFile %d/%d [%s]...", x++, vcpSourceFiles.size(), vcpSourceFile);
- System.out.println(str);
- if (progressMonitor != null) {
- progressMonitor.worked(1);
- progressMonitor.subTask(str);
- }
- try {
- CoverageDataFile coverageDataFile = null;
- try {
- coverageDataFile = vcpSourceFile.getCoverageDataFile();
- } catch (Exception ex) {
- coverageImport.getLog().logError(
- String.format("Can't find .xml file for source file [%s] exception [%s]",
- vcpSourceFile.getValue(SourceValue.SOURCE_FILENAME), ex));
- continue;
- }
- try {
- coverageImport.addImportRecordFile(coverageDataFile.getFile());
- } catch (Exception ex) {
- coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
- }
- for (CoverageDataUnit coverageDataUnit : coverageDataFile.getCoverageDataUnits()) {
- CoverageUnit fileCoverageUnit =
- coverageImport.createCoverageUnit(null, vcpSourceFile.getValue(SourceValue.SOURCE_FILENAME), "");
- String fileNamespace = vectorCastCoverageImportProvider.getFileNamespace(coverageDataUnit.getName());
- fileCoverageUnit.setNamespace(fileNamespace);
- CoverageUnit parent = coverageImport.getOrCreateParent(fileCoverageUnit.getNamespace());
- if (parent != null) {
- parent.addCoverageUnit(fileCoverageUnit);
- } else {
- coverageImport.addCoverageUnit(fileCoverageUnit);
- }
- VcpSourceLisFile vcpSourceLisFile = vcpSourceFile.getVcpSourceLisFile();
- try {
- coverageImport.addImportRecordFile(vcpSourceLisFile.getFile());
- } catch (Exception ex) {
- coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
- }
-
- fileCoverageUnit.setFileContents(vcpSourceLisFile.getText());
- int methodNum = 0;
- for (CoverageDataSubProgram coverageDataSubProgram : coverageDataUnit.getSubPrograms()) {
- methodNum++;
- CoverageUnit methodCoverageUnit =
- coverageImport.createCoverageUnit(fileCoverageUnit, coverageDataSubProgram.getName(), "");
- // Store this mapping so can check covered/totals later
- methodCoverageUnitToCoverageDataSubProgram.put(methodCoverageUnit, coverageDataSubProgram);
- fileCoverageUnit.addCoverageUnit(methodCoverageUnit);
- methodCoverageUnit.setOrderNumber(String.valueOf(methodNum));
- for (LineNumToBranches lineNumToBranches : coverageDataSubProgram.getLineNumToBranches()) {
- CoverageItem coverageItem =
- new CoverageItem(methodCoverageUnit, CoverageOptionManager.Not_Covered,
- String.valueOf(lineNumToBranches.getLineNum()));
- Pair<String, Boolean> lineData =
- vcpSourceLisFile.getExecutionLine(String.valueOf(methodNum),
- String.valueOf(lineNumToBranches.getLineNum()));
- String sourceLine = lineData.getFirst();
- // Need to get rid of line method num and line num before storing
- Matcher m = sourceLinePattern.matcher(sourceLine);
- if (m.find()) {
- coverageItem.setName(m.group(1));
- } else {
- coverageImport.getLog().logError(
- String.format("Coverage line doesn't match \"n n <line>\" [%s]. " + sourceLine));
- continue;
- }
- if (vectorCastCoverageImportProvider.isResolveExceptionHandling() && lineData.getSecond()) {
- coverageItem.setCoverageMethod(CoverageOptionManager.Exception_Handling);
- }
- methodCoverageUnit.addCoverageItem(coverageItem);
- }
- }
- fileNumToCoverageUnit.put(String.valueOf(coverageDataUnit.getIndex()), fileCoverageUnit);
- coverageNameToCoverageUnit.put(fileCoverageUnit.getName(), fileCoverageUnit);
- }
- } catch (Exception ex) {
- coverageImport.getLog().logError(
- String.format("Error processing coverage for [%s]. " + ex.getLocalizedMessage(), vcpSourceFile));
- continue;
- }
- }
-
- // Process all results files and map to coverage units
- List<VcpResultsFile> vcpResultsFiles = vCastVcp.resultsFiles;
- if (progressMonitor != null) {
- progressMonitor.beginTask("Importing Test Unit Data", vcpResultsFiles.size());
- }
- x = 1;
- for (VcpResultsFile vcpResultsFile : vcpResultsFiles) {
- String str =
- String.format("Processing VcpResultsFile %d/%d [%s]...", x++, vcpResultsFiles.size(), vcpResultsFile);
- // System.out.println(str);
- if (progressMonitor != null) {
- progressMonitor.worked(1);
- progressMonitor.subTask(str);
- }
- String testUnitName = vcpResultsFile.getValue(ResultsValue.FILENAME);
- try {
- coverageImport.addImportRecordFile(vcpResultsFile.getVcpResultsDatFile().getFile());
- } catch (Exception ex) {
- coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
- }
-
- try {
- for (String fileNum : vcpResultsFile.getVcpResultsDatFile().getFileNumbers()) {
- CoverageUnit coverageUnit = fileNumToCoverageUnit.get(fileNum);
- if (coverageUnit == null) {
- coverageImport.getLog().logError(
- String.format("coverageUnit doesn't exist for unit_number [%s]", fileNum));
- continue;
- }
- for (Pair<String, HashSet<String>> methodExecutionPair : vcpResultsFile.getVcpResultsDatFile().getMethodExecutionPairs(
- fileNum)) {
- String methodNum = methodExecutionPair.getFirst();
- Set<String> executeNums = methodExecutionPair.getSecond();
- for (String executeNum : executeNums) {
- // Find or create new coverage item for method num /execution line
- CoverageItem coverageItem = coverageUnit.getCoverageItem(methodNum, executeNum);
- if (coverageItem == null) {
- coverageImport.getLog().logError(
- String.format("Can't retrieve method [%s] from coverageUnit [%s] for test unit [%s]",
- methodNum, coverageUnit, testUnitName));
- } else {
- coverageItem.setCoverageMethod(CoverageOptionManager.Test_Unit);
- try {
- coverageItem.addTestUnitName(testUnitName);
- } catch (OseeCoreException ex) {
- coverageImport.getLog().logError(
- String.format("Can't store test unit [%s] for coverageUnit [%s]; exception [%s]",
- testUnitName, coverageUnit, ex.getLocalizedMessage()));
-
- }
- }
- }
- }
- }
- } catch (Exception ex) {
- coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
- }
- }
-
- // Validate VectorCast covered/total from <unit>.xml files with imported results files above
- coverageImport.getLog().log(
- "\nVerifying number results files reported in vcast.vcp with vcast/results/*.dat files");
- int numVcastVcpDatFiles = vCastVcp.getResultsFiles().size();
- List<String> filenames =
- Lib.readListFromDir(new File(vectorCastCoverageImportProvider.getVCastDirectory() + "\\vcast\\results\\"),
- new MatchFilter(".*\\.DAT"), false);
- if (numVcastVcpDatFiles != filenames.size()) {
- coverageImport.getLog().logError(
- String.format("Vcast.vcp num results files [%d] doesn't match number of vcast/results/*.dat files [%d]",
- numVcastVcpDatFiles, filenames.size()));
- } else {
- coverageImport.getLog().log("Ok");
- }
-
- // Validate VectorCast covered/total from <unit>.xml files with imported results files above
- coverageImport.getLog().log(
- "\nVerifying VectorCast covered/total items from vcast/<unit>.xml with data imported from results read from vcast.vcp and results dir");
- boolean error = false;
- for (Entry<CoverageUnit, CoverageDataSubProgram> entry : methodCoverageUnitToCoverageDataSubProgram.entrySet()) {
- CoverageUnit methodCoverageUnit = entry.getKey();
- CoverageDataSubProgram coverageDataSubProgram = entry.getValue();
- int totalCoverageItems = methodCoverageUnit.getCoverageItems(false).size();
- int coveredCoverageItems =
- methodCoverageUnit.getCoverageItemsCovered(false, CoverageOptionManager.Test_Unit).size();
- if (totalCoverageItems != coverageDataSubProgram.getTotal() || coveredCoverageItems != coverageDataSubProgram.getCovered()) {
- coverageImport.getLog().logError(
- String.format(
- "Imported covered/total items [%d/%d] doesn't match VectorCast [%d/%d] reported in .xml file for coverage unit [%s]",
- coveredCoverageItems, totalCoverageItems, coverageDataSubProgram.getCovered(),
- coverageDataSubProgram.getTotal(), methodCoverageUnit));
- error = true;
- }
- }
- if (!error) {
- coverageImport.getLog().log("Ok");
- }
-
- try {
- coverageImport.getLog().log("\nVerifying aggregate.html report with Imported results");
- // Retrieve and process Aggregate file compared with import results
- VCastAggregateReport report = new VCastAggregateReport(vectorCastCoverageImportProvider.getVCastDirectory());
- error = false;
- for (AggregateCoverageUnitResult result : report.getResults()) {
- // System.out.println(result);
- CoverageUnit coverageUnit = coverageNameToCoverageUnit.get(result.getName());
- if (coverageUnit == null) {
- coverageImport.getLog().logError(
- String.format("Aggregate Check: Can't locate Coverage Unit for Aggregate unit [%s]",
- result.getName()));
- error = true;
- } else {
- int importCuItems = coverageUnit.getCoverageItems(true).size();
- int importCuCovered =
- coverageUnit.getCoverageItemsCovered(true, CoverageOptionManagerDefault.Test_Unit).size();
- if ((result.getNumLines() == null || result.getNumLines() != importCuItems) || (result.getNumCovered() == null || result.getNumCovered() != importCuCovered)) {
- // Don't display error if this is the known ignore case
- if (!isVectorCastIgnoreCase(result.getNotes(), importCuCovered, result.getNumCovered())) {
- coverageImport.getLog().logError(
- String.format(
- "Aggregate Check: Unit [%s] Import [%d] of [%d] doesn't match Aggregate [%d] of [%d] [%s]",
- result.getName(), importCuCovered, importCuItems, result.getNumCovered(),
- result.getNumLines(),
- Strings.isValid(result.getNotes()) ? " - " + result.getNotes() : ""));
- error = true;
- }
- }
- }
- }
- if (!error) {
- coverageImport.getLog().log("Ok");
- }
- } catch (Exception ex) {
- OseeLog.log(Activator.class, Level.SEVERE, ex);
- coverageImport.getLog().logError("\nError Processing Aggregate File: " + ex.getLocalizedMessage());
- }
- return coverageImport;
- }
-
- /**
- * VectorCast does not put breakout information for coverage units that have no coverage. Check for this case so we
- * don't show lots of errors.
- */
- private boolean isVectorCastIgnoreCase(String notes, Integer importCuCovered, Integer aggregateNumCovered) {
- return notes.equals("No Coverage Data Exists") && importCuCovered == 0 && aggregateNumCovered == null;
- }
-
- @Override
- public String getName() {
- return "VectorCast Import";
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.coverage.vcast;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.coverage.ICoverageImporter;
+import org.eclipse.osee.coverage.internal.Activator;
+import org.eclipse.osee.coverage.model.CoverageImport;
+import org.eclipse.osee.coverage.model.CoverageItem;
+import org.eclipse.osee.coverage.model.CoverageOptionManager;
+import org.eclipse.osee.coverage.model.CoverageOptionManagerDefault;
+import org.eclipse.osee.coverage.model.CoverageUnit;
+import org.eclipse.osee.coverage.model.SimpleCoverageUnitFileContentsProvider;
+import org.eclipse.osee.coverage.vcast.VcpResultsFile.ResultsValue;
+import org.eclipse.osee.coverage.vcast.VcpSourceFile.SourceValue;
+import org.eclipse.osee.framework.core.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.framework.jdk.core.util.io.MatchFilter;
+import org.eclipse.osee.framework.logging.OseeLog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class VectorCastAdaCoverageImporter implements ICoverageImporter {
+
+ private CoverageImport coverageImport;
+ private final IVectorCastCoverageImportProvider vectorCastCoverageImportProvider;
+ Pattern sourceLinePattern = Pattern.compile("^[0-9]+ [0-9]+(.*?)$");
+
+ public VectorCastAdaCoverageImporter(IVectorCastCoverageImportProvider vectorCastCoverageImportProvider) {
+ this.vectorCastCoverageImportProvider = vectorCastCoverageImportProvider;
+ }
+
+ @Override
+ public CoverageImport run(IProgressMonitor progressMonitor) {
+ coverageImport = new CoverageImport("VectorCast Import");
+ coverageImport.setCoverageUnitFileContentsProvider(new SimpleCoverageUnitFileContentsProvider());
+
+ if (!Strings.isValid(vectorCastCoverageImportProvider.getVCastDirectory())) {
+ coverageImport.getLog().logError("VectorCast directory must be specified");
+ return coverageImport;
+ }
+
+ File file = new File(vectorCastCoverageImportProvider.getVCastDirectory());
+ if (!file.exists()) {
+ coverageImport.getLog().logError(
+ String.format("VectorCast directory doesn't exist [%s]",
+ vectorCastCoverageImportProvider.getVCastDirectory()));
+ return coverageImport;
+ }
+
+ coverageImport.setImportDirectory(vectorCastCoverageImportProvider.getVCastDirectory());
+ // Add config files to import record
+ try {
+ coverageImport.addImportRecordFile(new File(
+ vectorCastCoverageImportProvider.getVCastDirectory() + "\\CCAST_.CFG"));
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ try {
+ coverageImport.addImportRecordFile(new File(
+ vectorCastCoverageImportProvider.getVCastDirectory() + "\\vcast\\build_info.xml"));
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+
+ VCastVcp vCastVcp = null;
+ try {
+ vCastVcp = new VCastVcp(vectorCastCoverageImportProvider.getVCastDirectory());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Exception reading vcast.vcp file: " + ex.getLocalizedMessage());
+ return coverageImport;
+ }
+ try {
+ coverageImport.addImportRecordFile(vCastVcp.getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ coverageImport.setLocation(vectorCastCoverageImportProvider.getVCastDirectory());
+
+ // Create file and subprogram Coverage Units and execution line Coverage Items
+ Map<String, CoverageUnit> fileNumToCoverageUnit = new HashMap<String, CoverageUnit>();
+ Map<String, CoverageUnit> coverageNameToCoverageUnit = new HashMap<String, CoverageUnit>();
+ Map<CoverageUnit, CoverageDataSubProgram> methodCoverageUnitToCoverageDataSubProgram =
+ new HashMap<CoverageUnit, CoverageDataSubProgram>();
+ List<VcpSourceFile> vcpSourceFiles = vCastVcp.sourceFiles;
+ if (progressMonitor != null) {
+ progressMonitor.beginTask("Importing Source File Data", vcpSourceFiles.size());
+ }
+ int x = 1;
+ for (VcpSourceFile vcpSourceFile : vCastVcp.sourceFiles) {
+ String str =
+ String.format("Processing VcpSourceFile %d/%d [%s]...", x++, vcpSourceFiles.size(), vcpSourceFile);
+ System.out.println(str);
+ if (progressMonitor != null) {
+ progressMonitor.worked(1);
+ progressMonitor.subTask(str);
+ }
+ try {
+ CoverageDataFile coverageDataFile = null;
+ try {
+ coverageDataFile = vcpSourceFile.getCoverageDataFile();
+ } catch (Exception ex) {
+ coverageImport.getLog().logError(
+ String.format("Can't find .xml file for source file [%s] exception [%s]",
+ vcpSourceFile.getValue(SourceValue.SOURCE_FILENAME), ex));
+ continue;
+ }
+ try {
+ coverageImport.addImportRecordFile(coverageDataFile.getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ for (CoverageDataUnit coverageDataUnit : coverageDataFile.getCoverageDataUnits()) {
+ CoverageUnit fileCoverageUnit =
+ coverageImport.createCoverageUnit(null, vcpSourceFile.getValue(SourceValue.SOURCE_FILENAME), "");
+ String fileNamespace = vectorCastCoverageImportProvider.getFileNamespace(coverageDataUnit.getName());
+ fileCoverageUnit.setNamespace(fileNamespace);
+ CoverageUnit parent = coverageImport.getOrCreateParent(fileCoverageUnit.getNamespace());
+ if (parent != null) {
+ parent.addCoverageUnit(fileCoverageUnit);
+ } else {
+ coverageImport.addCoverageUnit(fileCoverageUnit);
+ }
+ VcpSourceLisFile vcpSourceLisFile = vcpSourceFile.getVcpSourceLisFile();
+ try {
+ coverageImport.addImportRecordFile(vcpSourceLisFile.getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+
+ fileCoverageUnit.setFileContents(vcpSourceLisFile.getText());
+ int methodNum = 0;
+ for (CoverageDataSubProgram coverageDataSubProgram : coverageDataUnit.getSubPrograms()) {
+ methodNum++;
+ CoverageUnit methodCoverageUnit =
+ coverageImport.createCoverageUnit(fileCoverageUnit, coverageDataSubProgram.getName(), "");
+ // Store this mapping so can check covered/totals later
+ methodCoverageUnitToCoverageDataSubProgram.put(methodCoverageUnit, coverageDataSubProgram);
+ fileCoverageUnit.addCoverageUnit(methodCoverageUnit);
+ methodCoverageUnit.setOrderNumber(String.valueOf(methodNum));
+ for (LineNumToBranches lineNumToBranches : coverageDataSubProgram.getLineNumToBranches()) {
+ CoverageItem coverageItem =
+ new CoverageItem(methodCoverageUnit, CoverageOptionManager.Not_Covered,
+ String.valueOf(lineNumToBranches.getLineNum()));
+ Pair<String, Boolean> lineData =
+ vcpSourceLisFile.getExecutionLine(String.valueOf(methodNum),
+ String.valueOf(lineNumToBranches.getLineNum()));
+ String sourceLine = lineData.getFirst();
+ // Need to get rid of line method num and line num before storing
+ Matcher m = sourceLinePattern.matcher(sourceLine);
+ if (m.find()) {
+ coverageItem.setName(m.group(1));
+ } else {
+ coverageImport.getLog().logError(
+ String.format("Coverage line doesn't match \"n n <line>\" [%s]. " + sourceLine));
+ continue;
+ }
+ if (vectorCastCoverageImportProvider.isResolveExceptionHandling() && lineData.getSecond()) {
+ coverageItem.setCoverageMethod(CoverageOptionManager.Exception_Handling);
+ }
+ methodCoverageUnit.addCoverageItem(coverageItem);
+ }
+ }
+ fileNumToCoverageUnit.put(String.valueOf(coverageDataUnit.getIndex()), fileCoverageUnit);
+ coverageNameToCoverageUnit.put(fileCoverageUnit.getName(), fileCoverageUnit);
+ }
+ } catch (Exception ex) {
+ coverageImport.getLog().logError(
+ String.format("Error processing coverage for [%s]. " + ex.getLocalizedMessage(), vcpSourceFile));
+ continue;
+ }
+ }
+
+ // Process all results files and map to coverage units
+ List<VcpResultsFile> vcpResultsFiles = vCastVcp.resultsFiles;
+ if (progressMonitor != null) {
+ progressMonitor.beginTask("Importing Test Unit Data", vcpResultsFiles.size());
+ }
+ x = 1;
+ for (VcpResultsFile vcpResultsFile : vcpResultsFiles) {
+ String str =
+ String.format("Processing VcpResultsFile %d/%d [%s]...", x++, vcpResultsFiles.size(), vcpResultsFile);
+ // System.out.println(str);
+ if (progressMonitor != null) {
+ progressMonitor.worked(1);
+ progressMonitor.subTask(str);
+ }
+ String testUnitName = vcpResultsFile.getValue(ResultsValue.FILENAME);
+ try {
+ coverageImport.addImportRecordFile(vcpResultsFile.getVcpResultsDatFile().getFile());
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+
+ try {
+ for (String fileNum : vcpResultsFile.getVcpResultsDatFile().getFileNumbers()) {
+ CoverageUnit coverageUnit = fileNumToCoverageUnit.get(fileNum);
+ if (coverageUnit == null) {
+ coverageImport.getLog().logError(
+ String.format("coverageUnit doesn't exist for unit_number [%s]", fileNum));
+ continue;
+ }
+ for (Pair<String, HashSet<String>> methodExecutionPair : vcpResultsFile.getVcpResultsDatFile().getMethodExecutionPairs(
+ fileNum)) {
+ String methodNum = methodExecutionPair.getFirst();
+ Set<String> executeNums = methodExecutionPair.getSecond();
+ for (String executeNum : executeNums) {
+ // Find or create new coverage item for method num /execution line
+ CoverageItem coverageItem = coverageUnit.getCoverageItem(methodNum, executeNum);
+ if (coverageItem == null) {
+ coverageImport.getLog().logError(
+ String.format("Can't retrieve method [%s] from coverageUnit [%s] for test unit [%s]",
+ methodNum, coverageUnit, testUnitName));
+ } else {
+ coverageItem.setCoverageMethod(CoverageOptionManager.Test_Unit);
+ try {
+ coverageItem.addTestUnitName(testUnitName);
+ } catch (OseeCoreException ex) {
+ coverageImport.getLog().logError(
+ String.format("Can't store test unit [%s] for coverageUnit [%s]; exception [%s]",
+ testUnitName, coverageUnit, ex.getLocalizedMessage()));
+
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception ex) {
+ coverageImport.getLog().logError("Error Adding Import Record File: " + ex.getLocalizedMessage());
+ }
+ }
+
+ // Validate VectorCast covered/total from <unit>.xml files with imported results files above
+ coverageImport.getLog().log(
+ "\nVerifying number results files reported in vcast.vcp with vcast/results/*.dat files");
+ int numVcastVcpDatFiles = vCastVcp.getResultsFiles().size();
+ List<String> filenames =
+ Lib.readListFromDir(new File(vectorCastCoverageImportProvider.getVCastDirectory() + "\\vcast\\results\\"),
+ new MatchFilter(".*\\.DAT"), false);
+ if (numVcastVcpDatFiles != filenames.size()) {
+ coverageImport.getLog().logError(
+ String.format("Vcast.vcp num results files [%d] doesn't match number of vcast/results/*.dat files [%d]",
+ numVcastVcpDatFiles, filenames.size()));
+ } else {
+ coverageImport.getLog().log("Ok");
+ }
+
+ // Validate VectorCast covered/total from <unit>.xml files with imported results files above
+ coverageImport.getLog().log(
+ "\nVerifying VectorCast covered/total items from vcast/<unit>.xml with data imported from results read from vcast.vcp and results dir");
+ boolean error = false;
+ for (Entry<CoverageUnit, CoverageDataSubProgram> entry : methodCoverageUnitToCoverageDataSubProgram.entrySet()) {
+ CoverageUnit methodCoverageUnit = entry.getKey();
+ CoverageDataSubProgram coverageDataSubProgram = entry.getValue();
+ int totalCoverageItems = methodCoverageUnit.getCoverageItems(false).size();
+ int coveredCoverageItems =
+ methodCoverageUnit.getCoverageItemsCovered(false, CoverageOptionManager.Test_Unit).size();
+ if (totalCoverageItems != coverageDataSubProgram.getTotal() || coveredCoverageItems != coverageDataSubProgram.getCovered()) {
+ coverageImport.getLog().logError(
+ String.format(
+ "Imported covered/total items [%d/%d] doesn't match VectorCast [%d/%d] reported in .xml file for coverage unit [%s]",
+ coveredCoverageItems, totalCoverageItems, coverageDataSubProgram.getCovered(),
+ coverageDataSubProgram.getTotal(), methodCoverageUnit));
+ error = true;
+ }
+ }
+ if (!error) {
+ coverageImport.getLog().log("Ok");
+ }
+
+ try {
+ coverageImport.getLog().log("\nVerifying aggregate.html report with Imported results");
+ // Retrieve and process Aggregate file compared with import results
+ VCastAggregateReport report = new VCastAggregateReport(vectorCastCoverageImportProvider.getVCastDirectory());
+ error = false;
+ for (AggregateCoverageUnitResult result : report.getResults()) {
+ // System.out.println(result);
+ CoverageUnit coverageUnit = coverageNameToCoverageUnit.get(result.getName());
+ if (coverageUnit == null) {
+ coverageImport.getLog().logError(
+ String.format("Aggregate Check: Can't locate Coverage Unit for Aggregate unit [%s]",
+ result.getName()));
+ error = true;
+ } else {
+ int importCuItems = coverageUnit.getCoverageItems(true).size();
+ int importCuCovered =
+ coverageUnit.getCoverageItemsCovered(true, CoverageOptionManagerDefault.Test_Unit).size();
+ if ((result.getNumLines() == null || result.getNumLines() != importCuItems) || (result.getNumCovered() == null || result.getNumCovered() != importCuCovered)) {
+ // Don't display error if this is the known ignore case
+ if (!isVectorCastIgnoreCase(result.getNotes(), importCuCovered, result.getNumCovered())) {
+ coverageImport.getLog().logError(
+ String.format(
+ "Aggregate Check: Unit [%s] Import [%d] of [%d] doesn't match Aggregate [%d] of [%d] [%s]",
+ result.getName(), importCuCovered, importCuItems, result.getNumCovered(),
+ result.getNumLines(),
+ Strings.isValid(result.getNotes()) ? " - " + result.getNotes() : ""));
+ error = true;
+ }
+ }
+ }
+ }
+ if (!error) {
+ coverageImport.getLog().log("Ok");
+ }
+ } catch (Exception ex) {
+ OseeLog.log(Activator.class, Level.SEVERE, ex);
+ coverageImport.getLog().logError("\nError Processing Aggregate File: " + ex.getLocalizedMessage());
+ }
+ return coverageImport;
+ }
+
+ /**
+ * VectorCast does not put breakout information for coverage units that have no coverage. Check for this case so we
+ * don't show lots of errors.
+ */
+ private boolean isVectorCastIgnoreCase(String notes, Integer importCuCovered, Integer aggregateNumCovered) {
+ return notes.equals("No Coverage Data Exists") && importCuCovered == 0 && aggregateNumCovered == null;
+ }
+
+ @Override
+ public String getName() {
+ return "VectorCast Import";
+ }
+
+}

Back to the top