@ -154,7 +154,127 @@ namespace ICSharpCode.NRefactory.Tests.AST
#endregion
#endregion
#region VB.NET
#region VB.NET
// TODO
[Test]
public void VBNetSimpleMethodDeclarationTest ( )
{
MethodDeclaration md = ( MethodDeclaration ) ParseUtilCSharp . ParseTypeMember ( "void MyMethod() {} " , typeof ( MethodDeclaration ) ) ;
Assert . AreEqual ( "void" , md . TypeReference . Type ) ;
Assert . AreEqual ( 0 , md . Parameters . Count ) ;
}
[Test]
public void VBNetSimpleMethodRegionTest ( )
{
const string program = @ "
void MyMethod ( )
{
OtherMethod ( ) ;
}
";
MethodDeclaration md = ( MethodDeclaration ) ParseUtilCSharp . ParseTypeMember ( program , typeof ( MethodDeclaration ) ) ;
Assert . AreEqual ( 2 , md . StartLocation . Y , "StartLocation.Y" ) ;
Assert . AreEqual ( 2 , md . EndLocation . Y , "EndLocation.Y" ) ;
Assert . AreEqual ( 3 , md . StartLocation . X , "StartLocation.X" ) ;
// endLocation.X is currently 20. It should be 18, but that error is not critical
//Assert.AreEqual(18, md.EndLocation.X, "EndLocation.X");
}
[Test]
public void VBNetMethodWithModifiersRegionTest ( )
{
const string program = @ "public shared sub MyMethod()
OtherMethod ( )
end sub ";
MethodDeclaration md = ( MethodDeclaration ) ParseUtilVBNet . ParseTypeMember ( program , typeof ( MethodDeclaration ) ) ;
Assert . AreEqual ( 2 , md . StartLocation . Y , "StartLocation.Y" ) ;
Assert . AreEqual ( 2 , md . EndLocation . Y , "EndLocation.Y" ) ;
Assert . AreEqual ( 2 , md . StartLocation . X , "StartLocation.X" ) ;
}
[Test]
public void VBNetGenericFunctionMethodDeclarationTest ( )
{
MethodDeclaration md = ( MethodDeclaration ) ParseUtilVBNet . ParseTypeMember ( "function MyMethod(Of T)(a As T) As Double\nEnd Function" , typeof ( MethodDeclaration ) ) ;
Assert . AreEqual ( "Double" , 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 ) ;
}
[Test]
public void VBNetGenericMethodDeclarationTest ( )
{
MethodDeclaration md = ( MethodDeclaration ) ParseUtilVBNet . ParseTypeMember ( "Function MyMethod(Of T)(a As T) As T\nEnd Function " , typeof ( MethodDeclaration ) ) ;
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 ) ;
}
[Test]
public void VBNetGenericMethodDeclarationWithConstraintTest ( )
{
string program = "Function MyMethod(Of T As { ISomeInterface })(a As T) As T\n End Function" ;
MethodDeclaration md = ( MethodDeclaration ) ParseUtilVBNet . ParseTypeMember ( program , typeof ( MethodDeclaration ) ) ;
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 ) ;
}
[Test]
public void VBNetGenericMethodInInterface ( )
{
const string program = @ "Interface MyInterface
Function MyMethod ( Of T As { ISomeInterface } ) ( a As T ) As T
End Interface ";
TypeDeclaration td = ( TypeDeclaration ) ParseUtilVBNet . ParseGlobal ( program , typeof ( TypeDeclaration ) ) ;
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 ) ;
}
[Test]
public void VBNetGenericVoidMethodInInterface ( )
{
const string program = @ "interface MyInterface
Sub MyMethod ( Of T As { ISomeInterface } ) ( a as T )
End Interface
";
TypeDeclaration td = ( TypeDeclaration ) ParseUtilVBNet . ParseGlobal ( program , typeof ( TypeDeclaration ) ) ;
MethodDeclaration md = ( MethodDeclaration ) td . Children [ 0 ] ;
Assert . AreEqual ( "" , 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 ) ;
}
#endregion
#endregion
}
}
}
}