/// <summary> /// Called when a test run is completed. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// Test run complete events arguments. /// </param> internal void TestRunCompleteHandler(object sender, TestRunCompleteEventArgs e) { if (e.AttachmentSets == null) { return; } var coverageAttachments = e.AttachmentSets .Where(dataCollectionAttachment => CodeCoverageDataCollectorUri.Equals(dataCollectionAttachment.Uri)).ToArray(); Console.WriteLine($"CoverageLogger.TestRunCompleteHandler: Found {coverageAttachments.Length} attachments."); if (coverageAttachments.Any()) { var codeCoverageFiles = coverageAttachments.Select(coverageAttachment => coverageAttachment.Attachments[0].Uri.LocalPath).ToArray(); foreach (var codeCoverageFile in codeCoverageFiles) { var resultFile = Path.Combine(Path.GetDirectoryName(codeCoverageFile), Path.GetFileNameWithoutExtension(codeCoverageFile) + ".xml"); try { this.codeCoverageUtility.AnalyzeCoverageFile(codeCoverageFile, this.GetCodeCoverageExePath()); } catch (Exception ex) { Console.WriteLine(ex.Message); } var summary = this.codeCoverageUtility.GetCoverageSummary(resultFile); Console.WriteLine(summary); var coverageFileContents = XDocument.Parse(File.ReadAllText(resultFile)); try { var codeCoverageInternalRepresentation = new CodeCoverageReader().ParseCoverageFile(coverageFileContents, coverageFileContents.Root.Name.Namespace); var lcovFilePath = Path.Combine(new DirectoryInfo(Path.GetDirectoryName(codeCoverageFile)).Parent.FullName, "lcov.info"); File.WriteAllText(lcovFilePath, new Generator().GenerateLcovCoverageData(codeCoverageInternalRepresentation).ToString()); } catch (Exception err) { Console.WriteLine(err); } } } }
public CodeCoverageReaderTests() { this.codeCoverageReader = new CodeCoverageReader(); }