Browse Source

Fix code coverage tree property tests.

Property getter and setter methods were not being correctly identified as properties due to the code coverage method signature being used as the method name.
pull/17/merge
Matt Ward 13 years ago
parent
commit
48b51e1276
  1. 13
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageProperty.cs
  2. 2
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoveragePropertyCollection.cs
  3. 1
      src/AddIns/Analysis/CodeCoverage/Test/CodeCoverage.Tests.csproj
  4. 19
      src/AddIns/Analysis/CodeCoverage/Test/Coverage/CodeCoveragePropertyCollectionWithGetterAndSetterTestFixture.cs
  5. 20
      src/AddIns/Analysis/CodeCoverage/Test/Coverage/CodeCoveragePropertyTestFixture.cs
  6. 33
      src/AddIns/Analysis/CodeCoverage/Test/Gui/PropertiesInCodeCoverageTreeView.cs
  7. 63
      src/AddIns/Analysis/CodeCoverage/Test/Utils/CodeCoverageMethodXElementBuilder.cs

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

@ -67,19 +67,26 @@ namespace ICSharpCode.CodeCoverage
public static string GetPropertyName(CodeCoverageMethod method) public static string GetPropertyName(CodeCoverageMethod method)
{ {
if (IsGetter(method) || IsSetter(method)) { if (IsGetter(method) || IsSetter(method)) {
return method.Name.Substring(4); return GetMethodName(method).Substring(6);
} }
return String.Empty; return String.Empty;
} }
static string GetMethodName(CodeCoverageMethod method)
{
int startIndex = method.Name.IndexOf("::");
int endIndex = method.Name.IndexOf('(', startIndex);
return method.Name.Substring(startIndex, endIndex - startIndex);
}
public static bool IsGetter(CodeCoverageMethod method) public static bool IsGetter(CodeCoverageMethod method)
{ {
return method.Name.StartsWith("get_"); return method.Name.Contains("::get_");
} }
public static bool IsSetter(CodeCoverageMethod method) public static bool IsSetter(CodeCoverageMethod method)
{ {
return method.Name.StartsWith("set_"); return method.Name.Contains("::set_");
} }
} }
} }

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

@ -32,7 +32,7 @@ namespace ICSharpCode.CodeCoverage
foreach (CodeCoverageProperty property in properties) { foreach (CodeCoverageProperty property in properties) {
if (propertyName == property.Name) { if (propertyName == property.Name) {
property.AddMethod(method); property.AddMethod(method);
added = true; added = true;
} }
} }

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

@ -93,6 +93,7 @@
<Compile Include="Testing\CodeCoverageTestRunnerTests.cs" /> <Compile Include="Testing\CodeCoverageTestRunnerTests.cs" />
<Compile Include="Testing\OpenCoverApplicationTests.cs" /> <Compile Include="Testing\OpenCoverApplicationTests.cs" />
<Compile Include="Testing\RunTestWithCodeCoverageCommandTests.cs" /> <Compile Include="Testing\RunTestWithCodeCoverageCommandTests.cs" />
<Compile Include="Utils\CodeCoverageMethodXElementBuilder.cs" />
<Compile Include="Utils\DerivedCodeCoverageTestRunner.cs" /> <Compile Include="Utils\DerivedCodeCoverageTestRunner.cs" />
<Compile Include="Utils\DerivedRunTestWithCodeCoverageCommand.cs" /> <Compile Include="Utils\DerivedRunTestWithCodeCoverageCommand.cs" />
<Compile Include="Gui\ClassWithNoNamespaceInTreeViewTestFixture.cs" /> <Compile Include="Gui\ClassWithNoNamespaceInTreeViewTestFixture.cs" />

19
src/AddIns/Analysis/CodeCoverage/Test/Coverage/CodeCoveragePropertyCollectionWithGetterAndSetterTestFixture.cs

