1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
4
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
6
using System.Collections.Generic;
7
using ICSharpCode.SharpDevelop.Dom;
8
using ICSharpCode.SharpDevelop.Editor;
9
using ICSharpCode.SharpDevelop.Tests.Utils;
10
using NUnit.Framework;
12
namespace ICSharpCode.SharpDevelop.Tests
15
/// Tests the OverrideCompletionDataProvider GetOverridableProperties.
16
/// This property should be added to the IClass interface.
19
public class OverridablePropertiesTestFixture
22
MockDefaultReturnType returnType;
23
List<IProperty> expectedProperties;
24
MockClass declaringType;
29
expectedProperties = new List<IProperty>();
30
c = new MockClass("MyClass");
31
declaringType = new MockClass("MyDeclaringType");
32
returnType = new MockDefaultReturnType();
33
c.DefaultReturnType = returnType;
36
IProperty[] GetOverridableProperties(IClass baseClass)
38
return OverrideCompletionItemProvider.GetOverridableProperties(new MockClass("DerivedClass") { BaseType = baseClass.DefaultReturnType });
42
/// Add one overridable property to the return type and this
43
/// should be returned in the list of overridable properties.
46
public void OneOverridablePropertyReturned()
48
MockProperty property = new MockProperty("IsRunning");
49
property.DeclaringType = declaringType;
50
property.IsOverridable = true;
51
returnType.Properties.Add(property);
53
expectedProperties.Add(property);
55
IProperty[] properties = GetOverridableProperties(c);
57
AssertArePropertiesEqual(expectedProperties, properties);
61
/// Make sure that an overridable property is not returned when
62
/// it is part of the class being considered.
65
public void OverridablePropertyPartOfClass()
67
MockProperty property = new MockProperty("IsRunning");
68
property.DeclaringType = c;
69
property.IsOverridable = true;
70
returnType.Properties.Add(property);
72
IProperty[] properties = OverrideCompletionItemProvider.GetOverridableProperties(c);
74
AssertArePropertiesEqual(expectedProperties, properties);
78
/// An overridable but const property should not be returned.
81
public void OverridableConstPropertyNotReturned()
83
MockProperty property = new MockProperty("IsRunning");
84
property.DeclaringType = declaringType;
85
property.IsOverridable = true;
86
property.IsConst = true;
87
returnType.Properties.Add(property);
89
IProperty[] properties = GetOverridableProperties(c);
91
AssertArePropertiesEqual(expectedProperties, properties);
95
/// An overridable but private property should not be returned.
98
public void OverridablePrivatePropertyNotReturned()
100
MockProperty property = new MockProperty("Run");
101
property.DeclaringType = declaringType;
102
property.IsOverridable = true;
103
property.IsPrivate = true;
104
returnType.Properties.Add(property);
106
IProperty[] properties = GetOverridableProperties(c);
108
AssertArePropertiesEqual(expectedProperties, properties);
112
[ExpectedException(typeof(ArgumentException))]
113
public void NullArgument()
115
OverrideCompletionItemProvider.GetOverridableProperties(null);
118
void AssertArePropertiesEqual(List<IProperty> expectedProperties, IProperty[] properties)
120
// Get a list of expected property names.
121
List<string> expectedPropertyNames = new List<string>();
122
foreach (IProperty expectedProperty in expectedProperties) {
123
expectedPropertyNames.Add(expectedProperty.Name);
126
// Get a list of actual property names.
127
List<string> propertyNames = new List<string>();
128
foreach (IProperty p in properties) {
129
propertyNames.Add(p.Name);
132
// Compare the two arrays.
133
Assert.AreEqual(expectedPropertyNames.ToArray(), propertyNames.ToArray());