From 806ddd094f8629f40d8577d2c451583654155e64 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Fri, 1 Jun 2012 21:49:39 +0100 Subject: [PATCH] Implement EnvDTE.CodeProperty2.ReadWrite. --- .../Project/Src/EnvDTE/CodeProperty.cs | 9 ++--- .../Project/Src/EnvDTE/CodeProperty2.cs | 14 +++++--- .../Project/Src/EnvDTE/vsCMPropertyKind.cs | 3 +- .../Test/Src/EnvDTE/CodeProperty2Tests.cs | 36 +++++++++++++++++++ .../Test/Src/Helpers/PropertyHelper.cs | 26 ++++++++++++++ 5 files changed, 79 insertions(+), 9 deletions(-) diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs index 042d6288c1..23c70cad8a 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs @@ -8,7 +8,6 @@ namespace ICSharpCode.PackageManagement.EnvDTE { public class CodeProperty : CodeElement { - IProperty property; CodeElements attributes; public CodeProperty() @@ -18,22 +17,24 @@ namespace ICSharpCode.PackageManagement.EnvDTE public CodeProperty(IProperty property) : base(property) { - this.property = property; + this.Property = property; } + protected IProperty Property { get; private set; } + public virtual vsCMAccess Access { get { return GetAccess(); } set { } } public virtual CodeClass Parent { - get { return new CodeClass(property.ProjectContent, property.DeclaringType); } + get { return new CodeClass(Property.ProjectContent, Property.DeclaringType); } } public virtual CodeElements Attributes { get { if (attributes == null) { - attributes = new CodeAttributes(property); + attributes = new CodeAttributes(Property); } return attributes; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty2.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty2.cs index e7a49b0203..28d506333d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty2.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty2.cs @@ -17,12 +17,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE { } - public CodeElements Members { - get { throw new NotImplementedException(); } + public vsCMPropertyKind ReadWrite { + get { return GetPropertyKind(); } } - public vsCMPropertyKind ReadWrite { - get { throw new NotImplementedException(); } + vsCMPropertyKind GetPropertyKind() + { + if (Property.CanSet && Property.CanGet) { + return vsCMPropertyKind.vsCMPropertyKindReadWrite; + } else if (Property.CanSet) { + return vsCMPropertyKind.vsCMPropertyKindWriteOnly; + } + return vsCMPropertyKind.vsCMPropertyKindReadOnly; } public CodeElements Parameters { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/vsCMPropertyKind.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/vsCMPropertyKind.cs index f681353cb3..c8b6de6aac 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/vsCMPropertyKind.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/vsCMPropertyKind.cs @@ -7,7 +7,8 @@ namespace ICSharpCode.PackageManagement.EnvDTE { public enum vsCMPropertyKind { + vsCMPropertyKindReadWrite = 0, vsCMPropertyKindReadOnly = 1, - vsCMPropertyKindWriteOnly = 2 + vsCMPropertyKindWriteOnly = 2, } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs index 03a0052dff..da4b359a37 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs @@ -84,5 +84,41 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(vsCMAccess.vsCMAccessPrivate, access); } + + [Test] + public void ReadWrite_PropertyHasGetterAndSetter_ReturnsReadWriteProperty() + { + helper.CreatePublicProperty("MyProperty"); + helper.HasGetterAndSetter(); + CreateCodeProperty2(); + + vsCMPropertyKind kind = property.ReadWrite; + + Assert.AreEqual(vsCMPropertyKind.vsCMPropertyKindReadWrite, kind); + } + + [Test] + public void ReadWrite_PropertyHasGetterOnly_ReturnsReadOnlyProperty() + { + helper.CreatePublicProperty("MyProperty"); + helper.HasGetterOnly(); + CreateCodeProperty2(); + + vsCMPropertyKind kind = property.ReadWrite; + + Assert.AreEqual(vsCMPropertyKind.vsCMPropertyKindReadOnly, kind); + } + + [Test] + public void ReadWrite_PropertyHasSetterOnly_ReturnsWriteOnlyProperty() + { + helper.CreatePublicProperty("MyProperty"); + helper.HasSetterOnly(); + CreateCodeProperty2(); + + vsCMPropertyKind kind = property.ReadWrite; + + Assert.AreEqual(vsCMPropertyKind.vsCMPropertyKindWriteOnly, kind); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs index b8d737902e..a054fa2c3f 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/PropertyHelper.cs @@ -50,5 +50,31 @@ namespace PackageManagement.Tests.Helpers Property.Stub(p => p.IsPublic).Return(false); Property.Stub(p => p.IsPrivate).Return(true); } + + public void HasGetterAndSetter() + { + HasGetter = true; + HasSetter = true; + } + + public bool HasSetter { + set { Property.Stub(p => p.CanSet).Return(value); } + } + + public bool HasGetter { + set { Property.Stub(p => p.CanGet).Return(value); } + } + + public void HasGetterOnly() + { + HasGetter = true; + HasSetter = false; + } + + public void HasSetterOnly() + { + HasGetter = false; + HasSetter = true; + } } }