@ -3,7 +3,10 @@
using System; using System;
using System.Reflection; using System.Reflection;
using System.Xml.Linq;
using ICSharpCode.CodeCoverage; using ICSharpCode.CodeCoverage;
using ICSharpCode.CodeCoverage.Tests.Utils;
using NUnit.Framework; using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests.Coverage namespace ICSharpCode.CodeCoverage.Tests.Coverage
@ -20,12 +23,24 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage
CodeCoverageMethod setterMethod; CodeCoverageMethod setterMethod;
CodeCoverageProperty property; CodeCoverageProperty property;
XElement CreateSetterMethod(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateSetterMethod(methodSignature);
}
XElement CreateGetterMethod(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateGetterMethod(methodSignature);
}
[TestFixtureSetUp] [TestFixtureSetUp]
public void SetUpFixture() public void SetUpFixture()
{ {
properties = new CodeCoveragePropertyCollection(); properties = new CodeCoveragePropertyCollection();
getterMethod = new CodeCoverageMethod("get_Count", "MyTests", MethodAttributes.SpecialName); XElement getterElement = CreateGetterMethod("System.Int32 MyTests::get_Count()");
setterMethod = new CodeCoverageMethod("set_Count", "MyTests", MethodAttributes.SpecialName); getterMethod = new CodeCoverageMethod("MyTests", getterElement);
XElement setterElement = CreateSetterMethod("System.Void MyTests::set_Count(System.Int32)");
setterMethod = new CodeCoverageMethod("MyTests", setterElement);
properties.Add(getterMethod); properties.Add(getterMethod);
properties.Add(setterMethod); properties.Add(setterMethod);

20
src/AddIns/Analysis/CodeCoverage/Test/Coverage/CodeCoveragePropertyTestFixture.cs

@ -4,7 +4,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using System.Xml.Linq;
using ICSharpCode.CodeCoverage; using ICSharpCode.CodeCoverage;
using ICSharpCode.CodeCoverage.Tests.Utils;
using NUnit.Framework; using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests.Coverage namespace ICSharpCode.CodeCoverage.Tests.Coverage
@ -18,8 +20,20 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage
[SetUp] [SetUp]
public void Init() public void Init()
{ {
getter = new CodeCoverageMethod("get_Count", "MyTest", MethodAttributes.SpecialName); XElement getterElement = CreateGetterElement("System.Int32 MyTest::get_Count()");
setter = new CodeCoverageMethod("set_Count", "MyTest", MethodAttributes.SpecialName); getter = new CodeCoverageMethod("MyTest", getterElement);
XElement setterElement = CreateSetterElement("System.Void MyTest::set_Count(System.Int32)");
setter = new CodeCoverageMethod("MyTest", setterElement);
}
XElement CreateGetterElement(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateGetterMethod(methodSignature);
}
XElement CreateSetterElement(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateSetterMethod(methodSignature);
} }
[Test] [Test]
@ -94,6 +108,6 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage
expectedMethods.Add(getter); expectedMethods.Add(getter);
expectedMethods.Add(setter); expectedMethods.Add(setter);
Assert.AreEqual(expectedMethods, property.GetMethods()); Assert.AreEqual(expectedMethods, property.GetMethods());
} }
} }
} }

33
src/AddIns/Analysis/CodeCoverage/Test/Gui/PropertiesInCodeCoverageTreeView.cs

