' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. Imports Microsoft.CodeAnalysis Imports Microsoft.VisualStudio.LanguageServices.CSharp.CodeModel.Extenders Imports Microsoft.VisualStudio.LanguageServices.CSharp.CodeModel.Interop Imports Roslyn.Test.Utilities Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.CodeModel.CSharp Public Class CodePropertyTests Inherits AbstractCodePropertyTests #Region "GetStartPoint() tests" Public Sub GetStartPoint() Dim code = class C { public int $$P { get { return default(int); } set { } } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, ThrowsCOMException(E_FAIL)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=5, lineOffset:=9, absoluteOffset:=42, lineLength:=11)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=7, lineOffset:=13, absoluteOffset:=68, lineLength:=32)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=16))) End Sub Public Sub GetStartPoint_Attribute() Dim code = class C { [System.CLSCompliant(true)] public int $$P { get { return default(int); } set { } } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=31)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=6, lineOffset:=9, absoluteOffset:=74, lineLength:=11)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=8, lineOffset:=13, absoluteOffset:=100, lineLength:=32)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=31))) End Sub Public Sub GetStartPoint_AutoProperty() Dim code = class C { public int $$P { get; set; } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, ThrowsCOMException(E_FAIL)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=3, lineOffset:=20, absoluteOffset:=30, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=3, lineOffset:=25, absoluteOffset:=35, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=30))) End Sub Public Sub GetStartPoint_AutoProperty_Attribute() Dim code = class C { [System.CLSCompliant(true)] public int $$P { get; set; } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=31)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=4, lineOffset:=20, absoluteOffset:=62, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=4, lineOffset:=25, absoluteOffset:=67, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=31))) End Sub Public Sub GetStartPoint_Indexer() Dim code = class C { public int $$this[int index] { get { return default(int); } set { } } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, ThrowsCOMException(E_FAIL)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=5, lineOffset:=9, absoluteOffset:=56, lineLength:=11)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=7, lineOffset:=13, absoluteOffset:=82, lineLength:=32)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=30))) End Sub Public Sub GetStartPoint_Indexer_Attribute() Dim code = class C { [System.CLSCompliant(true)] public int $$this[int index] { get { return default(int); } set { } } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=31)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=6, lineOffset:=9, absoluteOffset:=88, lineLength:=11)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=8, lineOffset:=13, absoluteOffset:=114, lineLength:=32)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=3, lineOffset:=5, absoluteOffset:=15, lineLength:=31))) End Sub Public Sub GetStartPoint_ExplicitlyImplementedIndexer() Dim code = interface I1 { int this[int i] { get;set; } } class C1 : I1 { int $$I1.this[int i] { get { return 0; } set { } } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=9, lineOffset:=5, absoluteOffset:=76, lineLength:=22))) End Sub Public Sub GetStartPoint_ExplicitlyImplementedProperty() Dim code = interface I1 { int Prop1 { get; set; } } class C1 : I1 { int $$I1.Prop1 { get { return 0; } set { } } } TestGetStartPoint(code, Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=8, lineOffset:=5, absoluteOffset:=67, lineLength:=16))) End Sub #End Region #Region "GetEndPoint() tests" Public Sub GetEndPoint() Dim code = class C { public int $$P { get { return default(int); } set { } } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, ThrowsCOMException(E_FAIL)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=12, lineOffset:=1, absoluteOffset:=131, lineLength:=5)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=8, lineOffset:=1, absoluteOffset:=89, lineLength:=9)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=12, lineOffset:=6, absoluteOffset:=136, lineLength:=5))) End Sub Public Sub GetEndPoint_Attribute() Dim code = class C { [System.CLSCompliant(true)] public int $$P { get { return default(int); } set { } } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, TextPoint(line:=3, lineOffset:=32, absoluteOffset:=42, lineLength:=31)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=13, lineOffset:=1, absoluteOffset:=163, lineLength:=5)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=9, lineOffset:=1, absoluteOffset:=121, lineLength:=9)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=13, lineOffset:=6, absoluteOffset:=168, lineLength:=5))) End Sub Public Sub GetEndPoint_AutoProperty() Dim code = class C { public int $$P { get; set; } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, ThrowsCOMException(E_FAIL)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=3, lineOffset:=30, absoluteOffset:=40, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=3, lineOffset:=23, absoluteOffset:=33, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=3, lineOffset:=31, absoluteOffset:=41, lineLength:=30))) End Sub Public Sub GetEndPoint_AutoProperty_Attribute() Dim code = class C { [System.CLSCompliant(true)] public int $$P { get; set; } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, TextPoint(line:=3, lineOffset:=32, absoluteOffset:=42, lineLength:=31)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=4, lineOffset:=30, absoluteOffset:=72, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=4, lineOffset:=23, absoluteOffset:=65, lineLength:=30)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=4, lineOffset:=31, absoluteOffset:=73, lineLength:=30))) End Sub Public Sub GetEndPoint_Indexer() Dim code = class C { public int $$this[int index] { get { return default(int); } set { } } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, ThrowsCOMException(E_FAIL)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=12, lineOffset:=1, absoluteOffset:=145, lineLength:=5)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=8, lineOffset:=1, absoluteOffset:=103, lineLength:=9)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=12, lineOffset:=6, absoluteOffset:=150, lineLength:=5))) End Sub Public Sub GetEndPoint_Indexer_Attribute() Dim code = class C { [System.CLSCompliant(true)] public int $$this[int index] { get { return default(int); } set { } } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartAttributesWithDelimiter, TextPoint(line:=3, lineOffset:=32, absoluteOffset:=42, lineLength:=31)), Part(EnvDTE.vsCMPart.vsCMPartBody, TextPoint(line:=13, lineOffset:=1, absoluteOffset:=177, lineLength:=5)), Part(EnvDTE.vsCMPart.vsCMPartBodyWithDelimiter, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeader, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartHeaderWithAttributes, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartName, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartNavigate, TextPoint(line:=9, lineOffset:=1, absoluteOffset:=135, lineLength:=9)), Part(EnvDTE.vsCMPart.vsCMPartWhole, ThrowsNotImplementedException), Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=13, lineOffset:=6, absoluteOffset:=182, lineLength:=5))) End Sub Public Sub GetEndPoint_ExplicitlyImplementedProperty() Dim code = interface I1 { int Prop1 { get; set; } } class C1 : I1 { int $$I1.Prop1 { get { return 0; } set { } } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=18, lineOffset:=6, absoluteOffset:=178, lineLength:=5))) End Sub Public Sub GetEndPoint_ExplicitlyImplementedIndexer() Dim code = interface I1 { int this[int i] { get;set; } } class C1 : I1 { int $$I1.this[int i] { get { return 0; } set { } } } TestGetEndPoint(code, Part(EnvDTE.vsCMPart.vsCMPartWholeWithAttributes, TextPoint(line:=19, lineOffset:=6, absoluteOffset:=193, lineLength:=5))) End Sub #End Region #Region "FullName tests" Public Sub FullName1() Dim code = class C { public int $$P { get { return default(int); } set { } } } TestFullName(code, "C.P") End Sub Public Sub FullName2() Dim code = class C { public int $$P { get; set; } } TestFullName(code, "C.P") End Sub Public Sub FullName3() Dim code = class C { public int $$this[int index] { get; set; } } TestFullName(code, "C.this") End Sub Public Sub FullName_ExplicitlyImplementedProperty() Dim code = interface I1 { int Prop1 { get; set; } } class C1 : I1 { int $$I1.Prop1 { get { return 0; } set { } } } TestFullName(code, "C1.I1.Prop1") End Sub Public Sub FullName_ExplicitlyImplementedIndexer() Dim code = interface I1 { int this[int i] { get;set; } } class C1 : I1 { int $$I1.this[int i] { get { return 0; } set { } } } TestFullName(code, "C1.I1.this") End Sub #End Region #Region "IsDefault tests" Public Sub IsDefault1() Dim code = class C { public int $$this[int index] { get { return default(int); } set { } } } TestIsDefault(code, True) End Sub Public Sub IsDefault2() Dim code = public int $$P { get { return default(int); } set { } TestIsDefault(code, False) End Sub Public Sub IsDefault3() Dim code = class C { public int $$P { get; set; } } TestIsDefault(code, False) End Sub #End Region #Region "Name tests" Public Sub Name1() Dim code = class C { public int $$P { get { return default(int); } set { } } } TestName(code, "P") End Sub Public Sub Name2() Dim code = class C { public int $$P { get; set; } } TestName(code, "P") End Sub Public Sub Name3() Dim code = class C { public int $$this[int index] { get; set; } } TestName(code, "this") End Sub Public Sub Name_ExplicitlyImplementedProperty() Dim code = interface I1 { int Prop1 { get; set; } } class C1 : I1 { int $$I1.Prop1 { get { return 0; } set { } } } TestName(code, "I1.Prop1") End Sub Public Sub Name_ExplicitlyImplementedIndexer() Dim code = interface I1 { int this[int i] { get;set; } } class C1 : I1 { int $$I1.this[int i] { get { return 0; } set { } } } TestName(code, "I1.this") End Sub #End Region #Region "Prototype tests" Public Sub Prototype_ClassName1() Dim code = namespace N { class C { int this$$[int index] { get; set; } } } TestPrototype(code, EnvDTE.vsCMPrototype.vsCMPrototypeClassName, "C.this[int index]") End Sub Public Sub Prototype_ClassName2() Dim code = namespace N { class C { int P$$ { get; set; } } } TestPrototype(code, EnvDTE.vsCMPrototype.vsCMPrototypeClassName, "C.P") End Sub Public Sub Prototype_FullName1() Dim code = namespace N { class C { int this$$[int index] { get; set; } } } TestPrototype(code, EnvDTE.vsCMPrototype.vsCMPrototypeFullname, "N.C.this[int index]") End Sub Public Sub Prototype_FullName2() Dim code = namespace N { class C { int P$$ { get; set; } } } TestPrototype(code, EnvDTE.vsCMPrototype.vsCMPrototypeFullname, "N.C.P") End Sub #End Region #Region "Type tests" Public Sub Type1() Dim code = class C { public int $$P { get { return default(int); } set { } } } TestTypeProp(code, New CodeTypeRefData With { .AsFullName = "System.Int32", .AsString = "int", .CodeTypeFullName = "System.Int32", .TypeKind = EnvDTE.vsCMTypeRef.vsCMTypeRefInt }) End Sub #End Region #Region "OverrideKind tests" Public Sub OverrideKind1() Dim code = class C { public int $$P { get { return default(int); } set { } } } TestOverrideKind(code, EnvDTE80.vsCMOverrideKind.vsCMOverrideKindNone) End Sub Public Sub OverrideKind2() Dim code = abstract class C { public abstract int $$P { get; set; } } TestOverrideKind(code, EnvDTE80.vsCMOverrideKind.vsCMOverrideKindAbstract) End Sub #End Region #Region "ReadWrite tests" Public Sub ReadWrite1() Dim code = class C { public int $$P { get { return default(int); } set { } } } TestReadWrite(code, EnvDTE80.vsCMPropertyKind.vsCMPropertyKindReadWrite) End Sub Public Sub ReadWrite2() Dim code = class C { public int $$P { get { return default(int); } } } TestReadWrite(code, EnvDTE80.vsCMPropertyKind.vsCMPropertyKindReadOnly) End Sub Public Sub ReadWrite3() Dim code = class C { public int $$P { set { } } } TestReadWrite(code, EnvDTE80.vsCMPropertyKind.vsCMPropertyKindWriteOnly) End Sub Public Sub ReadWrite4() Dim code = class C { public int $$P { get; set; } } TestReadWrite(code, EnvDTE80.vsCMPropertyKind.vsCMPropertyKindReadWrite) End Sub #End Region #Region "Set OverrideKind tests" Public Sub SetOverrideKind1() Dim code = abstract class C { public int $$P { get { return default(int); } set { } } } Dim expected = abstract class C { public abstract int P { get; set; } } TestSetOverrideKind(code, expected, EnvDTE80.vsCMOverrideKind.vsCMOverrideKindAbstract) End Sub Public Sub SetOverrideKind2() Dim code = abstract class C { public abstract int $$P { get; set; } } Dim expected = abstract class C { public int P { get { } set { } } } TestSetOverrideKind(code, expected, EnvDTE80.vsCMOverrideKind.vsCMOverrideKindNone) End Sub #End Region #Region "Set IsDefault tests" Public Sub SetIsDefault1() Dim code = abstract class C { public int $$P { get { return default(int); } set { } } } Dim expected = abstract class C { public int P { get { return default(int); } set { } } } TestSetIsDefault(code, expected, True, ThrowsInvalidOperationException(Of Boolean)) End Sub #End Region #Region "Set Type tests" Public Sub SetType1() Dim code = class C { public int $$P { get; set; } } Dim expected = class C { public string P { get; set; } } TestSetTypeProp(code, expected, "string") End Sub Public Sub SetType2() Dim code = class C { public int $$P { get; set; } } Dim expected = class C { public string P { get; set; } } TestSetTypeProp(code, expected, "System.String") End Sub #End Region #Region "AutoImplementedPropertyExtender" Public Sub AutoImplementedPropertyExtender_IsAutoImplemented1() Dim code = public class C { int $$P { get; set; } } TestAutoImplementedPropertyExtender_IsAutoImplemented(code, True) End Sub Public Sub AutoImplementedPropertyExtender_IsAutoImplemented2() Dim code = public class C { int $$P { get { return 0; } set { } } } TestAutoImplementedPropertyExtender_IsAutoImplemented(code, False) End Sub Public Sub AutoImplementedPropertyExtender_IsAutoImplemented3() Dim code = public interface I { int $$P { get; set; } } TestAutoImplementedPropertyExtender_IsAutoImplemented(code, False) End Sub #End Region #Region "Parameter name tests" Public Sub TestParameterNameWithEscapeCharacters() Dim code = class Program { public int $$this[int @int] { get { return @int; } set { } } } TestAllParameterNames(code, "@int") End Sub #End Region #Region "AddAttribute tests" Public Sub AddAttribute1() Dim code = using System; class C { public int $$P { get { return default(int); } set { } } } Dim expected = using System; class C { [Serializable()] public int P { get { return default(int); } set { } } } TestAddAttribute(code, expected, New AttributeData With {.Name = "Serializable"}) End Sub Public Sub AddAttribute2() Dim code = using System; class C { [Serializable] public int $$P { get { return default(int); } set { } } } Dim expected = using System; class C { [Serializable] [CLSCompliant(true)] public int P { get { return default(int); } set { } } } TestAddAttribute(code, expected, New AttributeData With {.Name = "CLSCompliant", .Value = "true", .Position = 1}) End Sub Public Sub AddAttribute_BelowDocComment() Dim code = using System; class C { /// <summary></summary> public int $$P { get { return default(int); } set { } } } Dim expected = using System; class C { /// <summary></summary> [CLSCompliant(true)] public int P { get { return default(int); } set { } } } TestAddAttribute(code, expected, New AttributeData With {.Name = "CLSCompliant", .Value = "true"}) End Sub #End Region Public Sub TypeDescriptor_GetProperties() Dim code = class C { int $$P { get { return 42; } } } Dim expectedPropertyNames = {"DTE", "Collection", "Name", "FullName", "ProjectItem", "Kind", "IsCodeType", "InfoLocation", "Children", "Language", "StartPoint", "EndPoint", "ExtenderNames", "ExtenderCATID", "Parent", "Type", "Getter", "Setter", "Access", "Attributes", "DocComment", "Comment", "Parameters", "IsGeneric", "OverrideKind", "IsShared", "IsDefault", "Parent2", "ReadWrite"} TestPropertyDescriptors(code, expectedPropertyNames) End Sub Private Function GetAutoImplementedPropertyExtender(codeElement As EnvDTE80.CodeProperty2) As ICSAutoImplementedPropertyExtender Return CType(codeElement.Extender(ExtenderNames.AutoImplementedProperty), ICSAutoImplementedPropertyExtender) End Function Protected Overrides Function AutoImplementedPropertyExtender_GetIsAutoImplemented(codeElement As EnvDTE80.CodeProperty2) As Boolean Return GetAutoImplementedPropertyExtender(codeElement).IsAutoImplemented End Function Protected Overrides ReadOnly Property LanguageName As String Get Return LanguageNames.CSharp End Get End Property End Class End Namespace