Browse Source

Added unit test for a reported bug.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
4805ac3b65
  1. 59
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

59
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -70,11 +70,12 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
class TestFactory class TestFactory
: ICompletionDataFactory : ICompletionDataFactory
{ {
readonly CSharpResolver state;
readonly TypeSystemAstBuilder builder; readonly TypeSystemAstBuilder builder;
public TestFactory(CSharpResolver state) public TestFactory(CSharpResolver state)
{ {
Console.WriteLine ("ct:"+state.CurrentTypeDefinition); this.state = state;
builder = new TypeSystemAstBuilder(state); builder = new TypeSystemAstBuilder(state);
} }
@ -151,11 +152,28 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
{ {
return new CompletionData (entity.Name); return new CompletionData (entity.Name);
} }
string GetShortType(IType type)
{
var dt = state.CurrentTypeDefinition;
var declaring = type.DeclaringType != null ? type.DeclaringType.GetDefinition() : null;
if (declaring != null) {
while (dt != null) {
if (dt.Equals(declaring)) {
builder.AlwaysUseShortTypeNames = true;
break;
}
dt = dt.DeclaringTypeDefinition;
}
}
var shortType = builder.ConvertType(type);
return shortType.GetText();
}
public ICompletionData CreateTypeCompletionData (ICSharpCode.NRefactory.TypeSystem.IType type, bool fullName, bool isInAttributeContext) public ICompletionData CreateTypeCompletionData (ICSharpCode.NRefactory.TypeSystem.IType type, bool fullName, bool isInAttributeContext)
{ {
string name = fullName ? builder.ConvertType(type).GetText() : type.Name; string name = fullName ? GetShortType(type) : type.Name;
if (isInAttributeContext && name.EndsWith("Attribute") && name.Length > "Attribute".Length) { if (isInAttributeContext && name.EndsWith("Attribute") && name.Length > "Attribute".Length) {
name = name.Substring(0, name.Length - "Attribute".Length); name = name.Substring(0, name.Length - "Attribute".Length);
} }
@ -163,7 +181,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
} }
public ICompletionData CreateMemberCompletionData(IType type, IEntity member) public ICompletionData CreateMemberCompletionData(IType type, IEntity member)
{ {
string name = builder.ConvertType(type).GetText(); string name = GetShortType(type);
Console.WriteLine("name:"+name); Console.WriteLine("name:"+name);
return new CompletionData (name + "."+ member.Name); return new CompletionData (name + "."+ member.Name);
} }
@ -5533,5 +5551,38 @@ class C : A
Assert.IsNull(provider.Find("Hidden")); Assert.IsNull(provider.Find("Hidden"));
}); });
} }
/// <summary>
/// Bug 7191 - code completion problem with generic interface using nested type
/// </summary>
[Test()]
public void TestBug7191()
{
CombinedProviderTest(
@"using System.Collections.Generic;
namespace bug
{
public class Outer
{
public class Nested
{
}
}
public class TestClass
{
void Bar()
{
$IList<Outer.Nested> foo = new $
}
}
}
", provider => {
Assert.IsNotNull(provider.Find("List<Outer.Nested>"));
});
}
} }
} }

Loading…
Cancel
Save