Browse Source

Added support for NCover's attribute-based type exclusion (command line parameter //ea). The attributes that will be used to exclude methods or classes can be set in the code coverage project options. Excluded items will not be displayed in the code coverage pad.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1171 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 20 years ago
parent
commit
a994ab1fb1
  1. 18
      src/AddIns/Misc/CodeCoverage/Project/Resources/CodeCoverageProjectOptionsPanel.xfrm
  2. 18
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageMethod.cs
  3. 12
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageModule.cs
  4. 10
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageProjectOptionsPanel.cs
  5. 49
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageResults.cs
  6. 14
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageSequencePoint.cs
  7. 19
      src/AddIns/Misc/CodeCoverage/Project/Src/NCoverRunner.cs
  8. 18
      src/AddIns/Misc/CodeCoverage/Project/Src/NCoverSettings.cs
  9. 29
      src/AddIns/Misc/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs
  10. 4
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj
  11. 53
      src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodResultsTestFixture.cs
  12. 31
      src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodTestFixture.cs
  13. 45
      src/AddIns/Misc/CodeCoverage/Test/ExcludedModuleResultsTestFixture.cs
  14. 33
      src/AddIns/Misc/CodeCoverage/Test/ExcludedModuleTestFixture.cs
  15. 7
      src/AddIns/Misc/CodeCoverage/Test/NCoverSettingsTestFixture.cs

18
src/AddIns/Misc/CodeCoverage/Project/Resources/CodeCoverageProjectOptionsPanel.xfrm

@ -3,6 +3,21 @@ @@ -3,6 +3,21 @@
<Name value="CodeCoverageProjectOptionsPanel" />
<ClientSize value="{Width=342, Height=266}" />
<Controls>
<System.Windows.Forms.TextBox>
<Name value="excludedAttributesTextBox" />
<TabIndex value="3" />
<Size value="{Width=317, Height=21}" />
<Location value="{X=12,Y=92}" />
<Anchor value="Top, Left, Right" />
</System.Windows.Forms.TextBox>
<System.Windows.Forms.Label>
<Name value="excludedAttributesListLabel" />
<Location value="{X=12,Y=69}" />
<Text value="Excluded Attributes:" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=317, Height=20}" />
<TabIndex value="2" />
</System.Windows.Forms.Label>
<System.Windows.Forms.TextBox>
<Name value="assemblyListTextBox" />
<TabIndex value="1" />
@ -15,7 +30,8 @@ @@ -15,7 +30,8 @@
<Location value="{X=12,Y=12}" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.ProjectOptionsPanel.AssemblyListLabel}" />
<Size value="{Width=114, Height=21}" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=317, Height=21}" />
<TabIndex value="0" />
</System.Windows.Forms.Label>
</Controls>

18
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageMethod.cs

