Browse Source

Add unit tests that check that a class hiding a field depends on the generics.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
47aa23e828
  1. 39
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs

39
ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs

@ -44,6 +44,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
CSharpUnresolvedFile unresolvedFile = syntaxTree.ToTypeSystem(); CSharpUnresolvedFile unresolvedFile = syntaxTree.ToTypeSystem();
project = project.AddOrUpdateFiles(unresolvedFile); project = project.AddOrUpdateFiles(unresolvedFile);
compilation = project.CreateCompilation(); compilation = project.CreateCompilation();
lookup = new MemberLookup(null, compilation.MainAssembly);
return unresolvedFile; return unresolvedFile;
} }
@ -61,7 +62,7 @@ class Derived : Middle {
public override void Method() {} public override void Method() {}
}"; }";
var unresolvedFile = Parse(program); var unresolvedFile = Parse(program);
ITypeDefinition derived = compilation.MainAssembly.GetTypeDefinition(unresolvedFile.TopLevelTypeDefinitions[2].FullTypeName); ITypeDefinition derived = compilation.MainAssembly.GetTypeDefinition(new TopLevelTypeName("Derived"));
var rr = lookup.Lookup(new ResolveResult(derived), "Method", EmptyList<IType>.Instance, true) as MethodGroupResolveResult; var rr = lookup.Lookup(new ResolveResult(derived), "Method", EmptyList<IType>.Instance, true) as MethodGroupResolveResult;
Assert.AreEqual(2, rr.MethodsGroupedByDeclaringType.Count()); Assert.AreEqual(2, rr.MethodsGroupedByDeclaringType.Count());
@ -88,7 +89,7 @@ class Derived : Base<int> {
public override void Method(string a) {} public override void Method(string a) {}
}"; }";
var unresolvedFile = Parse(program); var unresolvedFile = Parse(program);
ITypeDefinition derived = compilation.MainAssembly.GetTypeDefinition(unresolvedFile.TopLevelTypeDefinitions[1].FullTypeName); ITypeDefinition derived = compilation.MainAssembly.GetTypeDefinition(new TopLevelTypeName("Derived"));
var rr = lookup.Lookup(new ResolveResult(derived), "Method", EmptyList<IType>.Instance, true) as MethodGroupResolveResult; var rr = lookup.Lookup(new ResolveResult(derived), "Method", EmptyList<IType>.Instance, true) as MethodGroupResolveResult;
Assert.AreEqual(2, rr.MethodsGroupedByDeclaringType.Count()); Assert.AreEqual(2, rr.MethodsGroupedByDeclaringType.Count());
@ -116,7 +117,7 @@ class Derived : Base {
public override void Method<S>(S a) {} public override void Method<S>(S a) {}
}"; }";
var unresolvedFile = Parse(program); var unresolvedFile = Parse(program);
ITypeDefinition derived = compilation.MainAssembly.GetTypeDefinition(unresolvedFile.TopLevelTypeDefinitions[1].FullTypeName); ITypeDefinition derived = compilation.MainAssembly.GetTypeDefinition(new TopLevelTypeName("Derived"));
var rr = lookup.Lookup(new ResolveResult(derived), "Method", EmptyList<IType>.Instance, true) as MethodGroupResolveResult; var rr = lookup.Lookup(new ResolveResult(derived), "Method", EmptyList<IType>.Instance, true) as MethodGroupResolveResult;
Assert.AreEqual(1, rr.MethodsGroupedByDeclaringType.Count()); Assert.AreEqual(1, rr.MethodsGroupedByDeclaringType.Count());
@ -456,5 +457,37 @@ class TestClass {
var mrr = Resolve<MemberResolveResult>(program); var mrr = Resolve<MemberResolveResult>(program);
Assert.AreEqual("TestClass.B", mrr.Member.FullName); Assert.AreEqual("TestClass.B", mrr.Member.FullName);
} }
[Test]
public void GenericClassDoesNotHideField()
{
string program = @"using System;
class A { public int F; }
class B : A { public class F<T> {} }
class C : B {
public void M()
{
$F$ = 1;
}
}";
var mrr = Resolve<MemberResolveResult>(program);
Assert.AreEqual("A.F", mrr.Member.FullName);
}
[Test]
public void NonGenericClassHidesField_WithExplicitThisAccess()
{
string program = @"using System;
class A { public int F; }
class B : A { public class F {} }
class C : B {
public void M()
{
$this.F$ = 1;
}
}";
var trr = Resolve<TypeResolveResult>(program);
Assert.AreEqual("B+F", trr.Type.ReflectionName);
}
} }
} }

Loading…
Cancel
Save