Browse Source

Display code coverage results when solution opened.

On opening a solution previous code coverage results files are located and displayed in the code coverage pad.
pull/28/head
Matt Ward 13 years ago
parent
commit
9facfbe8bf
  1. 2
      src/AddIns/Analysis/CodeCoverage/Project/CodeCoverage.csproj
  2. 10
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageService.cs
  3. 2
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageTestRunner.cs
  4. 13
      src/AddIns/Analysis/CodeCoverage/Project/Src/OpenCoverApplication.cs
  5. 30
      src/AddIns/Analysis/CodeCoverage/Project/Src/ProjectCodeCoverageResultsFileName.cs
  6. 48
      src/AddIns/Analysis/CodeCoverage/Project/Src/SolutionCodeCoverageResults.cs
  7. 4
      src/AddIns/Analysis/CodeCoverage/Test/CodeCoverage.Tests.csproj
  8. 89
      src/AddIns/Analysis/CodeCoverage/Test/Coverage/SolutionCodeCoverageResultsTests.cs

2
src/AddIns/Analysis/CodeCoverage/Project/CodeCoverage.csproj

@ -91,8 +91,10 @@ @@ -91,8 +91,10 @@
<Compile Include="Src\OpenCoverApplication.cs" />
<Compile Include="Src\OpenCoverSettings.cs" />
<Compile Include="Src\OpenCoverSettingsFactory.cs" />
<Compile Include="Src\ProjectCodeCoverageResultsFileName.cs" />
<Compile Include="Src\RunAllTestsWithCodeCoverageCommand.cs" />
<Compile Include="Src\SequencePointListViewSorter.cs" />
<Compile Include="Src\SolutionCodeCoverageResults.cs" />
<Compile Include="Src\ToggleCodeCoverageCommand.cs" />
<Compile Include="Src\CodeCoverageHighlighter.cs" />
<Compile Include="Src\CodeCoverageOptions.cs" />

10
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageService.cs

@ -5,6 +5,7 @@ using ICSharpCode.SharpDevelop.Editor; @@ -5,6 +5,7 @@ using ICSharpCode.SharpDevelop.Editor;
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.CodeCoverage
{
@ -20,6 +21,7 @@ namespace ICSharpCode.CodeCoverage @@ -20,6 +21,7 @@ namespace ICSharpCode.CodeCoverage
static CodeCoverageService()
{
WorkbenchSingleton.Workbench.ViewOpened += ViewOpened;
ProjectService.SolutionLoaded += SolutionLoaded;
}
/// <summary>
@ -143,5 +145,13 @@ namespace ICSharpCode.CodeCoverage @@ -143,5 +145,13 @@ namespace ICSharpCode.CodeCoverage
return results.Count > 0;
}
}
static void SolutionLoaded(object sender, SolutionEventArgs e)
{
var solutionCodeCoverageResults = new SolutionCodeCoverageResults(e.Solution);
foreach (CodeCoverageResults results in solutionCodeCoverageResults.GetCodeCoverageResultsForAllProjects()) {
ShowResults(results);
}
}
}
}

2
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageTestRunner.cs

@ -35,7 +35,7 @@ namespace ICSharpCode.CodeCoverage @@ -35,7 +35,7 @@ namespace ICSharpCode.CodeCoverage
return fileSystem.FileExists(CodeCoverageResultsFileName);
}
public CodeCoverageResults ReadCodeCoverageResults()
public CodeCoverageResults ReadCodeCoverageResults()
{
TextReader reader = fileSystem.CreateTextReader(CodeCoverageResultsFileName);
return new CodeCoverageResults(reader);

13
src/AddIns/Analysis/CodeCoverage/Project/Src/OpenCoverApplication.cs

@ -65,18 +65,7 @@ namespace ICSharpCode.CodeCoverage @@ -65,18 +65,7 @@ namespace ICSharpCode.CodeCoverage
}
public string CodeCoverageResultsFileName {
get { return GetCodeCoverageResultsFileName(); }
}
string GetCodeCoverageResultsFileName()
{
string outputDirectory = GetOutputDirectory(nunitConsoleApp.Project);
return Path.Combine(outputDirectory, "coverage.xml");
}
string GetOutputDirectory(IProject project)
{
return Path.Combine(project.Directory, "OpenCover");
get { return new ProjectCodeCoverageResultsFileName(nunitConsoleApp.Project).FileName; }
}
public ProcessStartInfo GetProcessStartInfo()

30
src/AddIns/Analysis/CodeCoverage/Project/Src/ProjectCodeCoverageResultsFileName.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.CodeCoverage
{
public class ProjectCodeCoverageResultsFileName
{
public ProjectCodeCoverageResultsFileName(IProject project)
{
FileName = GetCodeCoverageResultsFileName(project);
}
public string FileName { get; private set; }
string GetCodeCoverageResultsFileName(IProject project)
{
string outputDirectory = GetOutputDirectory(project);
return Path.Combine(outputDirectory, "coverage.xml");
}
string GetOutputDirectory(IProject project)
{
return Path.Combine(project.Directory, "OpenCover");
}
}
}