@ -33,6 +33,24 @@ namespace ICSharpCode.CodeCoverage @@ -33,6 +33,24 @@ namespace ICSharpCode.CodeCoverage
}
}
/// <summary>
/// Determines whether this method has been excluded.
/// </summary>
/// <remarks>
/// A method is considered excluded if all of its
/// sequence points have been marked as excluded.
/// </remarks>
public bool IsExcluded {
get {
foreach (CodeCoverageSequencePoint sequencePoint in sequencePoints) {
if (!sequencePoint.IsExcluded) {
return false;
}
}
return true;
}
}
public string Name {
get {
return name;

12
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageModule.cs

@ -21,6 +21,18 @@ namespace ICSharpCode.CodeCoverage @@ -21,6 +21,18 @@ namespace ICSharpCode.CodeCoverage
this.name = name;
}
public bool IsExcluded {
get {
int excludedMethods = 0;
foreach (CodeCoverageMethod method in methods) {
if (method.IsExcluded) {
++excludedMethods;
}
}
return excludedMethods == methods.Count;
}
}
/// <summary>
/// The module's assembly name.
/// </summary>

10
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageProjectOptionsPanel.cs

@ -19,8 +19,10 @@ namespace ICSharpCode.CodeCoverage @@ -19,8 +19,10 @@ namespace ICSharpCode.CodeCoverage
public class CodeCoverageProjectOptionsPanel : AbstractProjectOptionPanel
{
static readonly string AssemblyListTextBoxName = "assemblyListTextBox";
static readonly string ExcludedAttributesListTextBoxName = "excludedAttributesTextBox";
TextBox assemblyListTextBox;
TextBox excludedAttributesListTextBox;
public CodeCoverageProjectOptionsPanel()
{
@ -32,10 +34,12 @@ namespace ICSharpCode.CodeCoverage @@ -32,10 +34,12 @@ namespace ICSharpCode.CodeCoverage
InitializeHelper();
assemblyListTextBox = (TextBox)ControlDictionary[AssemblyListTextBoxName];
excludedAttributesListTextBox = (TextBox)ControlDictionary[ExcludedAttributesListTextBoxName];
ReadNCoverSettings();
assemblyListTextBox.TextChanged += AssemblyListTextBoxTextChanged;
assemblyListTextBox.TextChanged += TextBoxTextChanged;
excludedAttributesListTextBox.TextChanged += TextBoxTextChanged;
}
public override bool StorePanelContents()
@ -45,7 +49,7 @@ namespace ICSharpCode.CodeCoverage @@ -45,7 +49,7 @@ namespace ICSharpCode.CodeCoverage
return true;
}
void AssemblyListTextBoxTextChanged(object sender, EventArgs e)
void TextBoxTextChanged(object sender, EventArgs e)
{
IsDirty = true;
}
@ -54,6 +58,7 @@ namespace ICSharpCode.CodeCoverage @@ -54,6 +58,7 @@ namespace ICSharpCode.CodeCoverage
{
NCoverSettings settings = new NCoverSettings();
settings.AssemblyList = assemblyListTextBox.Text;
settings.ExcludedAttributesList = excludedAttributesListTextBox.Text;
settings.Save(NCoverSettings.GetFileName(project));
}
@ -63,6 +68,7 @@ namespace ICSharpCode.CodeCoverage @@ -63,6 +68,7 @@ namespace ICSharpCode.CodeCoverage
if (File.Exists(settingsFileName)) {
NCoverSettings settings = new NCoverSettings(settingsFileName);
assemblyListTextBox.Text = settings.AssemblyList;
excludedAttributesListTextBox.Text = settings.ExcludedAttributesList;
}
}
}

49
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageResults.cs

@ -63,6 +63,9 @@ namespace ICSharpCode.CodeCoverage @@ -63,6 +63,9 @@ namespace ICSharpCode.CodeCoverage
}
}
reader.Close();
RemoveExcludedModules();
RemoveExcludedMethods();
}
CodeCoverageModule AddModule(XmlReader reader)
@ -86,7 +89,8 @@ namespace ICSharpCode.CodeCoverage @@ -86,7 +89,8 @@ namespace ICSharpCode.CodeCoverage
GetInteger(reader.GetAttribute("line")),
GetInteger(reader.GetAttribute("column")),
GetInteger(reader.GetAttribute("endline")),
GetInteger(reader.GetAttribute("endcolumn")));
GetInteger(reader.GetAttribute("endcolumn")),
IsExcluded(reader));
method.SequencePoints.Add(sequencePoint);
}
@ -98,5 +102,48 @@ namespace ICSharpCode.CodeCoverage @@ -98,5 +102,48 @@ namespace ICSharpCode.CodeCoverage
}
return 0;
}
void RemoveExcludedModules()
{
List<CodeCoverageModule> excludedModules = new List<CodeCoverageModule>();
foreach (CodeCoverageModule module in modules) {
if (module.IsExcluded) {
excludedModules.Add(module);
}
}
foreach (CodeCoverageModule excludedModule in excludedModules) {
modules.Remove(excludedModule);
}
}
void RemoveExcludedMethods()
{
List<CodeCoverageMethod> excludedMethods = new List<CodeCoverageMethod>();
foreach (CodeCoverageModule module in modules) {
foreach (CodeCoverageMethod method in module.Methods) {
if (method.IsExcluded) {
excludedMethods.Add(method);
}
}
foreach (CodeCoverageMethod excludedMethod in excludedMethods) {
module.Methods.Remove(excludedMethod);
}
}
}
bool IsExcluded(XmlReader reader)
{
string excludedValue = reader.GetAttribute("excluded");
if (excludedValue != null) {
bool excluded;
if (Boolean.TryParse(excludedValue, out excluded)) {
return excluded;
}
}
return false;
}
}
}

