Exemple #1
0
        public void Export(CoverageContext coverageContext, string reportPath)
        {
            var coverageSession = ConvertTo(coverageContext);

            new CoverageStats().Consolidate(coverageSession);
            GenerateReport(coverageSession, reportPath);
        }
        public override void Handle(CoverageContext coverageContext, AssemblyDefinition assemblyDefinition)
        {
            foreach (var module in assemblyDefinition.Modules)
            {
                coverageContext.AddModule(ProcessModule(module));
            }

            base.Handle(coverageContext, assemblyDefinition);
        }
Exemple #3
0
        public void Execute_DotNet_Test_Command_Line()
        {
            var dotNetTestRunner      = new DotNetTestRunner(_rpcServerMock, _process);
            var coverageContext       = new CoverageContext();
            var testProjectOutputPath = "bin/debug";

            dotNetTestRunner.Run(coverageContext, testProjectOutputPath);

            _process.Received(1).Execute(Arg.Is("dotnet"), Arg.Is("test --no-build"), Arg.Any <string>());
        }
Exemple #4
0
        public void Add_AssemblyModules_Onto_CoverageContext()
        {
            var analyser           = new StaticCodeAnalyser();
            var coverageContext    = new CoverageContext();
            var assemblyDefinition = AssemblyDefinition.CreateAssembly(new AssemblyNameDefinition("TestAssembly.dll", new Version(1, 0)), "TestAssembly.dll", ModuleKind.Dll);

            analyser.Handle(coverageContext, assemblyDefinition);

            Assert.Equal("TestAssembly", coverageContext.Modules.First().ModuleName);
        }
Exemple #5
0
        public void Run(string testProjectOutputPath, string reportPath)
        {
            if (String.IsNullOrEmpty(reportPath))
            {
                reportPath = "coverage.xml";
            }

            var coverageContext = new CoverageContext();

            _instrumentator.ProcessAssembliesInFolder(coverageContext, testProjectOutputPath);
            _testRunner.Run(coverageContext, testProjectOutputPath);
            _coverageReport.Export(coverageContext, reportPath);
        }
Exemple #6
0
        public void Start_Rpc_Server_Before_Running_Tests()
        {
            var dotNetTestRunner      = new DotNetTestRunner(_rpcServerMock, _process);
            var testProjectOutputPath = "bin/debug";
            var coverageContext       = new CoverageContext();

            dotNetTestRunner.Run(coverageContext, testProjectOutputPath);

            Received.InOrder(() =>
            {
                _rpcServerMock.Start(Arg.Any <CoverageContext>());
                _process.Execute(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>());
            });
        }
Exemple #7
0
        private static CoverageSession ConvertTo(CoverageContext coverageContext)
        {
            var coverageSession = new CoverageSession();

            coverageSession.Modules = coverageContext.Modules.Select(x => new OpenCover.Framework.Model.Module
            {
                ModuleHash = x.ModuleHash,
                ModuleName = x.ModuleName,
                ModulePath = x.ModulePath,
                ModuleTime = x.ModuleTime,
                Files      = x.FileReferences.Select(f => new OpenCover.Framework.Model.File {
                    FullPath = f.FilePath,
                    UniqueId = Convert.ToUInt32(f.UniqueId)
                }).ToArray(),
                Classes = x.Types.Select(t => new Class
                {
                    FullName = t.FullName,
                    Methods  = t.Methods.Select(m => new OpenCover.Framework.Model.Method
                    {
                        FullName       = m.FullName,
                        IsGetter       = m.IsGetter,
                        IsConstructor  = m.IsConstructor,
                        IsSetter       = m.IsSetter,
                        IsStatic       = m.IsStatic,
                        Visited        = m.Executed,
                        SequencePoints = m.SequencePoints == null ? new SequencePoint[] { } : m.SequencePoints.Select(s => new OpenCover.Framework.Model.SequencePoint
                        {
                            EndLine     = s.EndLine,
                            Offset      = s.Offset,
                            Ordinal     = s.Ordinal,
                            StartLine   = s.StartLine,
                            StartColumn = s.StartColumn,
                            EndColumn   = s.EndColumn,
                            VisitCount  = s.ExecutionCount,
                            FileId      = Convert.ToUInt32(s.FileReference.UniqueId)
                        }).ToArray(),
                        BranchPoints = m.BranchPoints == null ? new BranchPoint [] {} : m.BranchPoints.Select(b => new OpenCover.Framework.Model.BranchPoint
                        {
                            Ordinal      = b.Ordinal,
                            Offset       = b.Offset,
                            EndOffset    = b.EndOffset,
                            OffsetPoints = b.OffsetPoints,
                            FileId       = Convert.ToUInt32(b.FileReference.UniqueId)
                        }).ToArray()
                    }).ToArray()
                }).ToArray()
            })
                                      .ToArray();
            return(coverageSession);
        }