48
src/AddIns/Analysis/CodeCoverage/Project/Src/SolutionCodeCoverageResults.cs

@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.CodeCoverage
{
public class SolutionCodeCoverageResults
{
Solution solution;
IFileSystem fileSystem;
public SolutionCodeCoverageResults(Solution solution)
: this(solution, new FileSystem())
{
}
public SolutionCodeCoverageResults(Solution solution, IFileSystem fileSystem)
{
this.solution = solution;
this.fileSystem = fileSystem;
}
public IEnumerable<CodeCoverageResults> GetCodeCoverageResultsForAllProjects()
{
foreach (IProject project in solution.Projects) {
CodeCoverageResults results = GetCodeCoverageResultsForProject(project);
if (results != null) {
yield return results;
}
}
}
CodeCoverageResults GetCodeCoverageResultsForProject(IProject project)
{
var fileName = new ProjectCodeCoverageResultsFileName(project);
if (fileSystem.FileExists(fileName.FileName)) {
TextReader reader = fileSystem.CreateTextReader(fileName.FileName);
return new CodeCoverageResults(reader);
}
return null;
}
}
}

4
src/AddIns/Analysis/CodeCoverage/Test/CodeCoverage.Tests.csproj

@ -38,6 +38,9 @@ @@ -38,6 +38,9 @@
<Reference Include="PresentationCore">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="Rhino.Mocks">
<HintPath>..\..\..\..\Libraries\RhinoMocks\Rhino.Mocks.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Xml" />
<Reference Include="System.Windows.Forms" />
@ -75,6 +78,7 @@ @@ -75,6 +78,7 @@
<Compile Include="Coverage\RemoveTaskMarkerTests.cs" />
<Compile Include="Coverage\SequencePointTests.cs" />
<Compile Include="Coverage\SimilarRootNamespaceTestFixture.cs" />
<Compile Include="Coverage\SolutionCodeCoverageResultsTests.cs" />
<Compile Include="Gui\DisplayItemTestFixture.cs" />
<Compile Include="Gui\PropertiesInCodeCoverageTreeView.cs" />
<Compile Include="Gui\TreeViewSortingTestFixture.cs" />

89
src/AddIns/Analysis/CodeCoverage/Test/Coverage/SolutionCodeCoverageResultsTests.cs

@ -0,0 +1,89 @@ @@ -0,0 +1,89 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ICSharpCode.CodeCoverage.Tests.Utils;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using Rhino.Mocks;
using UnitTesting.Tests.Utils;
namespace ICSharpCode.CodeCoverage.Tests.Coverage
{
[TestFixture]
public class SolutionCodeCoverageResultsTests
{
SolutionCodeCoverageResults solutionCodeCoverageResults;
Solution solution;
IFileSystem fakeFileSystem;
void CreateSolutionCodeCoverageResults()
{
solution = new Solution(new MockProjectChangeWatcher());
fakeFileSystem = MockRepository.GenerateStub<IFileSystem>();
solutionCodeCoverageResults = new SolutionCodeCoverageResults(solution, fakeFileSystem);
}
IEnumerable<CodeCoverageResults> GetCodeCoverageResultsForAllProjects()
{
return solutionCodeCoverageResults.GetCodeCoverageResultsForAllProjects();
}
void AddProject(string fileName)
{
var project = new MockCSharpProject(solution, Path.GetFileNameWithoutExtension(fileName));
project.FileName = fileName;
solution.Folders.Add(project);
}
void AddCodeCoverageFile(string fileName)
{
string coverageXml = "<CodeCoverage></CodeCoverage>";
AddCodeCoverageFile(fileName, coverageXml);
}
void AddCodeCoverageFile(string fileName, string coverageXml)
{
var stringReader = new StringReader(coverageXml);
fakeFileSystem.Stub(fs => fs.FileExists(fileName)).Return(true);
fakeFileSystem.Stub(fs => fs.CreateTextReader(fileName)).Return(stringReader);
}
[Test]
public void GetCodeCoverageResultsForAllProjects_NoProjects_ReturnsNoResults()
{
CreateSolutionCodeCoverageResults();
List<CodeCoverageResults> results = GetCodeCoverageResultsForAllProjects().ToList();
Assert.AreEqual(0, results.Count);
}
[Test]
public void GetCodeCoverageResultsForAllProjects_OneProject_ReturnsOneCodeCoverageResult()
{
CreateSolutionCodeCoverageResults();
AddProject(@"d:\Projects\MyProject\MyProject.csproj");
AddCodeCoverageFile(@"d:\Projects\MyProject\OpenCover\coverage.xml");
List<CodeCoverageResults> results = GetCodeCoverageResultsForAllProjects().ToList();
Assert.AreEqual(1, results.Count);
}
[Test]
public void GetCodeCoverageResultsForAllProjects_OneProjectInSolutionWithoutCodeCoverageResultsFile_ReturnsNoResults()
{
CreateSolutionCodeCoverageResults();
AddProject(@"d:\Projects\MyProject\MyProject.csproj");
List<CodeCoverageResults> results = GetCodeCoverageResultsForAllProjects().ToList();
Assert.AreEqual(0, results.Count);
}
}
}
Loading…
Cancel
Save