14
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageSequencePoint.cs

@ -17,8 +17,13 @@ namespace ICSharpCode.CodeCoverage @@ -17,8 +17,13 @@ namespace ICSharpCode.CodeCoverage
int column = 0;
int endLine = 0;
int endColumn = 0;
bool excluded = false;
public CodeCoverageSequencePoint(string document, int visitCount, int line, int column, int endLine, int endColumn)
public CodeCoverageSequencePoint(string document, int visitCount, int line, int column, int endLine, int endColumn) : this(document, visitCount, line, column, endLine, endColumn, false)
{
}
public CodeCoverageSequencePoint(string document, int visitCount, int line, int column, int endLine, int endColumn, bool excluded)
{
this.document = document;
this.visitCount = visitCount;
@ -26,6 +31,13 @@ namespace ICSharpCode.CodeCoverage @@ -26,6 +31,13 @@ namespace ICSharpCode.CodeCoverage
this.column = column;
this.endLine = endLine;
this.endColumn = endColumn;
this.excluded = excluded;
}
public bool IsExcluded {
get {
return excluded;
}
}
public string Document {

19
src/AddIns/Misc/CodeCoverage/Project/Src/NCoverRunner.cs

@ -24,6 +24,7 @@ namespace ICSharpCode.CodeCoverage @@ -24,6 +24,7 @@ namespace ICSharpCode.CodeCoverage
string profiledApplicationCommandLineArguments = String.Empty;
string assemblyList = String.Empty;
string logFileName = String.Empty;
string excludedAttributesList = String.Empty;
ProcessRunner runner;
/// <summary>
@ -86,6 +87,20 @@ namespace ICSharpCode.CodeCoverage @@ -86,6 +87,20 @@ namespace ICSharpCode.CodeCoverage
}
}
/// <summary>
/// The list of attributes to ignore when profiling.
/// </summary>
public string ExcludedAttributesList {
get {
return excludedAttributesList;
}
set {
// Remove any spaces from the assembly list since
// NCover will ignore any items after the space.
excludedAttributesList = value.Replace(" ", String.Empty);
}
}
/// <summary>
/// Gets the full NCover command line that will be used by
/// the runner.
@ -243,6 +258,10 @@ namespace ICSharpCode.CodeCoverage @@ -243,6 +258,10 @@ namespace ICSharpCode.CodeCoverage
ncoverArguments.AppendFormat("//a \"{0}\" ", assemblyList);
}
if (excludedAttributesList.Length > 0) {
ncoverArguments.AppendFormat("//ea \"{0}\" ", excludedAttributesList);
}
if (logFileName.Length > 0) {
ncoverArguments.AppendFormat("//l \"{0}\" ", logFileName);
}

18
src/AddIns/Misc/CodeCoverage/Project/Src/NCoverSettings.cs

