public void FailedOverloadResolution()
{
TestCode testCode = new TestCode(@"
class Program
{
static void Main(string[] args)
{
int i = 8;
int j = i + q;
X$.f(""hello"");
}
}
class X
{
public static void f() { }
public static void f(int i) { }
}
");
var typeInfo = testCode.SemanticModel.GetTypeInfo((ExpressionSyntax)testCode.SyntaxNode);
var semanticInfo = testCode.SemanticModel.GetSymbolInfo((ExpressionSyntax)testCode.SyntaxNode);
Assert.IsNull(typeInfo.Type);
Assert.IsNull(typeInfo.ConvertedType);
Assert.IsNull(semanticInfo.Symbol);
Assert.AreEqual(CandidateReason.OverloadResolutionFailure, semanticInfo.CandidateReason);
Assert.AreEqual(2, semanticInfo.CandidateSymbols.Count);
Symbol[] sortedCandidates = semanticInfo.CandidateSymbols.AsEnumerable().OrderBy(s => string.Format("{0:T}", s)).ToArray();
Assert.AreEqual("void X.f()", string.Format("{0:T}", sortedCandidates[0]));
Assert.AreEqual(SymbolKind.Method, sortedCandidates[0].Kind);
Assert.AreEqual("void X.f(System.Int32 i)", string.Format("{0:T}", sortedCandidates[1]));
Assert.AreEqual(SymbolKind.Method, sortedCandidates[1].Kind);
var memberGroup = testCode.SemanticModel.GetMemberGroup((ExpressionSyntax)testCode.SyntaxNode);
Assert.AreEqual(2, memberGroup.Count);
Symbol[] sortedMemberGroup = memberGroup.AsEnumerable().OrderBy(s => string.Format("{0:T}", s)).ToArray();
Assert.AreEqual("void X.f()", string.Format("{0:T}", sortedMemberGroup[0]));
Assert.AreEqual("void X.f(System.Int32 i)", string.Format("{0:T}", sortedMemberGroup[1]));
}