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.Parser;
8
using ICSharpCode.NRefactory.Ast;
10
namespace ICSharpCode.NRefactory.Tests.Ast
13
public class TypeOfExpressionTests
17
public void CSharpSimpleTypeOfExpressionTest()
19
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(MyNamespace.N1.MyType)");
20
Assert.AreEqual("MyNamespace.N1.MyType", toe.TypeReference.Type);
24
public void CSharpGlobalTypeOfExpressionTest()
26
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(global::System.Console)");
27
Assert.AreEqual("System.Console", toe.TypeReference.Type);
31
public void CSharpPrimitiveTypeOfExpressionTest()
33
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(int)");
34
Assert.AreEqual("System.Int32", toe.TypeReference.Type);
38
public void CSharpVoidTypeOfExpressionTest()
40
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(void)");
41
Assert.AreEqual("System.Void", toe.TypeReference.Type);
45
public void CSharpArrayTypeOfExpressionTest()
47
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(MyType[])");
48
Assert.AreEqual("MyType", toe.TypeReference.Type);
49
Assert.AreEqual(new int[] {0}, toe.TypeReference.RankSpecifier);
53
public void CSharpGenericTypeOfExpressionTest()
55
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(MyNamespace.N1.MyType<string>)");
56
Assert.AreEqual("MyNamespace.N1.MyType", toe.TypeReference.Type);
57
Assert.AreEqual("System.String", toe.TypeReference.GenericTypes[0].Type);
61
public void CSharpNestedGenericTypeOfExpressionTest()
63
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(MyType<string>.InnerClass<int>.InnerInnerClass)");
64
InnerClassTypeReference ic = (InnerClassTypeReference)toe.TypeReference;
65
Assert.AreEqual("InnerInnerClass", ic.Type);
66
Assert.AreEqual(0, ic.GenericTypes.Count);
67
ic = (InnerClassTypeReference)ic.BaseType;
68
Assert.AreEqual("InnerClass", ic.Type);
69
Assert.AreEqual(1, ic.GenericTypes.Count);
70
Assert.AreEqual("System.Int32", ic.GenericTypes[0].Type);
71
Assert.AreEqual("MyType", ic.BaseType.Type);
72
Assert.AreEqual(1, ic.BaseType.GenericTypes.Count);
73
Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].Type);
77
public void CSharpNullableTypeOfExpressionTest()
79
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(MyStruct?)");
80
Assert.AreEqual("System.Nullable", toe.TypeReference.Type);
81
Assert.AreEqual("MyStruct", toe.TypeReference.GenericTypes[0].Type);
85
public void CSharpUnboundTypeOfExpressionTest()
87
TypeOfExpression toe = ParseUtilCSharp.ParseExpression<TypeOfExpression>("typeof(MyType<,>)");
88
Assert.AreEqual("MyType", toe.TypeReference.Type);
89
Assert.IsTrue(toe.TypeReference.GenericTypes[0].IsNull);
90
Assert.IsTrue(toe.TypeReference.GenericTypes[1].IsNull);
96
public void VBSimpleTypeOfExpressionTest()
98
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(MyNamespace.N1.MyType)");
99
Assert.AreEqual("MyNamespace.N1.MyType", toe.TypeReference.Type);
104
public void VBGlobalTypeOfExpressionTest()
106
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(Global.System.Console)");
107
Assert.AreEqual("System.Console", toe.TypeReference.Type);
111
public void VBPrimitiveTypeOfExpressionTest()
113
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(integer)");
114
Assert.AreEqual("System.Int32", toe.TypeReference.Type);
118
public void VBVoidTypeOfExpressionTest()
120
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(void)");
121
Assert.AreEqual("void", toe.TypeReference.Type);
125
public void VBArrayTypeOfExpressionTest()
127
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(MyType())");
128
Assert.AreEqual("MyType", toe.TypeReference.Type);
129
Assert.AreEqual(new int[] {0}, toe.TypeReference.RankSpecifier);
133
public void VBGenericTypeOfExpressionTest()
135
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(MyNamespace.N1.MyType(Of string))");
136
Assert.AreEqual("MyNamespace.N1.MyType", toe.TypeReference.Type);
137
Assert.AreEqual("System.String", toe.TypeReference.GenericTypes[0].Type);
141
public void VBUnboundTypeOfExpressionTest()
143
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(MyType(Of ,))");
144
Assert.AreEqual("MyType", toe.TypeReference.Type);
145
Assert.IsTrue(toe.TypeReference.GenericTypes[0].IsNull);
146
Assert.IsTrue(toe.TypeReference.GenericTypes[1].IsNull);
150
public void VBNestedGenericTypeOfExpressionTest()
152
TypeOfExpression toe = ParseUtilVBNet.ParseExpression<TypeOfExpression>("GetType(MyType(Of string).InnerClass(of integer).InnerInnerClass)");
153
InnerClassTypeReference ic = (InnerClassTypeReference)toe.TypeReference;
154
Assert.AreEqual("InnerInnerClass", ic.Type);
155
Assert.AreEqual(0, ic.GenericTypes.Count);
156
ic = (InnerClassTypeReference)ic.BaseType;
157
Assert.AreEqual("InnerClass", ic.Type);
158
Assert.AreEqual(1, ic.GenericTypes.Count);
159
Assert.AreEqual("System.Int32", ic.GenericTypes[0].Type);
160
Assert.AreEqual("MyType", ic.BaseType.Type);
161
Assert.AreEqual(1, ic.BaseType.GenericTypes.Count);
162
Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].Type);