@ -20,8 +20,10 @@ namespace ICSharpCode.CodeCoverage @@ -20,8 +20,10 @@ namespace ICSharpCode.CodeCoverage
{
static readonly string RootElementName = "ProfilerSettings";
static readonly string AssembliesElementName = "Assemblies";
static readonly string ExclusionAttributesElementName = "ExclusionAttributes";
string assemblyList = String.Empty;
string excludedAttributesList = String.Empty;
public NCoverSettings()
{
@ -60,6 +62,19 @@ namespace ICSharpCode.CodeCoverage @@ -60,6 +62,19 @@ namespace ICSharpCode.CodeCoverage
}
}
/// <summary>
/// A semi-colon delimited list of attributes to exclude in the code coverage
/// report.
/// </summary>
public string ExcludedAttributesList {
get {
return excludedAttributesList;
}
set {
excludedAttributesList = value;
}
}
public void Save(TextWriter writer)
{
Save(new XmlTextWriter(writer));
@ -77,6 +92,7 @@ namespace ICSharpCode.CodeCoverage @@ -77,6 +92,7 @@ namespace ICSharpCode.CodeCoverage
using (writer) {
writer.WriteStartElement(RootElementName);
writer.WriteElementString(AssembliesElementName, assemblyList);
writer.WriteElementString(ExclusionAttributesElementName, excludedAttributesList);
writer.WriteEndElement();
}
}
@ -88,6 +104,8 @@ namespace ICSharpCode.CodeCoverage @@ -88,6 +104,8 @@ namespace ICSharpCode.CodeCoverage
if (reader.NodeType == XmlNodeType.Element) {
if (reader.Name == AssembliesElementName) {
assemblyList = reader.ReadString();
} else if (reader.Name == ExclusionAttributesElementName) {
excludedAttributesList = reader.ReadString();
}
}
}

29
src/AddIns/Misc/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs

@ -95,6 +95,7 @@ namespace ICSharpCode.CodeCoverage @@ -95,6 +95,7 @@ namespace ICSharpCode.CodeCoverage
void SetNCoverRunnerProperties(string ncoverFileName, IProject project, IClass fixture, IMember test)
{
string ncoverOutputDirectory = GetNCoverOutputDirectory(project);
NCoverSettings settings = GetNCoverSettings(project);
UnitTestApplicationStartHelper helper = new UnitTestApplicationStartHelper();
helper.Initialize(project, fixture, test);
@ -106,7 +107,8 @@ namespace ICSharpCode.CodeCoverage @@ -106,7 +107,8 @@ namespace ICSharpCode.CodeCoverage
runner.WorkingDirectory = Path.GetDirectoryName(helper.Assemblies[0]);
runner.CoverageResultsFileName = Path.Combine(ncoverOutputDirectory, "Coverage.Xml");
runner.LogFileName = Path.Combine(ncoverOutputDirectory, "Coverage.log");
runner.AssemblyList = GetAssemblyList(project);
runner.AssemblyList = settings.AssemblyList;
runner.ExcludedAttributesList = settings.ExcludedAttributesList;
}
void RunNCover()
@ -206,27 +208,18 @@ namespace ICSharpCode.CodeCoverage @@ -206,27 +208,18 @@ namespace ICSharpCode.CodeCoverage
}
}
/// <summary>
/// Reads the list of assemblies to be profiled from the project's
/// NCover settings.
/// </summary>
string GetAssemblyList(IProject project)
string GetNCoverOutputDirectory(IProject project)
{
if (project == null) {
return String.Empty;
}
string ncoverSettingsFileName = NCoverSettings.GetFileName(project);
if (File.Exists(ncoverSettingsFileName)) {
NCoverSettings settings = new NCoverSettings(ncoverSettingsFileName);
return settings.AssemblyList;
}
return String.Empty;
return Path.Combine(project.Directory, "NCover");
}
string GetNCoverOutputDirectory(IProject project)
NCoverSettings GetNCoverSettings(IProject project)
{
return Path.Combine(project.Directory, "NCover");
string fileName = NCoverSettings.GetFileName(project);
if (File.Exists(fileName)) {
return new NCoverSettings(fileName);
}
return new NCoverSettings();
}
}
}

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

@ -70,6 +70,10 @@ @@ -70,6 +70,10 @@
<Compile Include="NUnitResultsTestFixture.cs" />
<Compile Include="CodeCoverageNamespaceTestFixture.cs" />
<Compile Include="ClassWithNoNamespaceInTreeViewTestFixture.cs" />
<Compile Include="ExcludedModuleResultsTestFixture.cs" />
<Compile Include="ExcludedMethodTestFixture.cs" />
<Compile Include="ExcludedModuleTestFixture.cs" />
<Compile Include="ExcludedMethodResultsTestFixture.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">

53
src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodResultsTestFixture.cs

