public void Will_calculate_coverage_percentage() { var coverageData = new CoverageData(); coverageData["file1"] = new CoverageFileData(); coverageData["file2"] = new CoverageFileData(); coverageData["file1"].LineExecutionCounts = new int?[]{/* index 0 ignored */ 0,0,1, null,0,1}; coverageData["file2"].LineExecutionCounts = new int?[]{/* index 0 ignored */ 0,5,1,2,1, null}; Assert.Equal(0.5, coverageData["file1"].CoveragePercentage); Assert.Equal(1, coverageData["file2"].CoveragePercentage); Assert.Equal(0.75, coverageData.CoveragePercentage); }
public void Will_calculate_coverage_percentage() { var coverageData = new CoverageData(); coverageData["file1"] = new CoverageFileData(); coverageData["file2"] = new CoverageFileData(); coverageData["file1"].LineExecutionCounts = new int?[] { /* index 0 ignored */ 0, 0, 1, null, 0, 1 }; coverageData["file2"].LineExecutionCounts = new int?[] { /* index 0 ignored */ 0, 5, 1, 2, 1, null }; Assert.Equal(0.5, coverageData["file1"].CoveragePercentage); Assert.Equal(1, coverageData["file2"].CoveragePercentage); Assert.Equal(0.75, coverageData.CoveragePercentage); }
public void Will_merge_coverage_object_with_an_empty_one() { var coverageData = new CoverageData(); coverageData["file1"] = new CoverageFileData(); coverageData["file2"] = new CoverageFileData(); coverageData["file1"].LineExecutionCounts = new int?[] {/* index 0 ignored */ 0, 0, 1, null, 0, 1 }; coverageData["file2"].LineExecutionCounts = new int?[] {/* index 0 ignored */ 0, 5, 1, 2, 1, null }; var newCoverageData = new CoverageData(); newCoverageData.Merge(coverageData); Assert.Equal(0.5, newCoverageData["file1"].CoveragePercentage); Assert.Equal(1, newCoverageData["file2"].CoveragePercentage); Assert.Equal(0.75, newCoverageData.CoveragePercentage); }
public CoverageFileDataFacts() { this.data1 = new CoverageFileData { FilePath = "test1", LineExecutionCounts = new int?[] { null, 1, 0, 1 }, SourceLines = new[] { "" } }; this.data2 = new CoverageFileData { FilePath = "test1", LineExecutionCounts = new int?[] { null, 0, 1, 0 }, SourceLines = new[] { "" } }; }
public void Will_merge_coverage_object_with_an_empty_one() { var coverageData = new CoverageData(); coverageData["file1"] = new CoverageFileData(); coverageData["file2"] = new CoverageFileData(); coverageData["file1"].LineExecutionCounts = new int?[] { /* index 0 ignored */ 0, 0, 1, null, 0, 1 }; coverageData["file2"].LineExecutionCounts = new int?[] { /* index 0 ignored */ 0, 5, 1, 2, 1, null }; var newCoverageData = new CoverageData(); newCoverageData.Merge(coverageData); Assert.Equal(0.5, newCoverageData["file1"].CoveragePercentage); Assert.Equal(1, newCoverageData["file2"].CoveragePercentage); Assert.Equal(0.75, newCoverageData.CoveragePercentage); }
public void Will_merge_coverage_object_with_an_existing_one() { var coverageData1 = new CoverageData(); coverageData1["file1"] = new CoverageFileData(); coverageData1["file1"].LineExecutionCounts = new int?[] {/* index 0 ignored */ 0, 0, 2, 1, 0, 0 }; var coverageData2 = new CoverageData(); coverageData2["file1"] = new CoverageFileData(); coverageData2["file2"] = new CoverageFileData(); coverageData2["file1"].LineExecutionCounts = new int?[] {/* index 0 ignored */ 0, 0, 1, null, 0, 1 }; coverageData2["file2"].LineExecutionCounts = new int?[] {/* index 0 ignored */ 0, 5, 1, 2, 1, null }; coverageData1.Merge(coverageData2); Assert.Equal(0.6, coverageData1["file1"].CoveragePercentage); Assert.Equal(1, coverageData1["file2"].CoveragePercentage); Assert.Equal(0.778, Math.Round(coverageData1.CoveragePercentage,3)); }
private void AppendCoverageForFile(StringBuilder builder, CoverageFileData data) { var counts = data.LineExecutionCounts ?? new int?[0]; builder.AppendLine(string.Format(SOURCE_FILE_LINE_FORMAT, data.FilePath)); if (counts.Length > 1) { for (var i = 1; i < counts.Length; i++) { if (counts[i].HasValue) { builder.AppendLine(string.Format(LINE_FORMAT, i, counts[i])); } } } builder.AppendLine(FILE_DELIMITER); }
public void Will_merge_coverage_object_with_an_existing_one() { var coverageData1 = new CoverageData(); coverageData1["file1"] = new CoverageFileData(); coverageData1["file1"].LineExecutionCounts = new int?[] { /* index 0 ignored */ 0, 0, 2, 1, 0, 0 }; var coverageData2 = new CoverageData(); coverageData2["file1"] = new CoverageFileData(); coverageData2["file2"] = new CoverageFileData(); coverageData2["file1"].LineExecutionCounts = new int?[] { /* index 0 ignored */ 0, 0, 1, null, 0, 1 }; coverageData2["file2"].LineExecutionCounts = new int?[] { /* index 0 ignored */ 0, 5, 1, 2, 1, null }; coverageData1.Merge(coverageData2); Assert.Equal(0.6, coverageData1["file1"].CoveragePercentage); Assert.Equal(1, coverageData1["file2"].CoveragePercentage); Assert.Equal(0.778, Math.Round(coverageData1.CoveragePercentage, 3)); }
private void AppendCoverageForOneSourceFile(StringBuilder builder, string fileName, CoverageFileData fileData) { var totalStatements = 0; var statementsCovered = 0; builder.AppendLine(string.Format(@" <srcfile name=""{0}"">", fileName)); for (var i = 1; i < fileData.LineExecutionCounts.Length; i++) { var lineExecution = fileData.LineExecutionCounts[i]; if (lineExecution.HasValue) { totalStatements++; if (lineExecution > 0) { statementsCovered += 1; } } } AppendLineCoverageForSourceFile(builder, statementsCovered, totalStatements); builder.AppendLine(@" </srcfile>"); }
public CoverageData DeserializeCoverageObject(string json, TestContext testContext) { var data = jsonSerializer.Deserialize <BlanketCoverageObject>(json); var generatedToReferencedFile = testContext.ReferencedFiles.Where(rf => rf.GeneratedFilePath != null).ToLookup(rf => rf.GeneratedFilePath, rf => rf); var coverageData = new CoverageData(testContext.TestFileSettings.CodeCoverageSuccessPercentage.Value); // Rewrite all keys in the coverage object dictionary in order to change URIs // to paths and generated paths to original paths, then only keep the ones // that match the include/exclude patterns. foreach (var entry in data) { Uri uri = new Uri(entry.Key, UriKind.RelativeOrAbsolute); if (!uri.IsAbsoluteUri) { // Resolve against the test file path. string basePath = Path.GetDirectoryName(testContext.TestHarnessPath); uri = new Uri(Path.Combine(basePath, entry.Key)); } if (uri.Scheme != "file") { continue; } string executedFilePath = uri.LocalPath; // Fix local paths of the form: file:///c:/zzz should become c:/zzz not /c:/zzz // but keep network paths of the form: file://network/files/zzz as //network/files/zzz executedFilePath = RegexPatterns.InvalidPrefixedLocalFilePath.Replace(executedFilePath, "$1"); //REMOVE URI Query part from filepath like ?ver=1233123 executedFilePath = RegexPatterns.IgnoreQueryPartFromUri.Replace(executedFilePath, "$1"); var fileUri = new Uri(executedFilePath, UriKind.RelativeOrAbsolute); executedFilePath = fileUri.LocalPath; var referencedFiles = new List <ReferencedFile>(); if (!generatedToReferencedFile.Contains(executedFilePath)) { // This does not appear to be a compiled file so just created a referencedFile with the path referencedFiles.Add(new ReferencedFile { Path = executedFilePath }); } else { referencedFiles = generatedToReferencedFile[executedFilePath].ToList(); } referencedFiles = referencedFiles.Where(file => IsFileEligibleForInstrumentation(file.Path) && !IsIgnored(file.Path)).ToList(); foreach (var referencedFile in referencedFiles) { // The coveredPath is the file which we have coverage lines for. We assume generated if it exsits otherwise the file path var coveredPath = referencedFile.GeneratedFilePath ?? referencedFile.Path; // If the user is using source maps then always take sourcePath and not generates. if (testContext.TestFileSettings.Compile != null && testContext.TestFileSettings.Compile.UseSourceMaps.GetValueOrDefault() && referencedFile.SourceMapFilePath != null) { coveredPath = referencedFile.Path; } if (fileSystem.FileExists(coveredPath)) { string[] sourceLines = fileSystem.GetLines(coveredPath); int?[] lineExecutionCounts = entry.Value; if (testContext.TestFileSettings.Compile != null && testContext.TestFileSettings.Compile.UseSourceMaps.GetValueOrDefault() && referencedFile.SourceMapFilePath != null) { lineExecutionCounts = this.lineCoverageMapper.GetOriginalFileLineExecutionCounts(entry.Value, sourceLines.Length, referencedFile); } var coverageFileData = new CoverageFileData { LineExecutionCounts = lineExecutionCounts, FilePath = referencedFile.Path, SourceLines = sourceLines }; // If some AMD modules has different "non canonical" references (like "../../module" and "./../../module"). Coverage trying to add files many times if (coverageData.ContainsKey(referencedFile.Path)) { coverageData[referencedFile.Path].Merge(coverageFileData); } else { coverageData.Add(referencedFile.Path, coverageFileData); } } } } return(coverageData); }
private void AppendCoverageForOneSourceFile(StringBuilder builder, string fileName, CoverageFileData fileData) { var totalStatements = 0; var statementsCovered = 0; builder.AppendLine($@" <sourcefile name=""{fileName}"">"); for (var i = 1; i < fileData.LineExecutionCounts.Length; i++) { var lineExecution = fileData.LineExecutionCounts[i]; if (lineExecution.HasValue) { var missedCount = lineExecution.Value <= 0 ? 1 : 0; var coveredCount = lineExecution.Value; builder.AppendLine($@" <line nr=""{i}"" mi=""{missedCount}"" ci=""{coveredCount}""/> "); totalStatements++; if (coveredCount > 0) { statementsCovered += 1; } } } AppendLineCoverageForSourceFile(builder, statementsCovered, totalStatements); builder.AppendLine(@" </sourcefile>"); }