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[] { "" }
            };
        }
Example #5
0
        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));
        }
Example #8
0
        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);
        }
Example #9
0
        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>");
        }
Example #12
0
        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>");
        }
        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>");
        }