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)
7
using ICSharpCode.NRefactory.VB.Parser;
8
using ICSharpCode.NRefactory.VB.Ast;
10
namespace ICSharpCode.NRefactory.VB.Tests.Ast
13
public class InvocationExpressionTests
15
void CheckSimpleInvoke(InvocationExpression ie)
17
Assert.AreEqual(0, ie.Arguments.Count);
18
Assert.IsTrue(ie.TargetObject is SimpleNameExpression);
19
Assert.AreEqual("myMethod", ((SimpleNameExpression)ie.TargetObject).Identifier);
22
void CheckGenericInvoke(InvocationExpression expr)
24
Assert.AreEqual(1, expr.Arguments.Count);
25
Assert.IsTrue(expr.TargetObject is SimpleNameExpression);
26
SimpleNameExpression ident = (SimpleNameExpression)expr.TargetObject;
27
Assert.AreEqual("myMethod", ident.Identifier);
28
Assert.AreEqual(1, ident.TypeArguments.Count);
29
Assert.AreEqual("System.Char", ident.TypeArguments[0].Type);
32
void CheckGenericInvoke2(InvocationExpression expr)
34
Assert.AreEqual(0, expr.Arguments.Count);
35
Assert.IsTrue(expr.TargetObject is SimpleNameExpression);
36
SimpleNameExpression ident = (SimpleNameExpression)expr.TargetObject;
37
Assert.AreEqual("myMethod", ident.Identifier);
38
Assert.AreEqual(2, ident.TypeArguments.Count);
39
Assert.AreEqual("T", ident.TypeArguments[0].Type);
40
Assert.IsFalse(ident.TypeArguments[0].IsKeyword);
41
Assert.AreEqual("System.Boolean", ident.TypeArguments[1].Type);
42
Assert.IsTrue(ident.TypeArguments[1].IsKeyword);
47
public void VBNetSimpleInvocationExpressionTest()
49
CheckSimpleInvoke(ParseUtil.ParseExpression<InvocationExpression>("myMethod()"));
53
public void VBNetGenericInvocationExpressionTest()
55
CheckGenericInvoke(ParseUtil.ParseExpression<InvocationExpression>("myMethod(Of Char)(\"a\"c)"));
59
public void VBNetGenericInvocation2ExpressionTest()
61
CheckGenericInvoke2(ParseUtil.ParseExpression<InvocationExpression>("myMethod(Of T, Boolean)()"));
65
public void PrimitiveExpression1Test()
67
InvocationExpression ie = ParseUtil.ParseExpression<InvocationExpression>("546.ToString()");
68
Assert.AreEqual(0, ie.Arguments.Count);
72
public void VBInvocationOnGenericType()
74
InvocationExpression expr = ParseUtil.ParseExpression<InvocationExpression>("A(Of T).Foo()");
75
MemberReferenceExpression mre = (MemberReferenceExpression)expr.TargetObject;
76
Assert.AreEqual("Foo", mre.MemberName);
77
SimpleNameExpression tre = (SimpleNameExpression)mre.TargetObject;
78
Assert.AreEqual("A", tre.Identifier);
79
Assert.AreEqual("T", tre.TypeArguments[0].Type);
83
public void VBInvocationOnInnerClassInGenericType()
85
InvocationExpression expr = ParseUtil.ParseExpression<InvocationExpression>("A(Of T).B.Foo()");
86
MemberReferenceExpression mre = (MemberReferenceExpression)expr.TargetObject;
87
Assert.AreEqual("Foo", mre.MemberName);
88
MemberReferenceExpression mre2 = (MemberReferenceExpression)mre.TargetObject;
89
Assert.AreEqual("B", mre2.MemberName);
90
SimpleNameExpression tre = (SimpleNameExpression)mre2.TargetObject;
91
Assert.AreEqual("A", tre.Identifier);
92
Assert.AreEqual("T", tre.TypeArguments[0].Type);
96
public void VBInvocationOnGenericInnerClassInGenericType()
98
InvocationExpression expr = ParseUtil.ParseExpression<InvocationExpression>("A(Of T).B.C(Of U).Foo()");
99
MemberReferenceExpression mre = (MemberReferenceExpression)expr.TargetObject;
100
Assert.AreEqual("Foo", mre.MemberName);
102
MemberReferenceExpression mre2 = (MemberReferenceExpression)mre.TargetObject;
103
Assert.AreEqual("C", mre2.MemberName);
104
Assert.AreEqual("U", mre2.TypeArguments[0].Type);
106
MemberReferenceExpression mre3 = (MemberReferenceExpression)mre2.TargetObject;
107
Assert.AreEqual("B", mre3.MemberName);
109
SimpleNameExpression tre = (SimpleNameExpression)mre3.TargetObject;
110
Assert.AreEqual("A", tre.Identifier);
111
Assert.AreEqual("T", tre.TypeArguments[0].Type);