Exemple #8
0
        public void Run(CoverageContext coverageContext, string testProjectOutputPath)
        {
            var testProjectPath = GetTestProjectPath(testProjectOutputPath);

            _rpcServer.Start(coverageContext);

            /*
             * It is important that the --no-build flag is used, otherwise dotnet-test will run a new build of the project
             * which will overwrite the assembly files that were instrumented.
             */
            _process.Execute("dotnet", "test --no-build", testProjectPath);

            _rpcServer.Stop();
        }
        public override void Handle(CoverageContext coverageContext, AssemblyDefinition assemblyDefinition)
        {
            _logger.LogInformation($"Instrumentating Assembly: {assemblyDefinition.FullName}");
            foreach (var module in assemblyDefinition.Modules)
            {
                if (!IsAssemblyInstrumented(assemblyDefinition))
                {
                    ProcessModule(module);
                    MarkAssemblyAsInstrumented(assemblyDefinition);
                }
                else
                {
                    _logger.LogInformation($"Skipping {assemblyDefinition.FullName}, assembly is already instrumented.");
                }
            }

            base.Handle(coverageContext, assemblyDefinition);
        }
Exemple #10
0
        public void Disregard_Lack_Of_Trailing_slash()
        {
            var    dotNetTestRunner = new DotNetTestRunner(_rpcServerMock, _process);
            var    coverageContext  = new CoverageContext();
            string testProjectOutputPath;
            string expectedProjectName;

            if (IsWindows)
            {
                testProjectOutputPath = @"c:\git\project\src\projectname\bin\debug\netcoreapp1.1";
                expectedProjectName   = @"c:\git\project\src\projectname";
            }
            else
            {
                testProjectOutputPath = @"/home/user/git/project/src/projectname/bin/debug/netcoreapp1.1";
                expectedProjectName   = @"/home/user/git/project/src/projectname";
            }

            dotNetTestRunner.Run(coverageContext, testProjectOutputPath);

            _process.Received(1).Execute(Arg.Any <string>(), Arg.Any <string>(), Arg.Is(expectedProjectName));
        }
Exemple #11
0
        public void ProcessAssemblies(CoverageContext coverageContext, string[] assemblyPaths)
        {
            foreach (var assemblyPath in assemblyPaths)
            {
                _logger.LogInformation($"Processing {assemblyPath}...");

                string reason;
                if (AssemblyShouldBeSkipped(assemblyPath, out reason))
                {
                    _logger.LogInformation($"Skipping {assemblyPath}: {reason}.");
                    continue;
                }

                using (var assembly = LoadAssembly(assemblyPath))
                {
                    _assemblyInstrumentationHandler.Handle(coverageContext, assembly);
                    assembly.Write(new WriterParameters {
                        WriteSymbols = true
                    });
                }
            }
        }
Exemple #12
0
 public ExecutionTrackerServer(CoverageContext coverageContext, ILogger logger = null)
 {
     _logger          = logger;
     _coverageContext = coverageContext;
 }
Exemple #13
0
 public virtual void Handle(CoverageContext coverageContext, AssemblyDefinition assemblyDefinition)
 {
     _sucessorHandler?.Handle(coverageContext, assemblyDefinition);
 }
Exemple #14
0
        public void ProcessAssembliesInFolder(CoverageContext coverageContext, string folderPath)
        {
            var assemblyPaths = Directory.GetFiles(folderPath, "*.dll");

            ProcessAssemblies(coverageContext, assemblyPaths);
        }
Exemple #15
0
 public void Start(CoverageContext coverageContext)
 {
     _logger.LogInformation($"Starting RPC server at {ServerAddress}:{ServerPort}.");
     _server.Services.Add(ExecutionTracker.BindService(new ExecutionTrackerServer(coverageContext)));
     _server.Start();
 }