@ -0,0 +1,53 @@ @@ -0,0 +1,53 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
using System.IO;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests that results with the excluded attribute set are not included
/// in the code coverage results.
/// </summary>
[TestFixture]
public class ExcludedMethodResultsTestFixture
{
CodeCoverageResults results;
CodeCoverageModule module;
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"ExcludedTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"20\" column=\"3\" endline=\"20\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"21\" column=\"13\" endline=\"21\" excluded=\"true\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t</method>\r\n" +
"\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"20\" column=\"3\" endline=\"20\" excluded=\"false\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"21\" column=\"13\" endline=\"21\" excluded=\"false\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" excluded=\"false\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
results = new CodeCoverageResults(new StringReader(xml));
module = results.Modules[0];
}
[Test]
public void OneMethod()
{
Assert.AreEqual(1, module.Methods.Count);
}
}
}

31
src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodTestFixture.cs

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Ensures that a code coverage method that has no included sequence
/// points is flagged as excluded.
/// </summary>
[TestFixture]
public class ExcludedMethodTestFixture
{
[Test]
public void IsExcluded()
{
CodeCoverageMethod method = new CodeCoverageMethod("Test1", "MyTestFixture");
CodeCoverageSequencePoint pt = new CodeCoverageSequencePoint(@"c:\test\MyTestFixture.cs", 0, 10, 0, 10, 20, true);
method.SequencePoints.Add(pt);
Assert.IsTrue(method.IsExcluded, "Method should be excluded.");
}
}
}

45
src/AddIns/Misc/CodeCoverage/Test/ExcludedModuleResultsTestFixture.cs

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
using System.IO;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests that results with the excluded attribute set are not included
/// in the code coverage results.
/// </summary>
[TestFixture]
public class ExcludedModuleResultsTestFixture
{
CodeCoverageResults results;
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"20\" column=\"3\" endline=\"20\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"21\" column=\"13\" endline=\"21\" excluded=\"true\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
results = new CodeCoverageResults(new StringReader(xml));
}
[Test]
public void NoModules()
{
Assert.AreEqual(0, results.Modules.Count, "All modules should be excluded");
}
}
}

33
src/AddIns/Misc/CodeCoverage/Test/ExcludedModuleTestFixture.cs

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Ensures that a code coverage module that has no included methods
/// points is flagged as excluded.
/// </summary>
[TestFixture]
public class ExcludedModuleTestFixture
{
[Test]
public void IsExcluded()
{
CodeCoverageModule module = new CodeCoverageModule("test");
CodeCoverageMethod method = new CodeCoverageMethod("Test1", "MyTestFixture");
CodeCoverageSequencePoint pt = new CodeCoverageSequencePoint(@"c:\test\MyTestFixture.cs", 0, 10, 0, 10, 20, true);
method.SequencePoints.Add(pt);
module.Methods.Add(method);
Assert.IsTrue(module.IsExcluded, "Module should be excluded.");
}
}
}

7
src/AddIns/Misc/CodeCoverage/Test/NCoverSettingsTestFixture.cs

@ -26,6 +26,7 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -26,6 +26,7 @@ namespace ICSharpCode.CodeCoverage.Tests
{
settings = new NCoverSettings();
settings.AssemblyList = "MyNamespace.Foo; MyNamespace.Bar";
settings.ExcludedAttributesList = "NUnit.Framework.TestFixtureAttribute; NUnit.Framework.TestAttribute";
StringBuilder savedSettingsXml = new StringBuilder();
settings.Save(new StringWriter(savedSettingsXml));
savedSettings = new NCoverSettings(new StringReader(savedSettingsXml.ToString()));
@ -37,6 +38,12 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -37,6 +38,12 @@ namespace ICSharpCode.CodeCoverage.Tests
Assert.AreEqual(settings.AssemblyList, savedSettings.AssemblyList);
}
[Test]
public void IsExcludedAttributeListListSaved()
{
Assert.AreEqual(settings.ExcludedAttributesList, savedSettings.ExcludedAttributesList);
}
[Test]
public void NCoverSettingsFileName()
{

Loading…
Cancel
Save