@ -1,13 +1,16 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // 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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using System.Windows.Forms; using System.Windows.Forms;
using System.Xml.Linq;
using ICSharpCode.CodeCoverage;
using ICSharpCode.CodeCoverage.Tests.Utils;
using ICSharpCode.SharpDevelop.Gui;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests.Gui namespace ICSharpCode.CodeCoverage.Tests.Gui
{ {
@ -27,16 +30,29 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
CodeCoverageMethod fooGetterMethod; CodeCoverageMethod fooGetterMethod;
CodeCoverageMethod fooSetterMethod; CodeCoverageMethod fooSetterMethod;
XElement CreateSetterMethod(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateSetterMethod(methodSignature);
}
XElement CreateGetterMethod(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateGetterMethod(methodSignature);
}
[TestFixtureSetUp] [TestFixtureSetUp]
public void SetUpFixture() public void SetUpFixture()
{ {
List<CodeCoverageModule> modules = new List<CodeCoverageModule>(); List<CodeCoverageModule> modules = new List<CodeCoverageModule>();
CodeCoverageModule fooModule = new CodeCoverageModule("Tests"); CodeCoverageModule fooModule = new CodeCoverageModule("Tests");
fooSetterMethod = new CodeCoverageMethod("set_Count", "Tests.FooTest", MethodAttributes.SpecialName);
XElement setterMethod = CreateSetterMethod("System.Void Tests.FooTest::set_Count(System.Int32)");
fooSetterMethod = new CodeCoverageMethod("Tests.FooTest", setterMethod);
fooSetterMethod.SequencePoints.Add(new CodeCoverageSequencePoint("c:\\Projects\\Foo\\FooTest.cs", 1, 2, 2, 3, 4, 2)); fooSetterMethod.SequencePoints.Add(new CodeCoverageSequencePoint("c:\\Projects\\Foo\\FooTest.cs", 1, 2, 2, 3, 4, 2));
fooSetterMethod.SequencePoints.Add(new CodeCoverageSequencePoint("c:\\Projects\\Foo\\FooTest.cs", 0, 3, 4, 4, 4, 1)); fooSetterMethod.SequencePoints.Add(new CodeCoverageSequencePoint("c:\\Projects\\Foo\\FooTest.cs", 0, 3, 4, 4, 4, 1));
fooGetterMethod = new CodeCoverageMethod("get_Count", "Tests.FooTest", MethodAttributes.SpecialName);
XElement getterMethod = CreateGetterMethod("System.Int32 Tests.FooTest::get_Count()");
fooGetterMethod = new CodeCoverageMethod("Tests.FooTest", getterMethod);
fooGetterMethod.SequencePoints.Add(new CodeCoverageSequencePoint("c:\\Projects\\Foo\\FooTest.cs", 1, 1, 0, 2, 1, 1)); fooGetterMethod.SequencePoints.Add(new CodeCoverageSequencePoint("c:\\Projects\\Foo\\FooTest.cs", 1, 1, 0, 2, 1, 1));
fooModule.Methods.Add(fooGetterMethod); fooModule.Methods.Add(fooGetterMethod);
@ -48,8 +64,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
treeView.AddModules(modules); treeView.AddModules(modules);
fooModuleNode = (CodeCoverageModuleTreeNode)treeView.Nodes[0]; fooModuleNode = (CodeCoverageModuleTreeNode)treeView.Nodes[0];
} }
fooModuleNode.Expanding(); fooModuleNode.Expanding();
fooTestsNamespaceTreeNode = (CodeCoverageNamespaceTreeNode)fooModuleNode.Nodes[0]; fooTestsNamespaceTreeNode = (CodeCoverageNamespaceTreeNode)fooModuleNode.Nodes[0];
@ -94,12 +109,14 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
} }
[Test] [Test]
[Ignore("Visited length not implemented with OpenCover")]
public void PropertyTreeNodeVisitedCodeLength_CountPropertyTreeNode_ReturnsThree() public void PropertyTreeNodeVisitedCodeLength_CountPropertyTreeNode_ReturnsThree()
{ {
Assert.AreEqual(3, countPropertyTreeNode.VisitedCodeLength); Assert.AreEqual(3, countPropertyTreeNode.VisitedCodeLength);
} }
[Test] [Test]
[Ignore("Visited length not implemented with OpenCover")]
public void VisitedCodeLength_PropertyTreeNode_ReturnsThree() public void VisitedCodeLength_PropertyTreeNode_ReturnsThree()
{ {
int count = countPropertyTreeNode.VisitedCodeLength; int count = countPropertyTreeNode.VisitedCodeLength;
@ -123,6 +140,6 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
public void MethodTreeNodeMethod_SetterTreeNode_ReturnsSetterMethod() public void MethodTreeNodeMethod_SetterTreeNode_ReturnsSetterMethod()
{ {
Assert.AreEqual(fooSetterMethod, fooSetterTreeNode.Method); Assert.AreEqual(fooSetterMethod, fooSetterTreeNode.Method);
} }
} }
} }

63
src/AddIns/Analysis/CodeCoverage/Test/Utils/CodeCoverageMethodXElementBuilder.cs

@ -0,0 +1,63 @@
// 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.Xml.Linq;
namespace ICSharpCode.CodeCoverage.Tests.Utils
{
public class CodeCoverageMethodXElementBuilder
{
public XElement MethodElement { get; private set; }
public CodeCoverageMethodXElementBuilder(string methodSignature)
{
MethodElement = new XElement(XName.Get("Method"));
var nameElement = new XElement(XName.Get("Name"));
nameElement.Value = methodSignature;
MethodElement.Add(nameElement);
}
public void MakePropertyGetter()
{
SetGetterAttribute(true);
}
void SetGetterAttribute(bool value)
{
SetBooleanAttribute("isGetter", value);
}
void SetBooleanAttribute(string name, bool value)
{
MethodElement.SetAttributeValue(name, value.ToString().ToLowerInvariant());
}
public void MakePropertySetter()
{
SetSetterAttribute(true);
}
void SetSetterAttribute(bool value)
{
SetBooleanAttribute("isSetter", value);
}
public static XElement CreateSetterMethod(string methodSignature)
{
var builder = new CodeCoverageMethodXElementBuilder(methodSignature);
builder.SetSetterAttribute(true);
builder.SetGetterAttribute(false);
return builder.MethodElement;
}
public static XElement CreateGetterMethod(string methodSignature)
{
var builder = new CodeCoverageMethodXElementBuilder(methodSignature);
builder.SetSetterAttribute(false);
builder.SetGetterAttribute(true);
return builder.MethodElement;
}
}
}
Loading…
Cancel
Save