|
|
|
@ -3,49 +3,50 @@
@@ -3,49 +3,50 @@
|
|
|
|
|
|
|
|
|
|
using System; |
|
|
|
|
using System.Linq; |
|
|
|
|
using ICSharpCode.NRefactory.TypeSystem; |
|
|
|
|
using NUnit.Framework; |
|
|
|
|
|
|
|
|
|
namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers |
|
|
|
|
{ |
|
|
|
|
[TestFixture] |
|
|
|
|
[TestFixture, Ignore("Generics not yet implemented")] |
|
|
|
|
public class MethodDeclarationTests |
|
|
|
|
{ |
|
|
|
|
[Test, Ignore("type references not yet implemented")] |
|
|
|
|
[Test] |
|
|
|
|
public void SimpleMethodDeclarationTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyMethod() {} "); |
|
|
|
|
Assert.AreEqual("System.Void", md.ReturnType); |
|
|
|
|
Assert.AreEqual("void", ((PrimitiveType)md.ReturnType).Keyword); |
|
|
|
|
Assert.AreEqual(0, md.Parameters.Count()); |
|
|
|
|
Assert.IsFalse(md.IsExtensionMethod); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test, Ignore("type references not yet implemented")] |
|
|
|
|
[Test] |
|
|
|
|
public void AbstractMethodDeclarationTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("abstract void MyMethod();"); |
|
|
|
|
Assert.AreEqual("System.Void", md.ReturnType); |
|
|
|
|
Assert.AreEqual("void", ((PrimitiveType)md.ReturnType).Keyword); |
|
|
|
|
Assert.AreEqual(0, md.Parameters.Count()); |
|
|
|
|
Assert.IsFalse(md.IsExtensionMethod); |
|
|
|
|
Assert.IsTrue(md.Body.IsNull); |
|
|
|
|
Assert.AreEqual(Modifiers.Abstract, md.Modifiers); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test, Ignore("type references not yet implemented")] |
|
|
|
|
[Test] |
|
|
|
|
public void DefiningPartialMethodDeclarationTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod();"); |
|
|
|
|
Assert.AreEqual("System.Void", md.ReturnType); |
|
|
|
|
Assert.AreEqual("void", ((PrimitiveType)md.ReturnType).Keyword); |
|
|
|
|
Assert.AreEqual(0, md.Parameters.Count()); |
|
|
|
|
Assert.IsFalse(md.IsExtensionMethod); |
|
|
|
|
Assert.IsTrue(md.Body.IsNull); |
|
|
|
|
Assert.AreEqual(Modifiers.Partial, md.Modifiers); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test, Ignore("type references not yet implemented")] |
|
|
|
|
[Test] |
|
|
|
|
public void ImplementingPartialMethodDeclarationTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("partial void MyMethod() { }"); |
|
|
|
|
Assert.AreEqual("System.Void", md.ReturnType); |
|
|
|
|
Assert.AreEqual("void", ((PrimitiveType)md.ReturnType).Keyword); |
|
|
|
|
Assert.AreEqual(0, md.Parameters.Count()); |
|
|
|
|
Assert.IsFalse(md.IsExtensionMethod); |
|
|
|
|
Assert.IsFalse(md.Body.IsNull); |
|
|
|
@ -81,6 +82,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
@@ -81,6 +82,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
|
|
|
|
|
Assert.AreEqual(2, md.StartLocation.Line, "StartLocation.Y"); |
|
|
|
|
Assert.AreEqual(5, md.EndLocation.Line, "EndLocation.Y"); |
|
|
|
|
Assert.AreEqual(3, md.StartLocation.Column, "StartLocation.X"); |
|
|
|
|
Assert.AreEqual(4, md.EndLocation.Column, "EndLocation.X"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
@ -89,142 +91,176 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
@@ -89,142 +91,176 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
|
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyMethod(int) {} ", true); |
|
|
|
|
Assert.AreEqual("System.Void", md.ReturnType); |
|
|
|
|
Assert.AreEqual(1, md.Parameters.Count()); |
|
|
|
|
//Assert.AreEqual("?", ((ParameterDeclarationExpression)md.Parameters[0]).ParameterName);
|
|
|
|
|
Assert.AreEqual("int", ((PrimitiveType)md.Parameters.Single().Type).Keyword); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* TODO: port unit tests |
|
|
|
|
[Test] |
|
|
|
|
public void GenericVoidMethodDeclarationTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyMethod<T>(T a) {} "); |
|
|
|
|
Assert.AreEqual("System.Void", md.ReturnType); |
|
|
|
|
Assert.AreEqual(1, md.Parameters.Count()); |
|
|
|
|
Assert.AreEqual("T", md.Parameters.Single().Type); |
|
|
|
|
Assert.AreEqual("a", md.Parameters.Single().Name); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, md.TypeParameters.Count()); |
|
|
|
|
Assert.AreEqual("T", md.Templates[0].Name); |
|
|
|
|
ParseUtilCSharp.AssertTypeMember( |
|
|
|
|
"void MyMethod<T>(T a) {} ", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new PrimitiveType("void"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
TypeParameters = { new TypeParameterDeclaration { Name = "T" } }, |
|
|
|
|
Parameters = { new ParameterDeclaration(new SimpleType("T"), "a") }, |
|
|
|
|
Body = new BlockStatement() |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void GenericMethodDeclarationTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("T MyMethod<T>(T a) {} "); |
|
|
|
|
Assert.AreEqual("T", md.TypeReference.Type); |
|
|
|
|
Assert.AreEqual(1, md.Parameters.Count); |
|
|
|
|
Assert.AreEqual("T", ((ParameterDeclarationExpression)md.Parameters[0]).TypeReference.Type); |
|
|
|
|
Assert.AreEqual("a", ((ParameterDeclarationExpression)md.Parameters[0]).ParameterName); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, md.Templates.Count); |
|
|
|
|
Assert.AreEqual("T", md.Templates[0].Name); |
|
|
|
|
ParseUtilCSharp.AssertTypeMember( |
|
|
|
|
"T MyMethod<T>(T a) {} ", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new SimpleType("T"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
TypeParameters = { new TypeParameterDeclaration { Name = "T" } }, |
|
|
|
|
Parameters = { new ParameterDeclaration(new SimpleType("T"), "a") }, |
|
|
|
|
Body = new BlockStatement() |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void GenericMethodDeclarationWithConstraintTest() |
|
|
|
|
{ |
|
|
|
|
string program = "T MyMethod<T>(T a) where T : ISomeInterface {} "; |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>(program); |
|
|
|
|
Assert.AreEqual("T", md.TypeReference.Type); |
|
|
|
|
Assert.AreEqual(1, md.Parameters.Count); |
|
|
|
|
Assert.AreEqual("T", ((ParameterDeclarationExpression)md.Parameters[0]).TypeReference.Type); |
|
|
|
|
Assert.AreEqual("a", ((ParameterDeclarationExpression)md.Parameters[0]).ParameterName); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, md.Templates.Count); |
|
|
|
|
Assert.AreEqual("T", md.Templates[0].Name); |
|
|
|
|
Assert.AreEqual(1, md.Templates[0].Bases.Count); |
|
|
|
|
Assert.AreEqual("ISomeInterface", md.Templates[0].Bases[0].Type); |
|
|
|
|
ParseUtilCSharp.AssertTypeMember( |
|
|
|
|
"T MyMethod<T>(T a) where T : ISomeInterface {} ", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new SimpleType("T"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
TypeParameters = { new TypeParameterDeclaration { Name = "T" } }, |
|
|
|
|
Parameters = { new ParameterDeclaration(new SimpleType("T"), "a") }, |
|
|
|
|
Constraints = { |
|
|
|
|
new Constraint { |
|
|
|
|
TypeParameter = "T", |
|
|
|
|
BaseTypes = { new SimpleType("ISomeInterface") } |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
Body = new BlockStatement() |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void GenericMethodInInterface() |
|
|
|
|
{ |
|
|
|
|
const string program = @"interface MyInterface {
|
|
|
|
|
ParseUtilCSharp.AssertGlobal( |
|
|
|
|
@"interface MyInterface {
|
|
|
|
|
T MyMethod<T>(T a) where T : ISomeInterface; |
|
|
|
|
} |
|
|
|
|
";
|
|
|
|
|
TypeDeclaration td = ParseUtilCSharp.ParseGlobal<TypeDeclaration>(program); |
|
|
|
|
MethodDeclaration md = (MethodDeclaration)td.Children[0]; |
|
|
|
|
Assert.AreEqual("T", md.TypeReference.Type); |
|
|
|
|
Assert.AreEqual(1, md.Parameters.Count); |
|
|
|
|
Assert.AreEqual("T", ((ParameterDeclarationExpression)md.Parameters[0]).TypeReference.Type); |
|
|
|
|
Assert.AreEqual("a", ((ParameterDeclarationExpression)md.Parameters[0]).ParameterName); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, md.Templates.Count); |
|
|
|
|
Assert.AreEqual("T", md.Templates[0].Name); |
|
|
|
|
Assert.AreEqual(1, md.Templates[0].Bases.Count); |
|
|
|
|
Assert.AreEqual("ISomeInterface", md.Templates[0].Bases[0].Type); |
|
|
|
|
",
|
|
|
|
|
new TypeDeclaration { |
|
|
|
|
ClassType = ClassType.Interface, |
|
|
|
|
Members = { |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new SimpleType("T"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
TypeParameters = { new TypeParameterDeclaration { Name = "T" } }, |
|
|
|
|
Parameters = { new ParameterDeclaration(new SimpleType("T"), "a") }, |
|
|
|
|
Constraints = { |
|
|
|
|
new Constraint { |
|
|
|
|
TypeParameter = "T", |
|
|
|
|
BaseTypes = { new SimpleType("ISomeInterface") } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}}}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void GenericVoidMethodInInterface() |
|
|
|
|
{ |
|
|
|
|
const string program = @"interface MyInterface {
|
|
|
|
|
ParseUtilCSharp.AssertGlobal( |
|
|
|
|
@"interface MyInterface {
|
|
|
|
|
void MyMethod<T>(T a) where T : ISomeInterface; |
|
|
|
|
} |
|
|
|
|
";
|
|
|
|
|
TypeDeclaration td = ParseUtilCSharp.ParseGlobal<TypeDeclaration>(program); |
|
|
|
|
MethodDeclaration md = (MethodDeclaration)td.Children[0]; |
|
|
|
|
Assert.AreEqual("System.Void", md.TypeReference.Type); |
|
|
|
|
Assert.AreEqual(1, md.Parameters.Count); |
|
|
|
|
Assert.AreEqual("T", ((ParameterDeclarationExpression)md.Parameters[0]).TypeReference.Type); |
|
|
|
|
Assert.AreEqual("a", ((ParameterDeclarationExpression)md.Parameters[0]).ParameterName); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual(1, md.Templates.Count); |
|
|
|
|
Assert.AreEqual("T", md.Templates[0].Name); |
|
|
|
|
Assert.AreEqual(1, md.Templates[0].Bases.Count); |
|
|
|
|
Assert.AreEqual("ISomeInterface", md.Templates[0].Bases[0].Type); |
|
|
|
|
",
|
|
|
|
|
new TypeDeclaration { |
|
|
|
|
ClassType = ClassType.Interface, |
|
|
|
|
Members = { |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new PrimitiveType("void"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
TypeParameters = { new TypeParameterDeclaration { Name = "T" } }, |
|
|
|
|
Parameters = { new ParameterDeclaration(new SimpleType("T"), "a") }, |
|
|
|
|
Constraints = { |
|
|
|
|
new Constraint { |
|
|
|
|
TypeParameter = "T", |
|
|
|
|
BaseTypes = { new SimpleType("ISomeInterface") } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}}}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void ShadowingMethodInInterface() |
|
|
|
|
{ |
|
|
|
|
const string program = @"interface MyInterface : IDisposable {
|
|
|
|
|
ParseUtilCSharp.AssertGlobal( |
|
|
|
|
@"interface MyInterface : IDisposable {
|
|
|
|
|
new void Dispose(); |
|
|
|
|
} |
|
|
|
|
";
|
|
|
|
|
TypeDeclaration td = ParseUtilCSharp.ParseGlobal<TypeDeclaration>(program); |
|
|
|
|
MethodDeclaration md = (MethodDeclaration)td.Children[0]; |
|
|
|
|
Assert.AreEqual("System.Void", md.TypeReference.Type); |
|
|
|
|
Assert.AreEqual(0, md.Parameters.Count); |
|
|
|
|
Assert.AreEqual(Modifiers.New, md.Modifier); |
|
|
|
|
",
|
|
|
|
|
new TypeDeclaration { |
|
|
|
|
ClassType = ClassType.Interface, |
|
|
|
|
BaseTypes = { new SimpleType("IDisposable") }, |
|
|
|
|
Members = { |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
Modifiers = Modifiers.New, |
|
|
|
|
ReturnType = new PrimitiveType("void"), |
|
|
|
|
Name = "Dispose" |
|
|
|
|
}}}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void MethodImplementingInterfaceTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("int MyInterface.MyMethod() {} "); |
|
|
|
|
Assert.AreEqual("System.Int32", md.TypeReference.Type); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual("MyInterface", md.InterfaceImplementations[0].InterfaceType.Type); |
|
|
|
|
ParseUtilCSharp.AssertGlobal( |
|
|
|
|
"int MyInterface.MyMethod() {} ", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new PrimitiveType("int"), |
|
|
|
|
PrivateImplementationType = new SimpleType("MyInterface"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
Body = new BlockStatement() |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void MethodImplementingGenericInterfaceTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("int MyInterface<string>.MyMethod() {} "); |
|
|
|
|
Assert.AreEqual("System.Int32", md.TypeReference.Type); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual("MyInterface", md.InterfaceImplementations[0].InterfaceType.Type); |
|
|
|
|
Assert.AreEqual("System.String", md.InterfaceImplementations[0].InterfaceType.GenericTypes[0].Type); |
|
|
|
|
ParseUtilCSharp.AssertGlobal( |
|
|
|
|
"int MyInterface<string>.MyMethod() {} ", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new PrimitiveType("int"), |
|
|
|
|
PrivateImplementationType = new SimpleType("MyInterface") { TypeArguments = { new PrimitiveType("string") } }, |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
Body = new BlockStatement() |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void VoidMethodImplementingInterfaceTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyInterface.MyMethod() {} "); |
|
|
|
|
Assert.AreEqual("System.Void", md.TypeReference.Type); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual("MyInterface", md.InterfaceImplementations[0].InterfaceType.Type); |
|
|
|
|
ParseUtilCSharp.AssertGlobal( |
|
|
|
|
"void MyInterface.MyMethod() {} ", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new PrimitiveType("void"), |
|
|
|
|
PrivateImplementationType = new SimpleType("MyInterface"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
Body = new BlockStatement() |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void VoidMethodImplementingGenericInterfaceTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>("void MyInterface<string>.MyMethod() {} "); |
|
|
|
|
Assert.AreEqual("System.Void", md.TypeReference.Type); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual("MyInterface", md.InterfaceImplementations[0].InterfaceType.Type); |
|
|
|
|
Assert.AreEqual("System.String", md.InterfaceImplementations[0].InterfaceType.GenericTypes[0].Type); |
|
|
|
|
ParseUtilCSharp.AssertGlobal( |
|
|
|
|
"void MyInterface<string>.MyMethod() {} ", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
ReturnType = new PrimitiveType("void"), |
|
|
|
|
PrivateImplementationType = new SimpleType("MyInterface"), |
|
|
|
|
Name = "MyMethod", |
|
|
|
|
Body = new BlockStatement() |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
@ -234,9 +270,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
@@ -234,9 +270,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
|
|
|
|
|
"void a<T>() where T { }", true // expect errors
|
|
|
|
|
); |
|
|
|
|
Assert.AreEqual("a", md.Name); |
|
|
|
|
Assert.AreEqual(1, md.Templates.Count); |
|
|
|
|
Assert.AreEqual("T", md.Templates[0].Name); |
|
|
|
|
Assert.AreEqual(0, md.Templates[0].Bases.Count); |
|
|
|
|
Assert.AreEqual(1, md.TypeParameters.Count); |
|
|
|
|
Assert.AreEqual("T", md.TypeParameters.Single().Name); |
|
|
|
|
Assert.AreEqual(0, md.Constraints.Count()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
@ -246,11 +282,11 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
@@ -246,11 +282,11 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
|
|
|
|
|
"public static int ToInt32(this string s) { return int.Parse(s); }" |
|
|
|
|
); |
|
|
|
|
Assert.AreEqual("ToInt32", md.Name); |
|
|
|
|
Assert.AreEqual("s", md.Parameters.First().Name); |
|
|
|
|
Assert.AreEqual(ParameterModifier.This, md.Parameters.First().ParameterModifier); |
|
|
|
|
Assert.AreEqual("string", ((PrimitiveType)md.Parameters.First().Type).Keyword); |
|
|
|
|
Assert.IsTrue(md.IsExtensionMethod); |
|
|
|
|
Assert.AreEqual("s", md.Parameters[0].ParameterName); |
|
|
|
|
Assert.AreEqual("System.String", md.Parameters[0].TypeReference.Type); |
|
|
|
|
} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void VoidExtensionMethodTest() |
|
|
|
@ -265,7 +301,6 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
@@ -265,7 +301,6 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
|
|
|
|
|
Assert.IsTrue(md.IsExtensionMethod); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* TODO |
|
|
|
|
[Test] |
|
|
|
|
public void MethodWithEmptyAssignmentErrorInBody() |
|
|
|
|
{ |
|
|
|
@ -277,27 +312,32 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
@@ -277,27 +312,32 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.TypeMembers
|
|
|
|
|
"}", true // expect errors
|
|
|
|
|
); |
|
|
|
|
Assert.AreEqual("A", md.Name); |
|
|
|
|
Assert.AreEqual(new Location(1, 2), md.Body.StartLocation); |
|
|
|
|
Assert.AreEqual(new Location(2, 5), md.Body.EndLocation); |
|
|
|
|
Assert.AreEqual(new AstLocation(1, 2), md.Body.StartLocation); |
|
|
|
|
Assert.AreEqual(new AstLocation(2, 5), md.Body.EndLocation); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void OptionalParameterTest() |
|
|
|
|
{ |
|
|
|
|
MethodDeclaration md = ParseUtilCSharp.ParseTypeMember<MethodDeclaration>( |
|
|
|
|
"public void Foo(string bar = null, int baz = 0) { }" |
|
|
|
|
); |
|
|
|
|
Assert.AreEqual("Foo", md.Name); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual("bar", md.Parameters[0].ParameterName); |
|
|
|
|
Assert.AreEqual("System.String", md.Parameters[0].TypeReference.Type); |
|
|
|
|
Assert.AreEqual(ParameterModifiers.In | ParameterModifiers.Optional, md.Parameters[0].ParamModifier); |
|
|
|
|
Assert.IsNull(((PrimitiveExpression)md.Parameters[0].DefaultValue).Value); |
|
|
|
|
|
|
|
|
|
Assert.AreEqual("baz", md.Parameters[1].ParameterName); |
|
|
|
|
Assert.AreEqual("System.Int32", md.Parameters[1].TypeReference.Type); |
|
|
|
|
Assert.AreEqual(ParameterModifiers.In | ParameterModifiers.Optional, md.Parameters[1].ParamModifier); |
|
|
|
|
Assert.AreEqual(0, ((PrimitiveExpression)md.Parameters[1].DefaultValue).Value); |
|
|
|
|
}*/ |
|
|
|
|
ParseUtilCSharp.AssertTypeMember( |
|
|
|
|
"public void Foo(string bar = null, int baz = 0) { }", |
|
|
|
|
new MethodDeclaration { |
|
|
|
|
Modifiers = Modifiers.Public, |
|
|
|
|
ReturnType = new PrimitiveType("void"), |
|
|
|
|
Name = "Foo", |
|
|
|
|
Body = new BlockStatement(), |
|
|
|
|
Parameters = { |
|
|
|
|
new ParameterDeclaration { |
|
|
|
|
Type = new PrimitiveType("string"), |
|
|
|
|
Name = "bar", |
|
|
|
|
DefaultExpression = new NullReferenceExpression() |
|
|
|
|
}, |
|
|
|
|
new ParameterDeclaration { |
|
|
|
|
Type = new PrimitiveType("int"), |
|
|
|
|
Name = "baz", |
|
|
|
|
DefaultExpression = new PrimitiveExpression(0) |
|
|
|
|
} |
|
|
|
|
}}); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|