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 @@ -67,19 +67,26 @@ namespace ICSharpCode.CodeCoverage
public static string GetPropertyName(CodeCoverageMethod method)
{
if (IsGetter(method) || IsSetter(method)) {
return method.Name.Substring(4);
return GetMethodName(method).Substring(6);
}
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)
{
return method.Name.StartsWith("get_");
return method.Name.Contains("::get_");
}
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 @@ -32,7 +32,7 @@ namespace ICSharpCode.CodeCoverage
foreach (CodeCoverageProperty property in properties) {
if (propertyName == property.Name) {
property.AddMethod(method);
added = true;
added = true;
}
}

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

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

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

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

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

@ -4,7 +4,9 @@ @@ -4,7 +4,9 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Xml.Linq;
using ICSharpCode.CodeCoverage;
using ICSharpCode.CodeCoverage.Tests.Utils;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests.Coverage
@ -18,8 +20,20 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage @@ -18,8 +20,20 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage
[SetUp]
public void Init()
{
getter = new CodeCoverageMethod("get_Count", "MyTest", MethodAttributes.SpecialName);
setter = new CodeCoverageMethod("set_Count", "MyTest", MethodAttributes.SpecialName);
XElement getterElement = CreateGetterElement("System.Int32 MyTest::get_Count()");
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]
@ -94,6 +108,6 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage @@ -94,6 +108,6 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage
expectedMethods.Add(getter);
expectedMethods.Add(setter);
Assert.AreEqual(expectedMethods, property.GetMethods());
}
}
}
}

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

@ -1,13 +1,16 @@ @@ -1,13 +1,16 @@
// 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 ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Reflection;
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
{
@ -27,16 +30,29 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui @@ -27,16 +30,29 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
CodeCoverageMethod fooGetterMethod;
CodeCoverageMethod fooSetterMethod;
XElement CreateSetterMethod(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateSetterMethod(methodSignature);
}
XElement CreateGetterMethod(string methodSignature)
{
return CodeCoverageMethodXElementBuilder.CreateGetterMethod(methodSignature);
}
[TestFixtureSetUp]
public void SetUpFixture()
{
List<CodeCoverageModule> modules = new List<CodeCoverageModule>();
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", 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));
fooModule.Methods.Add(fooGetterMethod);
@ -48,8 +64,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui @@ -48,8 +64,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
treeView.AddModules(modules);
fooModuleNode = (CodeCoverageModuleTreeNode)treeView.Nodes[0];
}
fooModuleNode.Expanding();
fooTestsNamespaceTreeNode = (CodeCoverageNamespaceTreeNode)fooModuleNode.Nodes[0];
@ -94,12 +109,14 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui @@ -94,12 +109,14 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
}
[Test]
[Ignore("Visited length not implemented with OpenCover")]
public void PropertyTreeNodeVisitedCodeLength_CountPropertyTreeNode_ReturnsThree()
{
Assert.AreEqual(3, countPropertyTreeNode.VisitedCodeLength);
}
[Test]
[Ignore("Visited length not implemented with OpenCover")]
public void VisitedCodeLength_PropertyTreeNode_ReturnsThree()
{
int count = countPropertyTreeNode.VisitedCodeLength;
@ -123,6 +140,6 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui @@ -123,6 +140,6 @@ namespace ICSharpCode.CodeCoverage.Tests.Gui
public void MethodTreeNodeMethod_SetterTreeNode_ReturnsSetterMethod()
{
Assert.AreEqual(fooSetterMethod, fooSetterTreeNode.Method);
}
}
}
}

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

@ -0,0 +1,63 @@ @@ -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